Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 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
1-51830
DDF
2002-12-05 11:20
2002.12.16
Outlook Express добавить письмо


1-51800
dimich1978
2002-12-05 09:50
2002.12.16
Для тех кто юзает компанеты для создания инт. XP


8-51841
faf
2002-09-01 10:50
2002.12.16
Как, сделать, спектроанализатор?


1-51685
Dik!S
2002-12-03 14:19
2002.12.16
Delphi


3-51588
User_OKA
2002-11-27 13:00
2002.12.16
Запрос





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