Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2008.03.02;
Скачать: [xml.tar.bz2];

Вниз

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

 
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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.55 MB
Время: 0.045 c
2-1202059832
ванька
2008-02-03 20:30
2008.03.02
Две формы


15-1201593227
GEN++
2008-01-29 10:53
2008.03.02
"Разыменование указателя"


2-1202302113
IntruderLab
2008-02-06 15:48
2008.03.02
Параметры при запуске


15-1201619152
wesaaaa
2008-01-29 18:05
2008.03.02
Что такое рег-тайм?


6-1164743451
Petr
2006-11-28 22:50
2008.03.02
прокси





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