Форум: "Основная";
Текущий архив: 2005.02.13;
Скачать: [xml.tar.bz2];
ВнизКак можно записать в нетипезированый файл массив строк. Найти похожие ветки
← →
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;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.066 c