Главная страница
    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.038 c
15-1147203173
homm
2006-05-09 23:32
2006.06.04
ICQ


2-1147874048
13
2006-05-17 17:54
2006.06.04
Снова График


15-1147520526
LexxX
2006-05-13 15:42
2006.06.04
Восприятие музыки. Громкость


2-1148022112
Alien1769
2006-05-19 11:01
2006.06.04
Нормализация базы


2-1147699621
Ironman83
2006-05-15 17:27
2006.06.04
Выборки через TIBDataset





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