Главная страница
    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.01 c
1-83534
softmaster
2003-05-13 17:37
2003.05.26
FastReport


3-83407
gary5555
2003-05-06 18:00
2003.05.26
Нумерация строк с помощью RecNo.


1-83472
Тфьу
2003-05-15 10:55
2003.05.26
1) Поменять курсор у проекта 2) Колесо в ScrollBox


14-83682
socks
2003-05-04 20:28
2003.05.26
опять PiNG .....


4-83789
Ali
2003-03-26 08:58
2003.05.26
Как получить Handle скроллбара Listbox?





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