Главная страница
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.026 c
1-1106903212
AlexTregubov
2005-01-28 12:06
2005.02.13
Пакую с помощью rar.exe как сделать progressBar


1-1106937671
Вован
2005-01-28 21:41
2005.02.13
Исходники


14-1106329949
dredd
2005-01-21 20:52
2005.02.13
просьба админам


3-1105865541
makey22
2005-01-16 11:52
2005.02.13
DOS-кодировка в DBF


3-1105686496
DelphiN!
2005-01-14 10:08
2005.02.13
Как добавить в поле столбца еще один стобец со своими полями ?