Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Прочее";
Текущий архив: 2006.06.04;
Скачать: [xml.tar.bz2];

Вниз

Сохранить/загрузить динамический массив   Найти похожие ветки 

 
alex-drob ©   (2006-05-14 00:22) [0]

Как сохранить, а потом загрузить массив в файл?

Пробую сохранить так:

 setlength(ar,5);
 ar[0]:="str 1";
 ar[1]:="str 2";
 ar[2]:="str 3";
 ar[3]:="str 4";
 ar[4]:="str 5";
 size:=length(ar)*sizeof(string);
 ms:= TMemoryStream.Create;
 ms.WriteBuffer(ar[0],size);
 ms.SaveToFile("c:\1.txt");
 ms.Free;


Вроде всё сохраняеться.

Загружаю так:

 setlength(ar,5);
 ms:= TMemoryStream.Create;
 ms.LoadFromFile("c:\1.txt");
 ms.Read(ar[0],ms.Size);
 memo1.Lines.Add(ar[0]);
 memo1.Lines.Add(ar[1]);
 memo1.Lines.Add(ar[2]);
 memo1.Lines.Add(ar[3]);
 memo1.Lines.Add(ar[4]);
 ms.Free;


Выскакивает ошибка.


 
Rial ©   (2006-05-14 00:55) [1]

И что же это там сохраняется ?!

Дело в том, что String - это только указатель на распределенную в памяти строку, поэтому ты читаешь и записываешь на самом деле совсем не то,
что хотел.

Если не хочется многое менять, то вместо String используй ShortString или String[Len].
Но это глупо по многим причинам...

Лучше используй TStringList и его LoadFromFile,SaveToFile.
Вообще, динамические массивы - это зло :))
GetMem, FreeMem, AllocMem - форева !


 
alex-drob ©   (2006-05-14 01:09) [2]

Дело в том что String я написал к примеру. Мне нужно сохранять и загружать массив компонентов.


 
DevilDevil ©   (2006-05-14 01:27) [3]

ммм...
у TMemoryStream, так же как и у TFileStream есть метод типа WriteComponent. Попробуй, может получится...


 
alex-drob ©   (2006-05-14 01:42) [4]

Компильятор ругаеться что это массив а не компонент.


 
Marser ©   (2006-05-14 02:10) [5]

> [2] alex-drob ©   (14.05.06 01:09)
> Дело в том что String я написал к примеру. Мне нужно сохранять
> и загружать массив компонентов.

То же самое компонент. Размер того же TButton - 4 байта, что соответствует Pointer.
Можно использовать Tobject.InstanceSize, а можно [3]

> [4] alex-drob ©   (14.05.06 01:42)
> Компильятор ругаеться что это массив а не компонент.

Естественно. Так записать сразу весь масив не получится, только по компонентам.


 
begin...end ©   (2006-05-14 08:40) [6]

> Marser ©   (14.05.06 02:10) [5]
> Можно использовать Tobject.InstanceSize

А каким образом здесь можно его использовать, если не секрет?


 
vidiv ©   (2006-05-14 10:01) [7]

Вот пример
var Arr:array of string;
   AStream:TMemoryStream;
   ss,s,i:integer;
begin
   SetLength(Arr, 5);
   Arr[0] := "Line zero";
   Arr[1] := "Line one";
   Arr[2] := "Line two";
   Arr[3] := "Line three";
   Arr[4] := "Line four";

   AStream := TMemoryStream.Create; // òóò ìîæåò áûòü ëþáîé Stream

   s := Length(Arr);
   AStream.WriteBuffer(s, SizeOf(s));

   for i:=0 to pred(s) do begin
       ss := length(Arr[i]);
       AStream.WriteBuffer(ss, SizeOf(ss));
       AStream.WriteBuffer(PChar(Arr[i])^, ss);
   end;

   //

   AStream.Position := 0;
   SetLength(Arr, 0);

   AStream.ReadBuffer(s, SizeOf(s));
   SetLength(Arr, s);
   for i:=0 to pred(s) do begin
       AStream.ReadBuffer(ss, SizeOf(ss));
       SetLength(Arr[i], ss);
       AStream.ReadBuffer(PChar(Arr[i])^, ss);
       Memo1.Lines.Add(Arr[i]);
   end;
end;



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

Форум: "Прочее";
Текущий архив: 2006.06.04;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.46 MB
Время: 0.061 c
15-1147090760
Alexis
2006-05-08 16:19
2006.06.04
Трансляция хоккейного матча Россия-Беларусь


2-1147843772
Tempora
2006-05-17 09:29
2006.06.04
Как заменить прямые слеши на обратные в строке?


2-1148038893
ttt_111
2006-05-19 15:41
2006.06.04
Работа с БД.


2-1148150601
za4em
2006-05-20 22:43
2006.06.04
Координаты


2-1147978502
serko
2006-05-18 22:55
2006.06.04
Глюки Paradox, либо...





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский