Форум: "Основная";
Текущий архив: 2002.12.16;
Скачать: [xml.tar.bz2];
ВнизДинамический файл Найти похожие ветки
← →
Valentain (2002-12-05 18:26) [0]Имеется
type
TRec = Record
Count: integer; // Количество записей в mas.
mas: array of Double;
...
end;
...
var
Fd: File of TRec;
Само-собой возникает ошибка. Как с этим бороться (или какие есть альтернативы).
С уважением...
← →
MBo (2002-12-05 18:33) [1]не разрешается использовать типизированные файлы (file of) с динамическими структурами.
Используй, например, TFileStream
← →
Skier (2002-12-05 18:37) [2]>Valentain
А этот mas: array of Double; можно положить к строку, используя
разделитель...
И писать всё через TStringList
← →
Anatoly Podgoretsky (2002-12-05 18:57) [3]
Type
TRec = Record
case Integer of
1: (Num: Double;);
2: (Count: integer;)
end;
var
f: File of TRec;
R: TRec;
Запись номер 0 будет счетчиком R.Сount, а записи 1..N данными
← →
Kotka (2002-12-05 20:50) [4]Можно использовать BlockRead и BlockWrite. Пример:
type TRec = mas:Double;
...
var f:file of TRec;
x:array [...] of TRec;
...
AssignFile("...",f);
Reset(f); или ReWrite(f);
BlockRead(f,x,n); или BlockWrite(f,x,n);//n-количество записываемых/читаемых данных
CloseFile(f);
А кол-во данных в файле будет возвращать ф-ия FileSize(f)
Код не проверялся, но должен быть правильным
← →
Anatoly Podgoretsky (2002-12-05 21:05) [5]Для этого кода и запись не нужна, просто file of Double
← →
Valentain (2002-12-06 13:23) [6]Благодарю.
> Anatoly Podgoretsky: по поводу case - я написал, наверное, несколько неполно, подразумевалось:
type
TOne = Record
a: Double;
b: Double;
c: Boolean;
end;
TRec = Record
Count: integer; // Количество записей в mas1, mas2.
mas1: array of TOne;
mas2: array of TTwo;
...
end;
...
var
Fd: File of TRec;
В первом случае file of Double без мороки.
...
На сколько я понимаю, FileSize(F) для типизированного файла показывает количество записей, тогда необходимость в Count и array отпадает и выражение принимает вид
TRec = Record
mas1: TOne;
mas2: TTwo;
...
end;
var
F: File of TRec;
Vrec: array of TRec;
n, i: integer;
...
n:= FileSize(F);
SetLength(Vrec, N);
for i:= 0 to n-1 do Read(F, Vrec[i]);
...
Или я не прав?
С уважением...
← →
Anatoly Podgoretsky (2002-12-06 13:42) [7]Ситуация резко ухудшилась, теперь в записи оказались указатели, после чего эта запись для типизированных фйайлов потеряла всякий смысл
mas1: array of TOne;
mas2: array of TTwo;
Дальше немного лучше, но утвержение насчет FileSize(F) неверное, так как
Returns the size of a file in bytes or the number of records in a record file.
Поетому надо N := FileSize(F) div SizeOf(TRec)
К тому же желательно все записи объявить как packed record, ну и неплохо бы дать всем идентификаторам нормальные говорящие адреса, операции работы с файлом заключить в защитные блоки, для освобождения ресурсов при ошиках и т.п.
Главное что ты сейчас пошел в правильном направлении при работе с типизированными файлами.
Страницы: 1 вся ветка
Форум: "Основная";
Текущий архив: 2002.12.16;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.007 c