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

Вниз

Динамический файл   Найти похожие ветки 

 
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;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.015 c
1-51738
Sergey123
2002-12-04 10:43
2002.12.16
Отрисовка на Bitmap


4-52038
SmallVS
2002-11-01 13:03
2002.12.16
ERROR_SHARING_VIOLATION


1-51703
___Nikolay
2002-12-04 19:48
2002.12.16
Как вывести HINT в нужный момент с нужным текстом


14-51945
snoup
2002-11-23 21:49
2002.12.16
Помогите с шифрованием!!!


14-51935
Карлсон
2002-11-25 18:38
2002.12.16
а 2003 год - год кого?