Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 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.013 c
14-83692
caesar
2003-05-06 10:38
2003.05.26
QReport


1-83488
From_X
2003-05-15 16:22
2003.05.26
DLL Как плугин? Есть проблемы!


1-83575
Oleg Fox
2003-05-14 12:22
2003.05.26
Изменение свойств компонента TEdit


9-83318
Dmitriy Polskoy
2002-12-17 17:56
2003.05.26
DoCollision


1-83505
Боян Георгиев
2003-05-15 23:16
2003.05.26
^String i TList Где ошибка





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