![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Массив и строки. [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)