Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Массив и строки. [D6, WinXP]


chelovek ©   (2005-05-21 08:55:00) 

Как строку передать в массив?
Например:

var
MyPeremArray: array [0..31] of Char;
MyPeremStr: String[32];


Defunct   (2005-05-21 10:56:00) [1]

> файл создает не мое приложение

Тогда не вопрос.


chelovek   (2005-05-21 10:35:00) [2]

Defunct ©   (21.05.05 10:24) [8]
Defunct ©   (21.05.05 10:24) [9]

В принципе согласен.
Но дело в том, что есть некая сложная структура типа

type
MyRecord = record
           name: String[32];
           date: tDateTime;
           ................
           end;


Вот если в таком виде сохранять, то сохраняется строка в виде
[длина строки], [строка],[date],[....] и так далее. В файле с которым мне необходимо работать (файл создает не мое приложение) нет поля [длина строки]. У меня получилось читать и писать в этот файл только с таким типом:

type
MyRecord = record
           name: array [0..31] of Char;
           date: tDateTime;
           ................
           end;

Вот собственно и все. Нумерация с 0 по привичке, что бы не заморачиваться с началом отсчета где с 0 где с 1.


Defunct   (2005-05-21 10:24:00) [3]

Для коротких строк:

S : ShortString;

// Запись

BlockWrite( F, S[0], Length(S)+1);

// Чтение
BlockRead(F, S[0], 1);
BlockRead(F, S[1], Byte(S[0]) );


Defunct   (2005-05-21 10:21:00) [4]

ну так imho String лучше подходит для записи в файл.

можно так:
S: String[32]
// Запись
BlockWrite(F, S, SizeOf(S) );

// Чтение
BlockRead( F, S, SizeOf(S) );


а можно и даже так (не сохраняя лишних символов):
S : String;
I : Integer;

// Запись
I := Length(S);
BlockWrite( F, I, SizeOf(i) );  // Сохраняем кол-во символов
BlockWrite( F, S[1], i);        // Сохраняем строку в файл

// Чтение
BlockRead( F, I, SizeOf(i) );   // Читаем сохраненную длину
SetLength( S, I);               // Меняем длину строки
BlockRead( F, S[1], i);         // Читаем строку из файла


chelovek   (2005-05-21 10:14:00) [5]

Defunct ©   (21.05.05 10:10) [6]

Для записи в файл.


Defunct   (2005-05-21 10:10:00) [6]

> chelovek

Скажите, а для чего понадобилось более универсальный массив чар ака String переводить в менее универсальный - array[0..31] of char. Неужели так важно нумеровать с нуля?


chelovek   (2005-05-21 10:07:00) [7]

petya-kurochkin ©   (21.05.05 9:56) [4]

вариант с ошибками :)

тогда уж MyPeremStr:=MyPeremArray;
хотя я и не об этом спрашивал.


petya-kurochkin   (2005-05-21 09:56:00) [8]

Кстати, есть вариант цикла:
for i=1 to 31 do MyPeremStr[i]:=MyPeremArray[1];


Defunct   (2005-05-21 09:45:00) [9]

строка это уже массив Char.

MyPeremStr[i] - i-й чар строки.


chelovek   (2005-05-21 09:04:00) [10]

begin...end ©   (21.05.05 08:59) [1]
Спасибо.


begin...end   (2005-05-21 08:59:00) [11]

В данном случае можно так:

Move(MyPeremStr[1], MyPeremArray, 32)


Наверх

Титульная страница Поиск, карта сайта Написать письмо