Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2005.07.11;
Скачать: CL | DM;

Вниз

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

 
kliff   (2005-06-22 23:28) [0]

Подскажите, пожайлуста, как удобнее сохранить (и загрузить) динамический массив вида array of array of string?


 
-=XP=- ©   (2005-06-22 23:31) [1]

Так же, как и array of string. Например, в текстовом файле. В первой строке сохранить размерность матрицы, что-то типа "200x200". А дальше - 40000 строк самой матрицы.


 
Anatoly Podgoretsky ©   (2005-06-22 23:34) [2]

Построчно


 
kliff   (2005-06-22 23:43) [3]

А не долго это будет для массива 1000х1000?
Я вообще думал, что есть какой-то способ сохранить срузу кусок памяти, или не факт, что это будет непрерывная область?


 
jack128 ©   (2005-06-22 23:49) [4]

type
 TStringArray2 = array of array of string;

procedure SaveStringArrayToFile(const Arr: TStringArray2; const Filename: string);
var
 f: file;
 i, j: Integer;
 Len: Integer;
begin
 AssignFile(f, Filename);
 Rewrite(f, 1);
 try
   // Сохраняем кол-во строк
   Len := Length(Arr);
   BlockWrite(f, Len, SizeOf(Len));
   for i := low(Arr) to high(Arr) do
   begin
     // array of array of - это не обязательно матрица, поэтому сохраняем размер каждого столбца отдельно
     Len := Length(Arr[i]);
     BlockWrite(f, Len, SizeOf(Len));
     for j := low(Arr[i]) to high(Arr[i]) do
     begin
       // Сохраняем длину строки
       Len := Length(Arr[i, j]);
       BlockWrite(f, Len, SizeOf(Len));
       if Len > 0 then
         BlockWrite(f, Arr[i, j][1], Len);
     end;
   end;
 finally
   CloseFile(f);
 end;
end;

procedure LoadStringArrayToFile(out Arr: TStringArray2; const Filename: string);
var
 f: file;
 i, j: Integer;
 Len: Integer;
begin
 AssignFile(f, Filename);
 Rewrite(f, 1);
 try
   BlockRead(f, Len, SizeOf(Len));
   SetLength(Arr, Len);
   for i := low(Arr) to high(Arr) do
   begin
     BlockRead(f, Len, SizeOf(Len));
     SetLength(Arr[i], Len);
     for j := low(Arr[i]) to high(Arr[i]) do
     begin
       BlockRead(f, Len, SizeOf(Len));
       SetLength(Arr[i, j], Len);
       if Len > 0 then
         BlockRead(f, Arr[i, j][1], Len);
     end;
   end;
 finally
   CloseFile(f);
 end;
end;


 
jack128 ©   (2005-06-22 23:50) [5]

jack128 ©   (22.06.05 23:49) [4]
procedure LoadStringArrayToFile(out Arr: TStringArray2; const Filename: string);
var
f: file;
i, j: Integer;
Len: Integer;
begin
AssignFile(f, Filename);
reset(f, 1);


copy/paste - проклятье программиста!


 
evvcom ©   (2005-06-23 00:53) [6]


> или не факт, что это будет непрерывная область?

Скорее фактом будет, что это фрагментированный кусок памяти, процентов так на 99,9999999999..... Кроме того, ты больше времени потеряешь на операцию записи на диск, нежели на чтение разрозненных участков памяти.


 
Anatoly Podgoretsky ©   (2005-06-23 01:28) [7]

kliff   (22.06.05 23:43) [3]
Факт то, что это двухмерный массив указателей.
Но этот массив весьма легко щаписать в файл, сохраняя каждую строку отдельно. Но миллион строк это не такой уж и маленький кусок и займет определенное время, секунд 10


 
Alex Konshin ©   (2005-06-23 01:47) [8]

Всегда интересовало, а что же люди хранят в ТАКИХ массивах, к тому же двумерных, и вдобавок строк? Опять имеем случай создания себе проблемы, чтоб потом героически ее преодолеть?



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

Текущий архив: 2005.07.11;
Скачать: CL | DM;

Наверх




Память: 0.46 MB
Время: 0.044 c
3-1117607493
r9000
2005-06-01 10:31
2005.07.11
Внесение текстового файла в поле базы MySQL


3-1117141559
highlander
2005-05-27 01:05
2005.07.11
Помогите разобраться с запросом


14-1118405773
TUser
2005-06-10 16:16
2005.07.11
Угадайка


1-1118261613
SniZ
2005-06-09 00:13
2005.07.11
Сжатие строки


14-1118222987
MadAngel
2005-06-08 13:29
2005.07.11
Посоветуйте цифровик





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