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

Вниз

как прочесть фаил такой структуры   Найти похожие ветки 

 
Silver...   (2008-02-01 13:26) [0]

Дается такая вот структура файла

1.  1 int
2.  90 int
3.  1 Int
4.  4 Int
5.  1 Int

------- Может повториться несколько раз --- Begin
6.1   4 int
6.2  16 char
6.3  16 char
------- Может повториться несколько раз --- End
7.  1 int

...
 Думал прочсть в String или в поток а потом разбирать по-байтно, только предвижу мороки тут...

Есть др. решение?


 
Dennis I. Komarov ©   (2008-02-01 13:33) [1]

А в 5, часом не пишется это несколько раз?


 
Silver...   (2008-02-01 13:36) [2]

не понял


 
han_malign ©   (2008-02-01 13:41) [3]


> Дается такая вот структура файла

дык, это - конкретно, выдержка из текстового файла, или таки структура бинарного файла?


 
Dennis I. Komarov ©   (2008-02-01 13:46) [4]

> [2] Silver...   (01.02.08 13:36)

Да, и "структуру" свою переведи:
2. 90 int - это чего такое?


 
Silver...   (2008-02-01 13:51) [5]

предполагаю...

"таки структура бинарного файла"

передают из одной конторы такие файлы. Есть ихнея прога которая обрабатывает эти файлы.
 Нужно собрать некую инфу которая есть в этих файлах.

 Контора та хитрит ничего не говорит - единственное дали структуру, отрывок прилепил выше. Сказали расбирайся.

 Вот пытаюсь разбираться.


 
psa247   (2008-02-01 13:57) [6]

на твоем месте я бы для начала прочитал бы это все в StringGrid, List

закономерность одна - первая цифра, потом идет точка

а что значит прочесть файл ?

какую информацию ты анализируешь ?


 
palva ©   (2008-02-01 14:02) [7]

> единственное дали структуру, отрывок прилепил выше. Сказали расбирайся.

Если бы еще пример файла с такой структурой был...
А так... чего разбираться в бессмыслице?
Можно прочитать по слогам, можно выучить наизусть...


 
Silver...   (2008-02-01 14:18) [8]

а что значит прочесть файл

...

получить Record со всеми составляющими
типа

r.pole1
r.pole2
...


 
Silver...   (2008-02-01 14:19) [9]

тут еще смущает

------- Может повториться несколько раз --- Begin
6.1   4 int
6.2  16 char
6.3  16 char
------- Может повториться несколько раз --- End

как с этим быть?


 
Сергей М. ©   (2008-02-01 14:28) [10]


> дали структуру, отрывок прилепил выше


Если не хитришь и не несешь отсебячину, то фтопку такую контору вместе с ее "структурой"


 
Silver...   (2008-02-01 14:44) [11]


> Если не хитришь и не несешь отсебячину


Нет поверь.

Они ответили "единственное что можем сделать дать структуру файла" ... дали

... Предлагаю :) упростить задачу: как получть

в

R: Record
     Pole1, Pole2: Integer;
  end;


данные из фаила ...
a.  1 int
b.  2 Int

PS. на сколько понял 1,2 это длина в байтах


 
Dennis I. Komarov ©   (2008-02-01 14:51) [12]

Это какой же 90 Int? :)
Может это их количество, ты файлик то глянь...


 
Silver...   (2008-02-01 15:06) [13]


> Это какой же 90 Int? :)


написано длина в байтах


 
Галинка ©   (2008-02-01 15:22) [14]

игрушку чтоль ломаем? Очень на ArtMoney похоже.


 
Галинка ©   (2008-02-01 15:23) [15]

можут и длина в байтах. Если длина кратна 4, то наверное можно читать 90 байтов порциями по 4.


 
Dennis I. Komarov ©   (2008-02-01 15:26) [16]

> [15] Галинка ©   (01.02.08 15:23)

90 / 4 = 22.5 т.е 22 и 4 бита :)))))))


 
Silver...   (2008-02-01 15:33) [17]


> игрушку чтоль ломаем


нет - данные фаилы полукяются от работы аппарата

мне нужно получть доп. инфу которую не дает прога которая работает с ними

пытаюсь побайтно счтать ... но этих фаилов около 500 в день

по байтно не красиво - медленно. хотел как-нибудь сразу в рекорд или как минимум не побайтно


 
Anatoly Podgoretsky ©   (2008-02-01 15:35) [18]

> Silver...  (01.02.2008 13:51:05)  [5]

Нас не интересует, откуда дали, нужна структура, а не кусок абстрактного текста.


 
Сергей М. ©   (2008-02-01 15:41) [19]


> написано длина в байтах


Где написано ?

В том самом огрызке "структуры", что ты сюда привел, нет ни единого упоминания о каких-то там "байтах")


 
han_malign ©   (2008-02-01 15:53) [20]


> по байтно не красиво - медленно. хотел как-нибудь сразу в рекорд или как минимум не побайтно

телепатирую - BlockRead()...

а так же см. TFileStream, TMemoryStream


 
Плохиш ©   (2008-02-01 15:57) [21]


> Silver...   (01.02.08 14:18) [8]

Да хоть учитайся
fileStream.Read(FStrukturaDannyh, RazmerStrukturyDannyh);

повторяй для всех твоих подструктур из файла.


 
Silver...   (2008-02-01 16:00) [22]


> Нас не интересует, откуда дали, нужна структура, а не кусок
> абстрактного текста


Так до сих пор говорим тока о структуре файла. Никто даже не намекает как чтать

перефразирую вопрос

 Как счтать из бинарного фаила одним махом все чтоб потом оттуда (куды счтали :) ) доставать инфу (желательно не побайтно) изходя из заданной структуры.

 Типа:

Chitaem_Iz_GdeSchitali(1, 1, Var_pole1);
Chitaem_Iz_GdeSchitali(2, 90, Var_pole2);


 
Сергей М. ©   (2008-02-01 16:07) [23]


> Как счтать из бинарного фаила одним махом


GetMem(SomePointer,SomeFileSize);
..
MyFileStream.Readbuffer(SomePointer^, SomeFileSize)ж


 
Anatoly Podgoretsky ©   (2008-02-01 16:56) [24]

> Silver...  (01.02.2008 16:00:22)  [22]

Чукча не читатель и даже не писатель.
Чукча белорусский партизан.


 
Silver...   (2008-02-01 18:23) [25]


> Anatoly Podgoretsky ©   (01.02.08 16:56) [24]


а какая разница что в том файле записано ...

как реализовать напр. след. ------> желательно одним махом

чтать из любого "MyFile.pdf"

pole1 - первые 2 байта
pole2 - след. 5 байта
pole3 - след. 3 байта

типа


...
Type
 TMyTyoe: Record
    pole1: array[1..2] of byte;
    pole2: array[1..5] of byte;
    pole3: array[1..3] of byte;
  end;

...
f: file of TMyType;
r: TMyType;
...

 Read(f, R)
...


 Так по мне криво, даже если дает опр. результат

PS. Не вижу где "Чукча" / "белорусский партизан".
       Ключевая фраза "получить в TMyRype из бин. фаила. ... читая в опред. поредок, опред. количество байт - ОДНИМ МАХОМ"


 
palva ©   (2008-02-01 18:27) [26]


> опред. количество

blockread для двоичного файла


 
Anatoly Podgoretsky ©   (2008-02-01 20:41) [27]

> Silver...  (01.02.2008 18:23:25)  [25]

Так нет никакой разницы в таком случае, помогут тебе или нет.


 
Плохиш ©   (2008-02-01 23:34) [28]


> Silver...   (01.02.08 18:23) [25]

Я сказал вариант, слушать не хочешь, чё пришёл с вопросами, не понятмно... Сиди дальше скули...


 
Silver...   (2008-02-08 19:14) [29]

... извеняюсь за долгое отсуствие

Anatoly Podgoretsky ©   (01.02.08 20:41) [27]

Хотел подсказки как сделать ввиде
FileStream.Read(MyRec, SizeOf(MyRec));
и одним махом получть весь файл в мою запись MyRec

... проблема в том что во все поля чталось по 2 байта а не 2, 1, 4 байта соответственно ... да еще чталось наоборот - поэтому казалось что в корни не так делаю. Разбирая HexEdit-ом понял что инвертировать надо

вобщем разбираю файл побайтно

наткнулся на следующее:
делаю

 MyRec: record
 ...
   Pole1: Word;            // 16 bit
   Pole2: Byte;             //  8 bit
   Pole3: LongWord;      // 32 bit
 ...
 end;

 ...
 FileStream.Read(MyRec.Pole1, SizeOf(MyRec.Pole1));
 FileStream.Read(MyRec.Pole2, SizeOf(MyRec.Pole2));
 FileStream.Read(MyRec.Pole3, SizeOf(MyRec.Pole3));
 ...


из файла
---
00 02 C1 00 FC 50 01
---
получаю значения
MyRec.Pole1 = 02 00
MyRec = C1
MyRec.Pole2 = 01 50 FC 00

т.е. прочитаные наоборот

Есть функця Swap но для LongWord применить нельзя
Вопрос: Как чтать в том порядке как записано в файле а не наоборот
PS. Ответ "сделай руками" не тот который ожидаю :)


 
Anatoly Podgoretsky ©   (2008-02-08 19:40) [30]

> Silver...  (08.02.2008 19:14:29)  [29]

Что ты написал, повтори по русски.


 
Silver...   (2008-02-08 19:42) [31]

а где именно не понятно?


 
Silver...   (2008-02-08 19:59) [32]

FileStream.Read(a, 2)

Читает байты с конца к началу

типа в файле написано: 00 02
прочтется: 02 00

вместо нужного a = 2
получаю a = 512

как сделать?
...
a: Word;
...
FileStream.Read(a, SizeOf(a));
ShowMessage(IntToStr(a));
...


И в окошке видеть 2 а не 512
Достаточо по русски?


 
Anatoly Podgoretsky ©   (2008-02-08 20:07) [33]

> Silver...  (08.02.2008 19:59:32)  [32]

Где прочтется, почему прочтется?


 
ketmar ©   (2008-02-08 20:12) [34]

>[32] Silver... (2008-02-08 19:59:00)
идём, и читаем про byte order. думаем. пишем.

блин, я согласен, чтобы не чинили дороги, только пусть устранят вторую проблему!

---
Understanding is not required. Only obedience.


 
Silver...   (2008-02-08 21:17) [35]


> ketmar ©   (08.02.08 20:12) [34]


Где читать?


> Anatoly Podgoretsky ©   (08.02.08 20:07) [33]
> > Silver...  (08.02.2008 19:59:32)  [32]
>
> Где прочтется, почему прочтется?


Где -> FileStream.Read(a, SizeOf(a));
почему -> а незнаю выводы делаю по тому что получаю после Read

--- Offtop - Begin -----------------------

to

> Anatoly Podgoretsky ©   (08.02.08 20:07) [33]

 Из ваших постов видно что только по тексту замечания есть а по сути близко нулю

Искренние пожелания: "смотрим на луну а не на палец" - Зри в корень

PS. "И в окошке видеть 2, а не 512"

--- Offtop - End -----------------------


 
MOO   (2008-02-08 21:31) [36]


> Silver...   (08.02.08 19:59) [32]

Что то мне подсказывает, что из 02 00 сделать 00 02. Вот и будет тебе 2, а не 512.


 
ketmar ©   (2008-02-08 21:37) [37]

>[35] Silver… (2008-02-08 21:17:00)
>Где читать?

на заборе.

---
Understanding is not required. Only obedience.


 
Silver...   (2008-02-08 21:38) [38]


> MOO   (08.02.08 21:31) [36]


> PS. Ответ "сделай руками" не тот который ожидаю :)


Потому как сейчас именно так и делаю. Но не кажется несколько глуповато чтать наоборот чтоб потом инверситовать. Не логичнее читать сразу правельно - НО все 4 байта сразу а не по одному в обратном порядке = читать как есть потом инверсировать


 
ketmar ©   (2008-02-08 21:45) [39]

>[38] Silver... (2008-02-08 21:38:00)
swap, f1.

---
Understanding is not required. Only obedience.


 
Silver...   (2008-02-08 21:51) [40]


> ketmar ©   (08.02.08 20:12) [34]
> >[32] Silver... (2008-02-08 19:59:00)
> идём, и читаем про byte order. думаем. пишем.


> ketmar ©   (08.02.08 21:37) [37]


к кожалению на моем ничего путного не написано :)

Гуглю ... не нахожу :(  ... ссылочку подкинь



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

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

Наверх




Память: 0.56 MB
Время: 0.018 c
2-1201966324
flaxe
2008-02-02 18:32
2008.03.02
Выбор базы данных и как с ней собственно работать.


2-1202412877
Igit
2008-02-07 22:34
2008.03.02
Вопрос по ООП


15-1199989377
turbouser
2008-01-10 21:22
2008.03.02
Ищу работу


11-1184544980
DX_Original
2007-07-16 04:16
2008.03.02
DriveComboBox


15-1201332607
Sergey Masloff
2008-01-26 10:30
2008.03.02
Еще про WinXP но не оффтопик