Форум: "Основная";
Текущий архив: 2003.05.26;
Скачать: [xml.tar.bz2];
ВнизКак прочитать файл данных тренда Найти похожие ветки
← →
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;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.01 c