Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Microsoft Office и VBA программирование > Microsoft Office Excel
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 05.03.2009, 11:57   #1
mchip
Форумчанин
 
Регистрация: 24.06.2008
Сообщений: 516
По умолчанию Бинарный файл

Как перенести данные из произвольного бинарного файла в Excel? Структура файла известна. Вообще это можно сделать ?
Можно сделать все! Было бы время, да деньги...
mchip вне форума Ответить с цитированием
Старый 05.03.2009, 12:05   #2
IgorGO
Новичок
СтарожилДжуниор
 
Аватар для IgorGO
 
Регистрация: 05.02.2008
Сообщений: 9,487
По умолчанию

конкретный вопрос, конкретный ответ: открыть для чтения и читать...
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете
IgorGO вне форума Ответить с цитированием
Старый 05.03.2009, 12:08   #3
mchip
Форумчанин
 
Регистрация: 24.06.2008
Сообщений: 516
По умолчанию Конкретный вопрос

Описание файла:
Первые 5 байт: STRES
1 байт: номер версии (unsigned char)
1 байт: число байт в имени файла со структурой базы данных - N (unsigned char)
N байт: имя файла со структурой базы данных (без расширения) (N char) (например: Base2009)
......
Далее идет описание строковых полей, полей данных и т.д.


Как мне такого типа информацию считать в Excel?
Можно сделать все! Было бы время, да деньги...
mchip вне форума Ответить с цитированием
Старый 05.03.2009, 12:11   #4
EducatedFool
Программист VBA
СуперМодератор
 
Аватар для EducatedFool
 
Регистрация: 13.07.2008
Сообщений: 6,856
По умолчанию

Цитата:
Как мне такого типа информацию считать в Excel?
Очень просто. Открываете файл для чтения в бинарном режиме...

Прикрепите к сообщению:
1) бинарный файл
2) Книгу Excel с образцом того, что должно получиться после чтения данных из бинарного файла.
EducatedFool вне форума Ответить с цитированием
Старый 05.03.2009, 12:15   #5
mchip
Форумчанин
 
Регистрация: 24.06.2008
Сообщений: 516
По умолчанию

Вот пример файла. Структура листа Excel любая.
Вложения
Тип файла: zip primer.zip (156.0 Кб, 30 просмотров)
Можно сделать все! Было бы время, да деньги...
mchip вне форума Ответить с цитированием
Старый 05.03.2009, 12:53   #6
EducatedFool
Программист VBA
СуперМодератор
 
Аватар для EducatedFool
 
Регистрация: 13.07.2008
Сообщений: 6,856
По умолчанию

Пример макроса:
Код:
Sub ЧтениеИзФайла()
    Application.ScreenUpdating = False
    Filename = "C:\Documents and Settings\Игорь\Рабочий стол\Копия test.dbs"
    'Dim fso As FileSystemObject, ts As TextStream
    Dim arr(): ReDim arr(1 To 5000000, 1 To 1): i = 0

    Set fso = CreateObject("scripting.filesystemobject")
    Set ts = fso.OpenTextFile(Filename, 1, False)
    fl = ts.ReadLine
    НомерВерсии = Asc(Mid(fl, 6, 1))
    n = Asc(Mid(fl, 7, 1))
    If n > 0 Then ИмяФайлаСоСтруктурой = Mid(fl, 8, n)

    While Not ts.AtEndOfStream
        i = i + 1: arr(i, 1) = ts.ReadLine
    Wend
    ts.Close
    If i > 0 Then [a1].Resize(i) = arr: Columns("a").AutoFit

    msg = "Номер Версии: " & НомерВерсии & vbNewLine & vbNewLine
    msg = msg & "Имя Файла Со Структурой: " & ИмяФайлаСоСтруктурой & vbNewLine
    MsgBox msg, vbInformation
End Sub
EducatedFool вне форума Ответить с цитированием
Старый 05.03.2009, 15:38   #7
mchip
Форумчанин
 
Регистрация: 24.06.2008
Сообщений: 516
По умолчанию

Спасибо! Ничего не понял но буду разбираться.
Можно сделать все! Было бы время, да деньги...
mchip вне форума Ответить с цитированием
Старый 05.03.2009, 15:47   #8
EducatedFool
Программист VBA
СуперМодератор
 
Аватар для EducatedFool
 
Регистрация: 13.07.2008
Сообщений: 6,856
По умолчанию

Цитата:
Ничего не понял но буду разбираться.
А что тут понимать?
Я тоже ничего не понял, но ведь работает...

Принцип действия таков:
Set ts = fso.OpenTextFile(Filename, 1, False) ' открываем файл для чтения
fl = ts.ReadLine ' читаем первую строчку

Анализируем первую строку "бинарного" файла:

НомерВерсии = Asc(Mid(fl, 6, 1)) ' 6-й символ первой строки
n = Asc(Mid(fl, 7, 1)) ' длина имени файла в 7-м символе первой строки

' берем символы в количестве N штук, начиная с 8-го:
If n > 0 Then ИмяФайлаСоСтруктурой = Mid(fl, 8, n)

Итого: Номер Версии и Имя Файла Со Структурой мы выяснили.

Далее всё просто - читаем в массив ARR все остальные строки до конца файла:
While Not ts.AtEndOfStream
i = i + 1: arr(i, 1) = ts.ReadLine
Wend


Закрываем текстовый файл: ts.Close

Выводим считанные строки на лист Excel, начиная с ячейки A1:
[a1].Resize(i) = arr
EducatedFool вне форума Ответить с цитированием
Старый 05.03.2009, 18:22   #9
mchip
Форумчанин
 
Регистрация: 24.06.2008
Сообщений: 516
По умолчанию

Спасибо! Разобрался.
Но после текстовых полей у меня идет дополнительная информация.
Я так понял, что длинна строки ограничена символом "перевода каретки"
(13 и 10). Есть ли функции поиска? Например последнего символа "перевода каретки"? Или комбинации символов?
Можно сделать все! Было бы время, да деньги...
mchip вне форума Ответить с цитированием
Старый 05.03.2009, 18:42   #10
EducatedFool
Программист VBA
СуперМодератор
 
Аватар для EducatedFool
 
Регистрация: 13.07.2008
Сообщений: 6,856
По умолчанию

Цитата:
Но после текстовых полей у меня идет дополнительная информация.
Так надо было объяснить, откуда брать эту доп. информацию, и что с ней делать...

Цитата:
Есть ли функции поиска? Например последнего символа "перевода каретки"? Или комбинации символов?
Да проще всего открыть этот файл Excel-ем (как обычный текстовый)
и работать с ним.
А в Excel этих функций (типа поиска) уже предостаточно.
И изобретать ничего не придётся...

Например, так:
Код:
Sub test_OpenText()
    Filename = "C:\Documents and Settings\test.dbs"
    Workbooks.OpenText Filename:=Filename, DataType:=xlDelimited, Tab:=True
End Sub
А потом, начиная с последних строк открывшейся книги, обрабатываете "бинарные данные".
EducatedFool вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Чистый бинарный код НикСерг Общие вопросы C/C++ 16 09.11.2009 15:06
Бинарный файл Bayazet Общие вопросы Delphi 1 04.03.2009 16:39
Нужен совет(бинарный поиск в 2-d массиве) sergey31 Помощь студентам 2 27.04.2008 13:49
Бинарный поиск в 1мерном массиве, ошибка в программе из книги ILDAR@GIZmo Помощь студентам 4 02.12.2007 22:22
Бинарный поиск Gendalf Помощь студентам 1 07.07.2007 22:09