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

Вниз

Как прочитать файл данных тренда   Найти похожие ветки 

 
AbrosimovA   (2003-05-14 08:52) [0]

Есть файл, в котором две записи вида:

record //Запись постоянной длины
SizeTitle : longint;
SizeRec : word;
Frequency : longint;
SizeBlock : word;
SizeTrend : longint;
FreeRec : longint;
CodePar : array[1..60] of string[10];
end;

record // Запись переменной длины
DateTimeRec : longint;
ValuePar : array[1..SizeBlock] of real48;
end;


Кто-нибудь подскажет, как в Дельфи прочитать такой файл. Считается ли такой файл типизированным или нет?
Большое спасибо тем, кто откликнется.


 
MBo ©   (2003-05-14 08:59) [1]

Нет, в типизированном все записи должны быть одного типа.
Считывай как нетип. - вот несколько методов -
ReadFile, FileRead, BlockRead, TFileStream


 
snake1977   (2003-05-14 09:00) [2]

используй методы блочного чтения
например
var f:File;
p1:<type> // твой record
begin
AssignFile(f,"eeee.ddd");
reset(f,1);
BlockRead(f,p1,sizeof(<type>));


 
AbrosimovA   (2003-05-14 09:56) [3]

Уважаемый Snake1977!

Вы не расшифруете поподробнее(извините за мое невежество), как описать p1. Я попытался сделать это так:

var F: File;
type p1 = record
SizeTitle : longint;
SizeRec : word;
Frequency : longint;
SizeBlock : word;
SizeTrend : longint;
FreeRec : longint;
CodePar : array[1..60] of string[10];
end;

begin
AssignFile(F,"eeee.ddd");
reset(FTrnH,1);
BlockRead(FTrnH,p1,sizeof(????)); <- А что в скобках в sizeof
end;


 
AbrosimovA   (2003-05-14 09:57) [4]

Уважаемый Snake1977!

Вы не расшифруете поподробнее(извините за мое невежество), как описать p1. Я попытался сделать это так:

var F: File;
type p1 = record
SizeTitle : longint;
SizeRec : word;
Frequency : longint;
SizeBlock : word;
SizeTrend : longint;
FreeRec : longint;
CodePar : array[1..60] of string[10];
end;

begin
AssignFile(F,"eeee.ddd");
reset(F,1);
BlockRead(F,p1,sizeof(????)); <- А что в скобках в sizeof
end;


 
Leshiy ©   (2003-05-14 10:02) [5]

sizeof(p1)
BlockRead(F, p1,sizeof(????)); <- А что в скобках в sizeof
А вот где выделено p1 использовать низя (это-же тип, надо юзать переменную)


 
Palladin ©   (2003-05-14 10:03) [6]

что мы пишем? что мы творим?

type p1 = record
SizeTitle : longint;
SizeRec : word;
Frequency : longint;
SizeBlock : word;
SizeTrend : longint;
FreeRec : longint;
CodePar : array[1..60] of string[10];
end;

var F: File;
v:p1;
begin
AssignFile(F,"eeee.ddd");
reset(F,1);
BlockRead(F,v,sizeof(v));
closefile(f);
end;


 
AbrosimovA   (2003-05-14 11:01) [7]

А что делать со второй записью в том же файле(там записано около 1200 значений точек графика и время записи каждой точки):

Предположил, что нужно так, но считывается только одно значение
из 1200, как же считать все остальные. Здесь не надо использовать процедуру Seek? Помогите.

type p1 = record // Первая запись(постоянной длины)
......
......
end;

type p2 = record // Вторая запись(переменной длины)
DateTimeRec : longint;
ValuePar : array[1..SizeBlock] of real48;
end;

var F: File;
v:p1;
w:p2;

begin
AssignFile(F,"eeee.ddd");
reset(F,1);
BlockRead(F,v,sizeof(v)); //Читаю данные первой записи
for I:=1 to v.SizeBlock do
begin
MainForm.ListBox.Items.Add(IntToStr(I)+")"+H.CodePar[I]);
end;

BlockRead(F,w,sizeof(w)); //Читаю данные второй записи
for I:=1 to ??? do // Здесь не знаю что поставить
begin
ListBox1.Items.Add(IntToStr(I)+")"+FloatToStrF(V.ValuePar
[I],ffFixed,8,2));
end;

closefile(F);

end;



 
Palladin ©   (2003-05-14 11:02) [8]

думай, программируй...


 
AbrosimovA   (2003-05-14 11:07) [9]

Я уже думаю неделю и все бестолку.
Возможно извилин не хватает.


 
Leshiy ©   (2003-05-14 11:09) [10]

for I:=1 to ??? do // Здесь не знаю что поставить
SizeBlock (он ведь известен?)


 
AlexSV ©   (2003-05-14 11:12) [11]

А в Help"e, между прочим, очень хороший пример есть
BlockRead + F1 + example


 
AbrosimovA   (2003-05-14 14:58) [12]

Пример в Help"e так и не смог прояснить мою голову.
Если у кого-то есть готовое решение похожей задачи, прошу
поделиться. Зачем изобретать велосипед, он уже должен быть.
Мне жизни на все изобретения не хватит.

Спасибо тем, кто ответил мне. Задача так и осталась нерешенной.


 
AlexSV ©   (2003-05-14 17:20) [13]

for I:=1 to ??? do // Здесь не знаю что поставить

Значт читаем до конца файла?
если так, то тогда вместо

BlockRead(F,w,sizeof(w)); //Читаю данные второй записи
for I:=1 to ??? do // Здесь не знаю что поставить
begin
ListBox1.Items.Add(IntToStr(I)+")"+FloatToStrF(V.ValuePar
[I],ffFixed,8,2));
end;

попробуй так:
i := 0;
repeat
inc(i);
BlockRead(FromF, w,sizeof(w), RealReadSize);
if RealReadSize = sizeof(w) then
ListBox1.Items.Add(IntToStr(I)+")"+FloatToStrF(V.ValuePar
[I],ffFixed,8,2));
until (RealReadSize <> sizeof(w));




Страницы: 1 вся ветка

Текущий архив: 2003.05.26;
Скачать: CL | DM;

Наверх




Память: 0.5 MB
Время: 0.016 c
1-83522
User
2003-05-13 12:12
2003.05.26
Сортировка в DBGridEh?


3-83337
Dimitry
2003-05-05 14:19
2003.05.26
сжатие базы Access


3-83387
Kirill_S
2003-05-06 10:32
2003.05.26
Заполнить программно ComboBox


1-83601
Alexno
2003-05-14 15:05
2003.05.26
потоки


14-83706
SiJack
2003-05-06 16:22
2003.05.26
Хочу шарить в БД ?