Помогите раскодировать файл

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
trash
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 113
Зарегистрирован: 28.01.2009 (Ср) 12:09

Помогите раскодировать файл

Сообщение trash » 05.05.2009 (Вт) 11:46

Существует некая ужасная недоделаная фокспрошная прога типа для автоматизации деятельноти библиотек. Один казахский универ имел несчастье пользоваться ей какое-то не малое количество времени и набил в базу приличное количество записей. Сама база состоит из dbf, cdx и idx файлов, но не открывается ни одним odbc-драйвером — VB падает с критическими ошибками. Программа типа умеет делать экспорт в txt, но в какой-то высосанный из пальца формат, причем корректно это делает только под XP SP2. Исходников и разработчиков этого бреда уже не найти, но они сподобились оставить описание формата:
ПРИЛОЖЕНИЕ. ОПИСАНИЕ ФОРМАТА АБИС.
ФАЙЛ ПРЕДСТАВЛЯЕТ СОБОЙ ПОСЛЕДОВАТЕЛЬНОСТЬ БАЙТ. СИМВОЛЫ С ВНУТРЕННИМ КОДОМ 13 МОГУТ ВСТРЕЧАТЬСЯ В ФАЙЛЕ, НО ОНИ НЕ ТРАКТУЮТСЯ КАК КОНЕЦ СТРОКИ, А ЯВЛЯЮТСЯ ЧАСТЬЮ ИНФОРМАЦИИ.
ФОРМАТ ФАЙЛА:
< ФАЙЛ В ФОРМАТЕ АБИС > = <ЗАПИСЬ> [ <ЗАПИСЬ> ... <ЗАПИСЬ> ]
<ЗАПИСЬ> = <ДЛИНА ЗАПИСИ> <СЛУЖЕБНАЯ ИНФОРМАЦИЯ> <ПОДПОЛЕ> [ <ПОДПОЛЕ>... <ПОДПОЛЕ> ]
<ДЛИНА ЗАПИСИ> - CHR(A),CHR(B), ГДE А*256+В - ДЛИНА ВСЕЙ ЗАПИСИ.
<СЛУЖЕБНАЯ ИНФОРМАЦИЯ> - СТРОКА ДЛИНОЙ 45 БАЙТ.
1 БАЙТ -БИБЛИОГРАФИЧЕСКИЙ УРОВЕНЬ(1-6)
2-9 БАЙТЫ - ДАТА ЗАПИСИ (ЧЧММГГГГ ) 10-17 БАЙТЫ - ДАТА ПОСЛЕДНЕЙ КОРРЕКТИРОВКИ
18-37 БАЙТЫ - ФАМИЛИЯ СОТРУДНИКА, ЗАПОЛНИВШЕГО ОПИСАНИЕ
38 БАЙТ - ПРИЗНАК КРАЕВЕДЕНИЯ (ПР0БЕЛ, 1)
39 БАЙТ - ТИП ОПИСАНИЯ (CHR(1)-CHR(12))
40,41 БАЙТЫ-ПОР. НОМЕР
42-45 БАЙТЫ - РЕЗЕРВ
<ПОДПОЛЕ> = <ОПИСАТЕЛЬ ПОДПОЛЯ> <ЗНАЧЕНИЕ>
<ОПИСАТЕЛЬ ПОДПОЛЯ> - СТРОКА ДЛИНОЙ 5 БАЙТ
1 БАЙТ - СHR(N), ГДЕ N - НОМЕР ПОЛЯ
2 БАЙТ - CHR(M), ГДЕ М - НОМЕР ЭКЗЕМПЛЯРА
3 БАЙТ - CHR(L), ГДЕ L - НОМЕР ПОДПОЛЯ
4,5 БАЙТЫ - CHR(X1),CHR(X2), ГДЕ X1*256+X2 - ДЛИНА ПОДПОЛЯ
<ЗНАЧЕНИЕ> - СТРОКА УКАЗАННОЙ 8 ОПИСАТЕЛЕ ДЛИНЫ, СОДЕРЖАЩАЯ ЗНАЧЕНИЕ ПОДПОЛЯ.
Непонятки начались сразу, там, где выделено жирным. Если посчитать по этой формуле первые два байта из экспортного файла, то получается, что длина первой записи равна 25кб, чего быть не может. Это размер целой небольшой повести. В общем, я не знаю, как к нему подступиться. Надеюсь, всемогущему all будет не лень кинуть взгляд на прилагаемый файл, и подтолкнуть меня в нужном направлении.
Вложения
exttttt.rar
(236.52 Кб) Скачиваний: 37

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Re: Помогите раскодировать файл

Сообщение alibek » 05.05.2009 (Вт) 11:52

01h*256+62h=354=162h.
Примерно так оно и есть.
В чем вопрос?
Lasciate ogni speranza, voi ch'entrate.

trash
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 113
Зарегистрирован: 28.01.2009 (Ср) 12:09

Re: Помогите раскодировать файл

Сообщение trash » 05.05.2009 (Вт) 12:02

Код: Выделить всё
Dim ts As New ADODB.Stream
Dim s() As Byte
Dim r As String
   
    ts.Type = adTypeBinary
    ts.Open
    ts.LoadFromFile "c:\exttttt.txt"
    ts.Position = 0
    s = ts.Read(2)
Первые два байта получились 98 и 50. Что я сделал не так? И как правильно?

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Re: Помогите раскодировать файл

Сообщение alibek » 05.05.2009 (Вт) 12:15

Код: Выделить всё
Open FileName For Binary Access Read As #FN
Do Until EOF(FN)
  ReDim buff(0 To 1)
  Get #FN, , buff
  L = buff(0) * 256& + buff(1)
  ReDim buff(0 To L - 3)
  Get #FN, , buff
  rsField.AddNew
...
Lasciate ogni speranza, voi ch'entrate.

trash
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 113
Зарегистрирован: 28.01.2009 (Ср) 12:09

Re: Помогите раскодировать файл

Сообщение trash » 05.05.2009 (Вт) 12:24

Странно, а почему Stream проигнорировал первый байт?

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Re: Помогите раскодировать файл

Сообщение alibek » 06.05.2009 (Ср) 7:38

Возможно посчитал файл юникодным.
Lasciate ogni speranza, voi ch'entrate.

trash
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 113
Зарегистрирован: 28.01.2009 (Ср) 12:09

Re: Помогите раскодировать файл

Сообщение trash » 06.05.2009 (Ср) 11:13

Я ему вроде четко указал — adTypeBinary.
В любом случае, с Open все прошло, как по маслу, спасибо.

Andrey Fedorov
Член-корреспондент академии VBStreets
Член-корреспондент академии VBStreets
 
Сообщения: 3287
Зарегистрирован: 21.05.2004 (Пт) 9:28
Откуда: Москва

Re: Помогите раскодировать файл

Сообщение Andrey Fedorov » 06.05.2009 (Ср) 12:04

trash писал(а):Сама база состоит из dbf, cdx и idx файлов, но не открывается ни одним odbc-драйвером — VB падает с критическими ошибками.


Надо эти файлы видеть - возможно бы и открыли.

Я бы попробовал Visual FoxPro OLEDB...
Фиг Вам! - Сказал Чебурашка, обгладывая Крокодила Гену...


Вернуться в Visual Basic 1–6

Кто сейчас на конференции

Сейчас этот форум просматривают: Yandex-бот и гости: 60

    TopList  
cron