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

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

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

Восстановить пароль

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

Ответ
 
Опции темы Поиск в этой теме
Старый 14.02.2011, 11:52   #1
Nomercy
 
Регистрация: 12.04.2010
Сообщений: 8
По умолчанию Импорт данных из бинарного файла (.bin) на лист Excel

Доброго дня Всем)

Столкнулся с необходимостью импорта котировок в excel из двоичного файла (формат .bin). Структура данных в файле - двумерный массив, где любая строка представляет собой последовательность 5-ти данных: время, объём1, объём2, цена1, цена2. Также известен тип данных
Время - 64-bit Long
Oбъём1, объём2, цена1, цена2 - 64-bit Double

После некоторого изучения данной темы по просторам инета, решил попробовать извлечь хотя бы самое первое число - время. Однако получаю совсем не то число что должно быть. (получаю 721485824 вместо 1285246800692)


Код:
Sub Temp()
    Dim FileNum As Integer
    Dim Vremya As Long
    FileNum = FreeFile
    Open "C:\Sample.bin" For Binary Access Read As FileNum
        Get FileNum, , Vremya
        Cells(1, 1) = Vremya
    Close FileNum
End Sub
К примеру, при извлечении первых трех строк данных должна получиться таблица следующего вида, где каждое данное в отдельной ячейке листа:
1285246800692 | 79,875 | 79,86 | 2400000 | 1600000
1285246801902 | 79,875 | 79,855 | 2400000 | 7300000
1285246803723 | 79,875 | 79,86 | 1600000 | 1600000

Увы, работа с бинарными файлами освещена в инете не шибко широко, потому обращаюсь к вам за помощью.
Вложения
Тип файла: zip Sample.zip (41.1 Кб, 30 просмотров)
Nomercy вне форума Ответить с цитированием
Старый 14.02.2011, 13:07   #2
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

ну так правильно, тип Long - это 8 байтное знаковое целое.
Это числа в диапазоне Long-типа от -2147483,648 до 2147483647

у Вас ЯВНО больше!

Вас бы мог спасти тип Int64 (Тип значения Int64 представляет целые числа со знаком в диапазоне от минус 9 223 372 036 854 775 808 до плюс 9 223 372 036 854 775 807. )
но, к сожалению, MS Excel (VBA) не умеет работать с такими числами..

p.s. а зачем Вам бинарник в Excel читать? Другие ЯП не допускаются по идеологическим соображениям?


ДОБАВЛЕНО
Цитата:
К примеру, при извлечении первых трех строк данных должна получиться таблица следующего вида, где каждое данное в отдельной ячейке листа:
1285246800692
в начале Вашего файла идут следующие байты:
Цитата:
Код:
00 00 01 2B 3E AD D3 34  40 53 F8 00 00 00
расскажите, как у Вас получилось 1285246800692 ?

Последний раз редактировалось Serge_Bliznykov; 14.02.2011 в 13:21.
Serge_Bliznykov вне форума Ответить с цитированием
Старый 14.02.2011, 13:23   #3
Nomercy
 
Регистрация: 12.04.2010
Сообщений: 8
По умолчанию

Цитата:
Сообщение от Serge_Bliznykov Посмотреть сообщение
ну так правильно, тип Long - это 8 байтное знаковое целое.
Это числа в диапазоне Long-типа от -2147483,648 до 2147483647

p.s. а зачем Вам бинарник в Excel читать? Другие ЯП не допускаются по идеологическим соображениям?
Действительно, не обратил внимания на диапазон значений в VBA для чисел типа long...

А импорт в Excel мне необходим, так как программа для обработки и интерпретации этих данных написана под Excel. Первоначально программма импортировала текстовые данные - с ними проблем по импорту не было. Сейчас формат изменен на бинарный...увы
Nomercy вне форума Ответить с цитированием
Старый 14.02.2011, 13:26   #4
doober
Старожил
 
Аватар для doober
 
Регистрация: 02.05.2009
Сообщений: 3,907
По умолчанию

я попробовал прочитать и конвертировать
BitConverter.ToInt64 и BitConverter.ToUInt64
у меня данные не сходятся
Анализ,обработка данных Недорого
doober вне форума Ответить с цитированием
Старый 14.02.2011, 13:34   #5
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Nomercy
doober

я пошёл от обратного.
взял число 1285246800692
присвоил его в Int64, записал в файл.
получилось в файле:
Цитата:
Код:
34 D3 AD 3E 2B 01 00 00
если присмотреться, то увидим, что это то же число, только порядок байт ОБРАТНЫЙ.


Цитата:
Сейчас формат изменен на бинарный...увы
могу предложить Вам "костыли" - небольшая консольная программа, которая конвертирует бинарный файл в текстовый, который Вы и читаете в Excel
Serge_Bliznykov вне форума Ответить с цитированием
Старый 14.02.2011, 13:34   #6
Nomercy
 
Регистрация: 12.04.2010
Сообщений: 8
По умолчанию

Цитата:
Сообщение от Serge_Bliznykov Посмотреть сообщение
в начале Вашего файла идут следующие байты:

расскажите, как у Вас получилось 1285246800692 ?
Я отобразил данный файл в HexEditor' е в бинарном виде и первые 8 байт имеют вид:
00000000 00000000 00000001 00101011 00111110 10101101 11010011 00110100

И если число 1285246800692 скопировать в стандартный калькулятор в режиме программиста (Windows 7), то получим ту же самую последовательность бит.
Nomercy вне форума Ответить с цитированием
Старый 14.02.2011, 14:02   #7
Nomercy
 
Регистрация: 12.04.2010
Сообщений: 8
По умолчанию

Костыли в данном случае мне не помогут)) Каждый час мне приходится качать 25 файлов формата тхт и подкармливать их программе. Встал вопрос автоматизиции данного нудного процесса. Однако скачать тхт-файлы с флэш-загрузчика автоматически нехавтает у меня ума. Зато источник предлагает прямые ссылки на аналогичные по содержанию файлы, но в формате bin. Таким образом если пользоваться костылями - мне придется каждый час конвертить 25 файлов бин в тхт, что к сожалению не поможет автоматизации всего процесса..(
Nomercy вне форума Ответить с цитированием
Старый 14.02.2011, 14:12   #8
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Цитата:
что к сожалению не поможет автоматизации всего процесса..(
что то мы не понимаем друг друга..
ну, разумеется, конвертировать BIN -> TXT будет тот же Ваш скрипт на том же VBA!
и, после конвертации, будет грузить полученный файл в Excel.
и,если бинарник один, то почему текстовых файлов из него получится 25 ?

впрочем, смотрите сами, как Вам лучше, дело то хозяйское...
Serge_Bliznykov вне форума Ответить с цитированием
Старый 20.08.2012, 20:25   #9
Wer666
 
Регистрация: 20.08.2012
Сообщений: 7
По умолчанию

Задавал свой вопрос на другом форуме, но на него никто не смог ответить.
Надеюсь на вашу помощь. Заранее извиняюсь за свой вопрос в существующей теме, но моя проблема близка к ней.
Есть bin файл, который считывается программой и в результате обработки которого программа выдает графики.
В bin файле зашифрована таблица с данными. К сообщению прикладываю ту таблицу со значениями (http://rghost.ru/39862316) которая должна получиться в итоге из bin файла (http://rghost.ru/39856628).
Это результаты показаний прибора "Терем-4" компании "Интерприбор". Т.е. файл генерируется прибором, а при подключении к компьютеру прибор скидывает информацию в программу "Терем-4" и выдает в виде графиков и таблиц. Программу так же прикладываю.
Программа http://rghost.ru/39862268 (не требует взлома - бесплатная).
Задача открыть bin файл в том виде котором выдает его программа "Терем-4" и заменить значение чисел.
Пробовал открыть с помощью программы "Hiew" - показывает только в виде кода.
Можно ли открыть какой нибудь программой, что бы отредактировать именно тот текст который в нем зашифрован, а затем сохранить?
Надеюсь я смог донести свою мысль)

PS: посоветовали обратиться к знатокам СУБД. Предположили, что файл может быть не зашифрован. Есть шанс, что какая-нибудь более или менее распространенная СУБД сможет открыть. Только вот какая и каким образом?
Wer666 вне форума Ответить с цитированием
Старый 20.08.2012, 20:33   #10
EducatedFool
Программист VBA
СуперМодератор
 
Аватар для EducatedFool
 
Регистрация: 13.07.2008
Сообщений: 6,858
По умолчанию

Код для обработки бинарных файлов, и для сохранения их в книге Excel, можно найти здесь:
http://excelvba.ru/tools/Attachments



На днях опубликую у себя на сайте 16-ричный редактор бинарных файлов в Excel:

EducatedFool вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Повреждение данных при записи в середину бинарного файла Aerial Общие вопросы C/C++ 2 01.12.2011 19:32
Чтение данных из бинарного файла Faramir02 Общие вопросы C/C++ 3 22.12.2010 22:43
Поиск-извлечение блока данных из бинарного файла Alter Общие вопросы Delphi 6 28.11.2009 23:12
Импорт данных в Excel mMAg Microsoft Office Excel 2 20.08.2009 17:50
Импорт из текстового файла в Excel (DBF) Slava БД в Delphi 3 22.07.2009 20:28