Главная страница
    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.076 c
15-1147278903
MetalFan
2006-05-10 20:35
2006.06.04
Залить файл на файлохостинг...


1-1145391209
Error27
2006-04-19 00:13
2006.06.04
При минимизации окна визуально пропадают некоторые элементы


3-1144959988
Krants
2006-04-14 00:26
2006.06.04
Развернуть БД


8-1136542704
это я:)
2006-01-06 13:18
2006.06.04
Picture.LoadFromStream


6-1138952697
SiJack
2006-02-03 10:44
2006.06.04
господа зашиваюсь с MAPI помогите





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