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

Вниз

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

 
Andy BitOff ©   (2004-07-07 17:45) [0]

Здравствуйте, уважаемые.
Возникли проблемы при реализации алгоритма сохранения массива  в файл. Никак не могу дойти КАК?

type
 TDirection = (Up, Down);

type
 TActionForPrint = (OpenFilePR, AllPrint, CurrentPrint, RangePrint);

type
 TRangeSeting = Record
   CurrentPage : integer;
   RangeStart : integer;
   RangeEnd : integer;
   Direction : TDirection;
 end;

type
 TPrintHistory = Record
   DataT : TDateTime;
   PrinterIndex : integer;
   OpenedFile : string;
   Action : TActionForPrint;
   RangeSeting : TRangeSeting;
 end;

var
 HistoryAr: array of TPrintHistory;


Хочу сохранить HistoryAr в файл в виде; размер поля, значение. Сначала хочу все переписать в массив ms : array of Byte; Должно получиться так; DataT сохраняется как 8, дальше 8 байт Double (соответственно дата), затем PrinterIndex – 4, 0,0,0,1 (если соответственно PrinterIndex:=1) и т.д. по всем полям. Но чего-то туплю. Все чего достиг:

 CurSize:=0;
 for i:=0 to Length(HistoryAr)-1 do begin
   SizeItem:=SizeOf(HistoryAr[i].OpenedFile); // тут уже не верно
   SetLength(ms,SizeItem);
   // дальше думаю надо копировать по байту в массив ms, но туплю :(
 end;


 
Smithson ©   (2004-07-07 17:51) [1]

Зачем так сложно.
Сохраняй в нетипизированный файл (Rewrite(F, 1).
Для типов с известной длиной длину можно и не хранить. А вот для строк - обязательно, увеличишь потом скорость чтения, не придется читать побайтно и искать #0.

Чтение аналогично - порядок следования данных знаешь, читай их себе...


 
Тимохов ©   (2004-07-07 17:52) [2]

sizeof(string) = 4


 
Тимохов ©   (2004-07-07 17:52) [3]

т.к. строка (ansistring) есть указатель


 
Andy BitOff ©   (2004-07-07 17:55) [4]


>Тимохов ©   (07.07.04 17:52) [3]


:) Так я это понимаю. Поэтому и пишу, что не верно.


 
Digitman ©   (2004-07-07 17:55) [5]


>    SizeItem:=SizeOf(HistoryAr[i].OpenedFile); // тут уже
> не верно


потому что тип String - динамический, и данные этого типа представляют собой 4-байтовый указатель

для сохранения данных типа String следует сначала сохранить Integer-значение strsize = Length(HistoryAr[i].OpenedFile), а следом - данные из буфера, адрес которого равен PChar(HistoryAr[i].OpenedFile), а длина буфера равна strsize


 
Andy BitOff ©   (2004-07-07 18:00) [6]


>Smithson ©   (07.07.04 17:51) [1]
Зачем так сложно.


Так сложно потому, что это потом надо в реестр сохранить.


 
Digitman ©   (2004-07-07 18:11) [7]


> Andy BitOff ©   (07.07.04 18:00) [6]


именно в реестр ? и именно в бинарном виде ?
в реестр вообще-то не есть корошо записывать всякий хлам, на то есть файлы, в т.ч. - INI

но если уж приспичило и при этом необязательно хранение данных массива именно в бин.виде, то во всех эти премудростях попросту отпадает необходимость, если воспользоваться классом TRegIniFile - там есть методы для записи любых данных простых типов, и строки там записываются методом WriteString()



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

Форум: "Основная";
Текущий архив: 2004.07.18;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.47 MB
Время: 0.035 c
10-1022474348
fnv-hope
2002-05-27 08:39
2004.07.18
Delphi и POA


14-1088348844
jack128
2004-06-27 19:07
2004.07.18
Ваше отнашение к вопросам о вашем отнашении к ... , как к науке


1-1089000961
newver
2004-07-05 08:16
2004.07.18
доступ к "изображению".


14-1088169312
Samael6
2004-06-25 17:15
2004.07.18
Вопрос по РНР. Может кто-нибудь помочь?


8-1083308627
Черя
2004-04-30 11:03
2004.07.18
Можно ли изменять скорость воспроизведения wav файла?





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