Форум: "Начинающим";
Текущий архив: 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