Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 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
3-1105529961
grigory
2005-01-12 14:39
2005.02.13
Публикация базы в интернете!


1-1106934188
Pers
2005-01-28 20:43
2005.02.13
Поиск файлов


4-1103566714
sashas
2004-12-20 21:18
2005.02.13
Получение сообщения WM_MOUSELEAVE


1-1106830140
Карелин Артем
2005-01-27 15:49
2005.02.13
Как быстрее отловить завершение работы в Windows?


14-1106296056
ocean
2005-01-21 11:27
2005.02.13
Как пометить файл в гиперссылке для download?





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский