Текущий архив: 2005.03.06;
Скачать: CL | DM;
Вниз
Определение количества записей в файле Найти похожие ветки
← →
XfroSt (2005-02-19 04:48) [0]Суть такова я использу файл собственного типа :
type
TMember = record
Name : string[50];
eMail : string[30];
Posts : LongInt;
end;
Пишу в него так :
a.Name := name.Text;
a.eMail := mail.Text;
AssignFile(F, "Members.dat");
if not(FileExists("Members.dat")) then ReWrite(F)
else
Reset(F);
Seek(F,FileSize(F));
a.Posts := FilePos(F)+1;
try
Write(F, a);
finally
CloseFile(F);
end;
Читаю так :
AssignFile(F,"members.dat");
memo.Clear;
Reset(F);
try
while not Eof(F) do begin
Read (F, a);
memo.Lines.Add("Имя : "+a.name);
memo.Lines.Add("Мыло : "+a.eMail);
memo.Lines.Add("---------------");
end;
finally
CloseFile(F);
end;
Вопрос как мне узнать количество записей в файле ? Я делаю это так :
i := 0;
AssignFile(F,"members.dat");
Reset(F);
try
while not Eof(F) do begin
Read(F, a);
inc(i);
end;
finally
CloseFile(F);
end;
Но мне кажется это долгий способ можно как нибуть сразу почить количество записей в файле?
← →
novice__man (2005-02-19 05:10) [1]Сохрани в начале файла количество записей, например так:
Write(f, CountOfRecord); {CountOfRecord: integer}
(я обычно использую BlockRead/BlockWrite), а потом считывай при открытии.
← →
novice__man (2005-02-19 05:15) [2]А если размер записи постоянный то можно так: (размер файла) div (размер записи)
← →
XfroSt (2005-02-19 05:37) [3]хм нет размер записи всегда варьируется т.к. я использую масствы и не все элемменты заполняю тока каикие надо.
А сама CountOfRecord тогда какого типа должна быть?
← →
begin...end © (2005-02-19 08:15) [4]> XfroSt (19.02.05 5:37) [3]
> хм нет размер записи всегда варьируется т.к. я
> использую масствы и не все элемменты заполняю тока
> каикие надо
Что-то я уже не понял. В своём первом посте Вы показываете работу с типизированным файлом. Все элементы такого файла могут быть только однотипными. И никаких массивов в Вашем первом посте нет.
← →
Anatoly Podgoretsky © (2005-02-19 09:51) [5]Что такое F?
← →
Юрий Зотов © (2005-02-19 13:16) [6]Как узнать количество записей в типизированном файле?
Очень просто - поделить размер файла на размер его элемента:
FileSize(F) div SizeOf(TMember)
← →
XfroSt (2005-02-19 16:34) [7]правельно будет так
Name : array[0..100] of string[50];
eMail : string[0..100] of string[30];
Если я использую такую структуру и заполняю тока некотороые элементы массива то размер записи все равно будет одинаковый?
Или он меняется от количество заполненных элементов в массиве?
← →
Юрий Зотов © (2005-02-19 16:36) [8]> XfroSt (19.02.05 16:34) [7]
Под статические массивы и короткие строки память выделяется сразу. Значит, размер записи не будет зависеть от того, как она заполнена.
← →
XfroSt (2005-02-19 16:40) [9]а если я делаю вот такой тип?
im : array[0..50] of TImage;
имейдж я не определяю т.к. не знаю скока он будет, то все равно выделиться фиксированное количество памяти?
← →
Юрий Зотов © (2005-02-19 16:46) [10]> XfroSt (19.02.05 16:40) [9]
Это массив указателей. Указатель имеет размер 4 байта. Значит, размер массива будет 51*4=204 байта.
← →
ЦУКОР5 (2005-02-19 16:47) [11]а что мешает сделать дин.масив?
im : array of чего-то там;
...
setlength(im,размер);
← →
XfroSt (2005-02-19 16:48) [12]Я работаю с типизарованными файлами поэтому тут надо указывать жестка скока чего иначе тип не определиться и компилятор начнет ругаться.
← →
Anatoly Podgoretsky © (2005-02-19 17:17) [13]Я просил тебя указать, что такое F, по ряду признаков выходит что типизированный (хотя может и нет), если это типизированый файл то FileSize возвращает количество записей, если не типизированый, то количество блоков.
← →
begin...end © (2005-02-19 17:20) [14]> XfroSt (19.02.05 16:40) [9]
> а если я делаю вот такой тип?
> im : array[0..50] of TImage;
Только не вздумайте потом записывать это в файл.
← →
XfroSt (2005-02-20 12:42) [15]F : file of TMember
файл моего типа.
>Только не вздумайте потом записывать это в файл.
А что будет?
← →
begin...end © (2005-02-20 13:27) [16]> XfroSt (20.02.05 12:42) [15]
>>Только не вздумайте потом записывать это в файл.
> А что будет?
Ничего очень страшного не будет. Но это бессмысленно, т.к. при последующем запуске программы и чтении из файла этих указателей они будут недействительными.
← →
XfroSt (2005-02-20 13:33) [17]Спасибо.
Теперь поняно...
Страницы: 1 вся ветка
Текущий архив: 2005.03.06;
Скачать: CL | DM;
Память: 0.51 MB
Время: 0.05 c