Модераторы: Snowy, MetalFan, bems, Poseidon

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Разделить файл по блокам 
:(
    Опции темы
SyncMaster
Дата 8.7.2010, 12:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 38
Регистрация: 13.7.2006

Репутация: нет
Всего: нет



Всем привет, извиняюсь за названия темы, наверное, не много не правильно, но суть такая.

Есть файл, не текстовый, вообще без расширения, в файле есть ИД, но он зашифрован, к ИДу, привязывается блок с текстом, можно посмотреть на картинке.

Как мы видим, ИД из 10 быйт (если я не ошибаюсь) сильно не ругайте, я в этом не особо разбираюсь.

Так вот вопрос, как  разделить этот файл по блокам, я вот думаю можно найти эти 10 байт, взять этот блок и дальше до 10 байта (хотя бред получается).

Вообщем прощу помощи, заранее большое спасибо.


Это сообщение отредактировал(а) SyncMaster - 8.7.2010, 13:12

Присоединённый файл ( Кол-во скачиваний: 23 )
Присоединённый файл  10b.gif 66,59 Kb
PM MAIL ICQ   Вверх
PsiMagistr
Дата 8.7.2010, 13:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 479
Регистрация: 31.12.2009

Репутация: 1
Всего: 1



Ну Seek позволяет в любом месте файла оказаться побайтно. Что тебе надо так и не понял толком. Вопрос более чем туманно ставишь.

Добавлено через 6 минут и 18 секунд
Что значит по блокам разделить? Seek ставит указатель в любое место файла. Оттуда считывается информация в переменную. И вообще ты же о структуре файла ничего не рассказал. Очень важно знать как файл построен. Где у тебя число, где строка, а где булевское что-то.

Это сообщение отредактировал(а) PsiMagistr - 8.7.2010, 13:19


--------------------
"Арфы нет? Возьмите бубен!

Ребята, будем жить!"

 (с) "В бой идут одни старики"

---

"ИЕ" - один из самых сумасшедших браузеров в нашей галактике.
PM MAIL   Вверх
SyncMaster
Дата 8.7.2010, 13:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 38
Регистрация: 13.7.2006

Репутация: нет
Всего: нет



Цитата

Очень важно знать как файл построен.
 Я в этом не особо разбираюсь, файл взять из программы АСУ-Импульс, скорее это БД, но точно сказать не могу.  :(

Мне надо так сказать выбрать текст, из это файла, адреса, телефоны и.т.д

Напишете мне пожалуйста в аську -  4891441 два нуля, попробую объяснить.

Это сообщение отредактировал(а) SyncMaster - 8.7.2010, 13:55
PM MAIL ICQ   Вверх
PsiMagistr
Дата 8.7.2010, 14:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 479
Регистрация: 31.12.2009

Репутация: 1
Всего: 1



Я не могу считать себя профи в этих вопросах и ни на что не претендую, но...

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

Кстати, если это база импульс - попробуй открыть прогой, читающей этот формат. Можно даже попытаться искусственно расширение добавить.

Но в любом случае, чтоб к файлу обращаться надо по меньшей мере знать, где у тебя, что лежит...

Если файл зашифрован каким либо образом, вряд ли ты его вообще просто так вскроешь. Вернее даже если вскроешь, смысла в этом найдешь не больше чем в халдейских письменах. Алгоритм дешифрования как правила встроен в шифрующую программу, но и ей надо будет скормить какой нибудь ключ для дешифрации.



Это сообщение отредактировал(а) PsiMagistr - 8.7.2010, 14:07


--------------------
"Арфы нет? Возьмите бубен!

Ребята, будем жить!"

 (с) "В бой идут одни старики"

---

"ИЕ" - один из самых сумасшедших браузеров в нашей галактике.
PM MAIL   Вверх
SyncMaster
Дата 8.7.2010, 14:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 38
Регистрация: 13.7.2006

Репутация: нет
Всего: нет



Цитата

Кстати, если это база импульс - попробуй открыть прогой, читающей этот формат. Можно даже попытаться искусственно расширение добавить.
 А есть такая? ну кроме самого ипульса, дело в том что я даже не знаю что за формат, она юзает.
хотя в файле irunin.ini есть такие строки -

VarValue29=D:\Program Files\Common Files\Microsoft Shared\DAO
VarName30=%BDEPATH%
VarValue30=C:\Program Files\Common Files\Borland Shared\BDE

мне же просто надо текст от туда  взять, вид мы же знаем что первый байт 2E(.) и последний всегда заканчивается  22 (") между ними 10 байт 00 00 00 10 00 00 02 9F 00 11. 

Это сообщение отредактировал(а) SyncMaster - 8.7.2010, 14:25
PM MAIL ICQ   Вверх
PsiMagistr
Дата 8.7.2010, 14:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 479
Регистрация: 31.12.2009

Репутация: 1
Всего: 1



Ну во первых если файл есть, то есть и программа каким-то образом его читающая. Иначе зачем он вообще нужен? Во вторых надо хотя бы знать, что за файл ты читать собираешься. Может это вовсе никакая не БД, а какие нибудь внутренние настройки того же импульса, которые вне него довольно бесполезны. 

Ты пишешь файл из программы Асу Импульс. Но это ни о чем не говорит, мало ли файлов в этой программе?

Если же это точно БД Импульс, то ищи прогу читающую этот формат. Даже если делать это из среды программирования Дельфи, наверняка нужно подключить драйвер чтения базы этого формата. Читать голыми руками все равно что мясо отверткой резать - много будет мороки и останешься голодным.




--------------------
"Арфы нет? Возьмите бубен!

Ребята, будем жить!"

 (с) "В бой идут одни старики"

---

"ИЕ" - один из самых сумасшедших браузеров в нашей галактике.
PM MAIL   Вверх
SyncMaster
Дата 8.7.2010, 14:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 38
Регистрация: 13.7.2006

Репутация: нет
Всего: нет



вот часть текста файла, явно это не настройки, это список участников - 

   P  у E"РОСАГРОЛИЗИНГ", РОССИЙСКАЯ АГРОПРОМЫШЛЕННАЯ ЛИЗИНГОВАЯ КОМПАНИЯ, ОАО Россия, г. Москва  (495)782-19-76/77....82  (495)782-19-85/86    [email protected]http://www.rosagroleasing.ru/Председатель Совета директоров - Алексей Васильевич Гордеев, вице-премьер Правительства, Министр сельского хозяйства РФ.Генеральный директор - Елена Борисовна Скрынник.Главная цель - государственная поддержка российского сельхозтоваропроизводителя на основе новой национальной системы аграрного лизинга.

Это сообщение отредактировал(а) SyncMaster - 8.7.2010, 14:50
PM MAIL ICQ   Вверх
PsiMagistr
Дата 8.7.2010, 15:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 479
Регистрация: 31.12.2009

Репутация: 1
Всего: 1



Хм... Так в чем проблема, вот же ты считал текст?  Если ты хочешь чтоб это именно программа делала и делала правильно - нужно драйвер управления данной БД подключать. Ну минимум - знать особенности организации данных, поскольку информация так или иначе считывается в переменные соответствующих типов. 


--------------------
"Арфы нет? Возьмите бубен!

Ребята, будем жить!"

 (с) "В бой идут одни старики"

---

"ИЕ" - один из самых сумасшедших браузеров в нашей галактике.
PM MAIL   Вверх
SyncMaster
Дата 8.7.2010, 15:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 38
Регистрация: 13.7.2006

Репутация: нет
Всего: нет



Это мне понятно, а вот как определить что этот блок так сказать закончин  -   

P  у E"РОСАГРОЛИЗИНГ", РОССИЙСКАЯ АГРОПРОМЫШЛЕННАЯ ЛИЗИНГОВАЯ КОМПАНИЯ, ОАО Россия, г. Москва  (495)782-19-76/77....82  (495)782-19-85/86    [email protected]http://www.rosagroleasing.ru/Председатель Совета директоров - Алексей Васильевич Гордеев, вице-премьер Правительства, Министр сельского хозяйства РФ.Генеральный директор - Елена Борисовна Скрынник.Главная цель - государственная поддержка российского сельхозтоваропроизводителя на основе новой национальной системы аграрного лизинга.

и потом начался новый.

если посмотреть на текст то видно, что он разделен - Названия организации - Адрес - телефон - Мыло Сайт -  и Описание.
PM MAIL ICQ   Вверх
PsiMagistr
Дата 8.7.2010, 15:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 479
Регистрация: 31.12.2009

Репутация: 1
Всего: 1



Хм. Никак. Комп не человек, ему надо все популярно объяснять.

Ну вот к примеру тип. Пишу на коленке:

Код

type Persona = Record
Name:String; //Имя
Familiya:String; //Фамилия
Vozrast:Integer; //Возраст
end;


Теперь объявим переменную:

Код

var:P:Persona;


Если мы начнем в эту переменную считывать данные из файла то они начнут сразу считываться этим блоком, ведь ты задаешь размер переменной, определяя какой именно объем считывать.

Вот наш Файл. Первая запись:

Имя Иван
Фамилия Иванов
Возраст 23

Вторая запись:

Имя Ирина
Фамилия Нестерова
Возраст 18.

и тд.

Так блоки идут друг за другом в файле. Если указатель файла установлен на начало считается первая запись, если указатель стоит в конце первого блока, считается второй. Все считывается таким образом, чтобы целиком заполнить собой переменную.

Размер каждого блока нам известен, благодаря чему мы можем помещать головку в начало того места откуда хотим начать считывание.

Код

begin
F := TFileStream.Create(ExtractFilePath(Application.ExeName)+ 'Сохраненные данные.dat',fmOpenRead); //Открываем файл.
F.Seek(0, sofromBeginning); //Устанавливаем головку на нулевой байт от начала файла.
F.Read(myRec,Sizeof(MyRec)); //Читаем в переменную MyRec. (Не забудь объявить выше) Функция Sizeof определяет размер блока.
T1.Text := MyRec.Name; //Выводим в текстовые поля
T2.Text := MyRec.Sirname;
T3.Text := MyRec.Familyname;
F.Free; //Закрываем файл
end






Это сообщение отредактировал(а) PsiMagistr - 8.7.2010, 16:07


--------------------
"Арфы нет? Возьмите бубен!

Ребята, будем жить!"

 (с) "В бой идут одни старики"

---

"ИЕ" - один из самых сумасшедших браузеров в нашей галактике.
PM MAIL   Вверх
SyncMaster
Дата 8.7.2010, 16:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 38
Регистрация: 13.7.2006

Репутация: нет
Всего: нет



Ну блоки там явно не будут одинаковыми - вот залил этот файл http://depositfiles.com/files/2nggysy9i посмотри плиз :( 
PM MAIL ICQ   Вверх
PsiMagistr
Дата 8.7.2010, 16:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 479
Регистрация: 31.12.2009

Репутация: 1
Всего: 1



Они могут и не быть одинаковыми. Важно знать размер каждого блока. Ты ставишь головку:

Код

Seek(10, sofromBeginning);//10 байт (например 10) от начала.


Именно это определяет откуда начинаем считывать.

Код

Seek(10, sofromBeginning);//Откуда мы начинаем считывать. Указатель установлен в позицию 10 байт от начала.
F.Read(MyRec, sizeof(MyRec))// кусок читаем в переменную-запись, определив ее размер через sizeOf


Нужно четко ориентироваться в файле, знать размер каждого блока и где блок именно такого размера расположен и к какому типу переменной относится.

Это сообщение отредактировал(а) PsiMagistr - 8.7.2010, 16:23


--------------------
"Арфы нет? Возьмите бубен!

Ребята, будем жить!"

 (с) "В бой идут одни старики"

---

"ИЕ" - один из самых сумасшедших браузеров в нашей галактике.
PM MAIL   Вверх
PsiMagistr
Дата 8.7.2010, 16:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 479
Регистрация: 31.12.2009

Репутация: 1
Всего: 1



Попробую тебе по схеме объяснить.

Допустим каждый минус это байт. номера - это номера блоков.


0---1----------2--------------------3

Мы видим блоки разного размера. допустим хотим считать отрезок от нуля до 1 то есть начальный блок. (блоки нумеруются с нуля.)

Значит мы должны установить указатель в 0 байт от начала.

Код

Seek(0, sofromBeginning)//
F.Read(MyRec, sizeof(MyRec)) //И считать в переменную MyRec размер которой должен быть 3 байта. ведь от нуля до 1 блока у нас 3 минуса стоит.


Если хотим считать второй блок (Отрезок от 1 до 2) то:

Код

F.Seek(3, sofromBeginning)//Ставим указатель на три байта вперед. Почему на три? Три это наш начальный блок. Надо его пропустить.
F.Read(MyRec, sizeof(MyRec)) //И считаем в переменную MyRec размер которой должен быть 10 байт (минусов). Никак не меньше иначе инфа не влезет.


Тип переменной должен совпадать. Если строка - строка. Запись запись. Число- число.








Это сообщение отредактировал(а) PsiMagistr - 8.7.2010, 19:16


--------------------
"Арфы нет? Возьмите бубен!

Ребята, будем жить!"

 (с) "В бой идут одни старики"

---

"ИЕ" - один из самых сумасшедших браузеров в нашей галактике.
PM MAIL   Вверх
SyncMaster
Дата 8.7.2010, 16:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 38
Регистрация: 13.7.2006

Репутация: нет
Всего: нет



Еще заметил если взять в начале каждого блока строки -

00 00 00 0C 00 00 02 3C 00 1A   = 12
00 00 00 0D 00 00 03 4E 00 23   = 13
00 00 00 0E 00 00 01 49 00 12   = 14

и.т.д

Получает идентификатор например - 

00 00 00 0E 00 00 01 49 00 12 "ИНВЕ-Восток", ООО M143362, Россия, Московская обл., Наро-Фоминский р-н, д. Мартемьяново, вл. 135  (495)785-83-67/68  (495)785-83-63   
 [email protected]http://www.inve.ru ™Генеральный директор - Дуарте Мануэль Ладислаович.
Мебель для ванных комнат. Дочернее испанское производство INDUSTRIAS VELASCO, S.L. в России с 2001 г.  

получается что у этого блока ИД 14.
PM MAIL ICQ   Вверх
PsiMagistr
Дата 8.7.2010, 19:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 479
Регистрация: 31.12.2009

Репутация: 1
Всего: 1



SyncMaster, Друг, в общем то прочитать совсем незнакомый тебе файл я думаю весьма трудно. В первую очередь потому, что необходимо как я писал выше четкое понимание структуры. Иначе это будет чревато ошибками чтения и т.д.


--------------------
"Арфы нет? Возьмите бубен!

Ребята, будем жить!"

 (с) "В бой идут одни старики"

---

"ИЕ" - один из самых сумасшедших браузеров в нашей галактике.
PM MAIL   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Для новичков"
SnowyMetalFan
bemsPoseidon
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.0912 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.