Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Общие вопросы > Сохранение записи в файл


Автор: 6Apokali6sis6 21.3.2006, 19:26
 Вот разобрался как массив сохранять в файл, а вот массив из записей не вохраняется.
Код

assignfile(t,'d:\SOXR.txt');
reset(t);
for i:=1 to nomer do
readln(t,massiv[i]);
closefile(t);

На месте readln(t,massiv[i]);
пишет Illegal type in REad\Readln statment.  Я так полагаю, что проблема в том что сохраняется массив из записей. Как быть?  

Автор: _hunter 21.3.2006, 19:31
ты сохранить или прочитать пытаешся?
если сохранить -- WriteLn нужно...

Автор: Демо 21.3.2006, 19:35
6Apokali6sis6,
Приведи код структуры(record)

Автор: Guedda 21.3.2006, 19:56
Типизированные файлы в Дельфи читать нужно не ReadLn, а Read. А писать не Writeln, а Write. В остальных случаях будет выскакивать эта ошибка.
Добавлено @ 19:56
Просто Read используй. Получится примерно следующее:
Код

assignfile(t,'d:\SOXR.txt');
reset(t);
for i:=1 to nomer do
read(t,massiv[i]);
closefile(t);

Автор: 6Apokali6sis6 21.3.2006, 20:12
Э нее, ошибка всё-равно выскакивает. А Ридельн или райтельн всё-равно, я понимаю, что ридельн для чтения, а райтельн для записи.

Автор: darkart 21.3.2006, 20:55
Что-то мне подсказывает, что у тебя файл не типизированный а текстовый. t какого типа? textfile?
t должен быть file of "тип твоей записи" и читать/писать действительно надо read/write.

Автор: 6Apokali6sis6 21.3.2006, 22:18
Благодарю. Разобрался.

Автор: Sven47 22.4.2006, 00:51
вот код части проги :
Код

type
  rec=record
    Coll : integer;
    hard : integer;
    tcoll : integer;
    thard : integer;
    data : string;
  end;

var
f : file of rec;


при компиляции делфи выдает
Цитата

[Error] Project1.dpr(20): Type 'rec' needs finalization - not allowed in file type
 

что ето означает, и как мне зделать фаил типа запись

 Спасибо за помощь 

Автор: Yanis 22.4.2006, 02:25
А как ты собрался сохранять в файле динамические строки? Если бы так можно было, как ты хочешь, многие мои и не только мои проблемы были бы решены smile Просто поле data должно быть фиксированой длины. Например:
Код

data : string[255];
  

Автор: СЭНСЭЙ 13.6.2014, 21:12
Неужели за столько времени никто не нашел какое нибудь универсальное решение для
записи файлов типа записи с динамическими массивами?

Автор: CynicRus 15.6.2014, 10:46
Цитата(СЭНСЭЙ @ 13.6.2014,  21:12)
Неужели за столько времени никто не нашел какое нибудь универсальное решение для
записи файлов типа записи с динамическими массивами?

Странные люди. Зачем вам паскалевые извращения? БЕрёте TFileStream. И пишете:

Код

var
 fs:TFileStream;
 n:integer;
begin
  fs:=TFileStream.Create(afile, fmCreate);
try
  fs.Position := 0;
  n := Length(arr);
  fs.WriteBuffer(n, sizeof(integer));
  fs.WriteBuffer(arr, n);
finally
  fs.Free;
end;
end;

Первым байтом можно записать размер своего массива, чтобы потом - прочитать сначала размер, а потом кусок данных нужного размера.

Код

 var
  fs:TFileStream;
  Size : Integer;
begin
 fs:=TFilestream.Create(afile,fmOpenRead);
  try
   fs.Seek(0,soFromBeginning);
   fs.ReadBuffer(size, SeizeOf(integer));
   fs.ReadBuffer(arr,size);
  finally
    fs.Free;
  end;
end;

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)