Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2005.02.13;
Скачать: CL | DM;

Вниз

Как можно записать в нетипезированый файл массив строк.   Найти похожие ветки 

 
magical_g   (2005-01-29 11:28) [0]

Как можно записать в нетипезированый файл массив строк.

Пример:

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;


 
Jel ©   (2005-01-29 11:34) [1]

Массив строк на самом деле представляет собой массив указателей на строки, поэтому писать и читать его нужно построчно. Я бы писал так:

Количество строк в массиве
Длина первой строки
Сама строка
Длина N-ой строки
Сама строка

и так до конца.


 
begin...end ©   (2005-01-29 11:53) [2]

> 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 12:20) [3]


> > Массив строк на самом деле представляет собой массив указателей
>
> > на строки
>
> Это Вы сами придумали?


Нет, это придумал Borland, когда разрабатывал концепцию "длинных строк" (AnsiString и WideString). А поскольку автор ветки использует динамический массив - все элементы в нем будут указателями, невзирая на объявление string[100].


 
begin...end ©   (2005-01-29 12:26) [4]

> [3] Jel ©   (29.01.05 12:20)

> Нет, это придумал Borland, когда разрабатывал концепцию
> "длинных строк" (AnsiString и WideString).

В приведённом коде НЕ используются длинные строки. Поэтому непонятно, к чему Вы это вообще сказали.

> А поскольку автор ветки использует динамический массив -
> все элементы в нем будут указателями, невзирая на объявление
> string[100].

Размер указателя составляет 4 байта. Размер каждого элемента динамического массива, состоящего из коротких строк String[100], будет равен 101 байту. Вы можете в этом убедиться, используя функцию SizeOf. Вас это ни на какие мысли не наводит? Может быть, лучше проверять свои предположения перед их озвучиванием?


 
Jel ©   (2005-01-29 12:43) [5]


> Может быть, лучше проверять свои предположения перед их
> озвучиванием?

Да, как верно подметил гражданин Маркс - "Теория без практики мертва". Впредь будем проверять перед озвучиванием. :)


 
magical_g   (2005-01-29 12:50) [6]

Ну и. Зачем мне писать длину строки в файл, если при фиксированиой длинне результат не верный...
Я то буду знать сколько читать, но сейчас и зная это проблема не решилась!


 
begin...end ©   (2005-01-29 12:58) [7]

> [6] magical_g   (29.01.05 12:50)

Я не понял, Вы [2] попробовали?

> Зачем мне писать длину строки в файл

Так делают при записи длинных строк.


 
magical_g   (2005-01-29 13:15) [8]

Ой извиняюсь, незаметил, ща попробую!


 
Anatoly Podgoretsky ©   (2005-01-29 14:00) [9]

Здесь прекрасно подходит текстовый файл.
Зачем мудрить с нетипизированным? Цель какая?


 
Anatoly Podgoretsky ©   (2005-01-29 14:05) [10]

В крайнем случае типизированный файл.



Страницы: 1 вся ветка

Текущий архив: 2005.02.13;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.062 c
4-1104220306
Kair
2004-12-28 10:51
2005.02.13
Мастера, научите!


1-1107044468
KOLIG
2005-01-30 03:21
2005.02.13
Height of верхней полоски на форме


3-1105599719
denis24
2005-01-13 10:01
2005.02.13
Tadotable.locktype


1-1106847291
rel_
2005-01-27 20:34
2005.02.13
Маркеры в TChart


14-1106419109
Alex_pv2
2005-01-22 21:38
2005.02.13
Как сделать неактивным Items в TListBox