|
8 / 6 / 2
Регистрация: 03.05.2016
Сообщений: 242
|
||||||
Чтение бинарного файла с данными13.04.2022, 14:43. Показов 3764. Ответов 10
Коллеги и уважаемые форумчане, добрый день! Достаточно сложная зада возникла на данный момент. Расскажу вкратце в чем состоит проблема: имеется бинарный файл (достаточно большой по размеру), суть в том, что в нем хранится запись данных с датчика (3 канала, - 3 сигнала (ток, напряжение и значения амплитуды виброактического сигнала). Есть определенная структура файла - как записаны данные, т.е. есть шапка файла, которая содержит информацию о количесвте каналов, частоте дискретизации и значений величины для каждого канала:
Сам бинарный файл: Файл с исходными данными
Попытка чтения данных из бинарного файла на C# и запись виде csv файла:
Вот исходный файл после преобразования: Файл с выходными данными
Может неправильно таким образом читать бинарный файл, или же проблема по формату файла и типу данных (вместо float на самом деле double)? Я буду очень признателен любой поомщи, потому что кроме самой структуры файла и всей описанной информации никаких более сведений о файле нет, при этом хранимые в нем данные необходимо извлечь..? Буду рад любой помощии советам!
0
|
||||||
| 13.04.2022, 14:43 | |
|
Ответы с готовыми решениями:
10
Чтение бинарного файла по заголовкам |
|
8 / 6 / 2
Регистрация: 03.05.2016
Сообщений: 242
|
|
| 13.04.2022, 15:01 [ТС] | |
|
*акустического сигнала
0
|
|
|
17823 / 12973 / 3382
Регистрация: 17.09.2011
Сообщений: 21,261
|
|||
| 13.04.2022, 15:07 | |||
|
dux99, судя по документации, 48 байтов начиная с 12-го не используются, а вы их все равно считываете. Это специально?
Наверное, надо поменять на ReadSingle()?
0
|
|||
|
8 / 6 / 2
Регистрация: 03.05.2016
Сообщений: 242
|
||||
| 13.04.2022, 15:21 [ТС] | ||||
|
kolorotur,
0
|
||||
|
17823 / 12973 / 3382
Регистрация: 17.09.2011
Сообщений: 21,261
|
||
| 13.04.2022, 15:33 | ||
|
Из документации не совсем понятно: их надо игнорировать, или их в файле вообще не будет и можно продолжать считывание после 12-го байта? Так же неясен порядок байтов в файле: он прямой или обратный? Что вы знаете о содержимом файла, если не пользоваться своим кодом для его считывания? Сколько в нем каналов и количество точек, например?
0
|
||
|
8 / 6 / 2
Регистрация: 03.05.2016
Сообщений: 242
|
|
| 13.04.2022, 15:41 [ТС] | |
|
kolorotur,
в файле 3 канала, порядок байтов - прямой, количество точек - запись примерно 3 минуты с частотой 80 кГц, значит приблизительно 14 400 000 точек... Вот про это не сказано, что можно ли их считывать или непосредственно игнорировать - я полагаю, раз не используются, то тогда надо просто отсальные 28 байт не считывать, хотя считывал. По сути, эта вся информация, которой располагаю...
0
|
|
|
17823 / 12973 / 3382
Регистрация: 17.09.2011
Сообщений: 21,261
|
||
| 13.04.2022, 15:47 | ||
|
В прямом порядке там будут астрономические числа (50331648 каналов). Или значения заголовка в обратном порядке, а данные — в прямом? Если, скажем, посмотреть на байты с 40-го по 44-й, то они выглядят так: [ D2, FF, F9, FF ]. Если их считывать как float в обратном порядке, то значение будет NaN, если в прямом, то -5.497054e+11 (-549705400000). Насколько это значение реалистично?
0
|
||
|
8 / 6 / 2
Регистрация: 03.05.2016
Сообщений: 242
|
||
| 13.04.2022, 16:10 [ТС] | ||
|
kolorotur,
Не могу сказать, насколько оно реалистично, потому что возможно, что автор программы мог их делить или умножать на коэффициент определенный, хотя в системе был подключен усилитель, поэтому если положить, что коэффициент усиления 10^11 (многовато), то возможно,но многовато все равно... Про порядок байтов - так мне сказали те, кто прислали структуру файла, но значит заголовок читается в обратном порядке, а вот с данными вопрос другой - nan может всоприниматься как нуль или ошибка датчика, хотя все равно странно.
0
|
||
|
17823 / 12973 / 3382
Регистрация: 17.09.2011
Сообщений: 21,261
|
|
| 13.04.2022, 16:22 | |
|
dux99, еще один момент.
Размер прикрепленного вами файла — 88704012 байтов. Каждое значение, судя по таблице, занимает 4 байта — получается, что всего в файле 22176003 значений. Первые 3 значения — заголовок, потому остается 22176000 значений. Если у каждой точки 3 значения (по одному на канал), то получается, что в файле 22176000 / 3 = 7392000 точек, а не 144000, как указано в заголовке. Если же поделить 22176000 на предполагаемое 144000, то получается, что данные для каждой точки занимают 154 байта, а не 4 * [число каналов] (12 в данном случае). У меня где-то в подсчетах ошибка, или там несколько "сессий" сцепленно в один файл?
0
|
|
|
8 / 6 / 2
Регистрация: 03.05.2016
Сообщений: 242
|
|
| 13.04.2022, 16:29 [ТС] | |
|
kolorotur,
Нет, это одна сессия,три канала - три сигнала. Я думаю, что часть байтов - это промежуточная информация, первые 3 значения- по 4 байта каждое, значит всего 12 байт на первые три значения, далее идут неиспользуемые, а потом значения сигналов, первые три точки, а затем снова повтор - это скорее всего уже и есть сигнал.
0
|
|
|
17823 / 12973 / 3382
Регистрация: 17.09.2011
Сообщений: 21,261
|
|||||||||||
| 13.04.2022, 16:40 | |||||||||||
Сообщение было отмечено dux99 как решение
Решение
dux99, ну в любом случае BinaryReader читает значения только в обратном порядке, потому вам надо либо считывать их по 4 байта, переворачивать массив и конвертировать во float, либо отказаться от использования BinaryReader.
Вот тот же вариант, только значения читаются напрямую из FileStream с помощью пары вспомогательных методов. Значения заголовка считываются в обратном порядке, значения сигналов — в прямом. Вывод производится в консоль, в файл можно сохранить через перенаправление вывода в консоли:
inputFS.Position += 7 * 4; // Skip 7 unused values в цикл.
1
|
|||||||||||
| 13.04.2022, 16:40 | |
|
Помогаю со студенческими работами здесь
11
Чтение из бинарного файла в структуру
Некорректное чтение из бинарного файла
Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Установка Qt Creator для C и C++: ставим среду, CMake и MinGW без фреймворка Qt
8Observer8 05.04.2026
Среду разработки Qt Creator можно установить без фреймворка Qt. Есть отдельный репозиторий для этой среды: https:/ / github. com/ qt-creator/ qt-creator, где можно скачать установщик, на вкладке Releases:. . .
|
AkelPad-скрипты, структуры, и немного лирики..
testuser2 05.04.2026
Такая программа, как AkelPad существует уже давно, и также давно существуют скрипты под нее. Тем не менее, прога живет, периодически что-то не спеша дополняется, улучшается. Что меня в первую очередь. . .
|
Отображение реквизитов в документе по условию и контроль их заполнения
Maks 04.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеСпецтехники", разработанного в конфигурации КА2.
Данный документ берёт данные из другого нетипового документа. . .
|
Фото всей Земли с борта корабля Orion миссии Artemis II
kumehtar 04.04.2026
Это первое подобное фото сделанное человеком за 50 лет. Снимок называют новым вариантом легендарной фотографии «The Blue Marble» 1972 года, сделанной с борта корабля «Аполлон-17». Новое фото. . .
|
|
Вывод диалогового окна перед закрытием, если документ не проведён
Maks 04.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2.
Задача: реализовать программный контроль на предмет проведения документа. . .
|
Программный контроль заполнения реквизитов табличной части документа
Maks 02.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2.
Задача:
1. Реализовать контроль заполнения реквизита. . .
|
wmic не является внутренней или внешней командой
Maks 02.04.2026
Решение:
DISM / Online / Add-Capability / CapabilityName:WMIC~~~~
Отсюда: https:/ / winitpro. ru/ index. php/ 2025/ 02/ 14/ komanda-wmic-ne-naydena/
|
Программная установка даты и запрет ее изменения
Maks 02.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2.
Задача: при создании документов установить период списания автоматически. . .
|