![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Как можно записать в нетипезированый файл массив строк.
magical_g © (2005-01-29 11:28:00)Как можно записать в нетипезированый файл массив строк.
Пример:
Var
ar:array of string[100];
begin
assignfile(f1,'c:\delete.txt');
rewrite(f1,1);
setlength(ar,4);
//занесение данных
BlockWrite(f1,ar,4*100);
Работает некоректно.
Проблема в том, что я их немогу записать даже в виде обыкновенного массива...
procedure TForm1.Button1Click(Sender: TObject);
Var
f1:file;
ar:array of string[100];
temp:integer;
begin
assignfile(f1,'c:\delete.txt');
rewrite(f1,1);
SetLength(ar,2);
ar[0]:='1';
ar[1]:='2';
BlockWrite(f1,ar[0],SizeOf(ar[0])*sizeof(char),temp);
closefile(f1);
end;
procedure TForm1.Button2Click(Sender: TObject);
Var
f1:file;
ar:array of string[100];
temp:integer;
begin
assignfile(f1,'c:\delete.txt');
reset(f1,1);
SetLength(ar,2);
ar[0]:='';
ar[1]:='';
BlockWrite(f1,ar[0],SizeOf(ar[0])*sizeof(char),temp);
closefile(f1);
end;
Anatoly Podgoretsky (2005-01-29 14:05:00) [1]В крайнем случае типизированный файл.
Anatoly Podgoretsky (2005-01-29 14:00:00) [2]Здесь прекрасно подходит текстовый файл.
Зачем мудрить с нетипизированным? Цель какая?
magical_g (2005-01-29 13:15:00) [3]Ой извиняюсь, незаметил, ща попробую!
begin...end (2005-01-29 12:58:00) [4]> [6] magical_g (29.01.05 12:50)
Я не понял, Вы [2] попробовали?
> Зачем мне писать длину строки в файл
Так делают при записи длинных строк.
magical_g (2005-01-29 12:50:00) [5]Ну и. Зачем мне писать длину строки в файл, если при фиксированиой длинне результат не верный...
Я то буду знать сколько читать, но сейчас и зная это проблема не решилась!
Jel (2005-01-29 12:43:00) [6]
> Может быть, лучше проверять свои предположения перед их
> озвучиванием?
Да, как верно подметил гражданин Маркс - "Теория без практики мертва". Впредь будем проверять перед озвучиванием. :)
begin...end (2005-01-29 12:26:00) [7]> [3] Jel © (29.01.05 12:20)
> Нет, это придумал Borland, когда разрабатывал концепцию
> "длинных строк" (AnsiString и WideString).
В приведённом коде НЕ используются длинные строки. Поэтому непонятно, к чему Вы это вообще сказали.
> А поскольку автор ветки использует динамический массив -
> все элементы в нем будут указателями, невзирая на объявление
> string[100].
Размер указателя составляет 4 байта. Размер каждого элемента динамического массива, состоящего из коротких строк String[100], будет равен 101 байту. Вы можете в этом убедиться, используя функцию SizeOf. Вас это ни на какие мысли не наводит? Может быть, лучше проверять свои предположения перед их озвучиванием?
Jel (2005-01-29 12:20:00) [8]
> > Массив строк на самом деле представляет собой массив указателей
>
> > на строки
>
> Это Вы сами придумали?
Нет, это придумал Borland, когда разрабатывал концепцию "длинных строк" (AnsiString и WideString). А поскольку автор ветки использует динамический массив - все элементы в нем будут указателями, невзирая на объявление string[100].
begin...end (2005-01-29 11:53:00) [9]> magical_g (29.01.05 11:28)
> procedure TForm1.Button1Click(Sender: TObject);
> BlockWrite(f1,ar[0],SizeOf(ar[0])*sizeof(char),temp);
BlockWrite(f1, ar[0], SizeOf(ar[0]) * Length(ar), temp)
> procedure TForm1.Button2Click(Sender: TObject);
> BlockWrite(f1,ar[0],SizeOf(ar[0])*sizeof(char),temp);
BlockRead(f1, a[0], SizeOf(ar[0]) * Length(ar), temp)
> [1] Jel © (29.01.05 11:34)
> Массив строк на самом деле представляет собой массив указателей
> на строки
Это Вы сами придумали?
Jel (2005-01-29 11:34:00) [10]Массив строк на самом деле представляет собой массив указателей на строки, поэтому писать и читать его нужно построчно. Я бы писал так:
Количество строк в массиве
Длина первой строки
Сама строка
Длина N-ой строки
Сама строка
и так до конца.