|
8 / 6 / 2
Регистрация: 03.05.2016
Сообщений: 242
|
||||||
Чтение бинарного файла с данными13.04.2022, 14:43. Показов 3780. Ответов 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
Чтение из бинарного файла в структуру
Некорректное чтение из бинарного файла
Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
| Опции темы | |
|
|
Новые блоги и статьи
|
|||
|
Модель заражения группы наркоманов
alhaos 17.04.2026
Условия задачи сформулированы тут
Суть:
- Группа наркоманов из 10 человек.
- Только один инфицирован ВИЧ.
- Колются одной иглой.
- Колются раз в день.
- Колются последовательно через. . .
|
Мысли в слух. Про "навсегда".
kumehtar 16.04.2026
Подумалось тут, что наверное очень глупо использовать во всяких своих установках понятие "навсегда". Это очень сильное понятие, и я только начинаю понимать край его смысла, не смотря на то что давно. . .
|
My Business CRM
MaGz GoLd 16.04.2026
Всем привет, недавно возникла потребность создать CRM, для личных нужд. Собственно программа предоставляет из себя базу данных клиентов, в которой можно фиксировать звонки, стадии сделки, а также. . .
|
Знаешь почему 90% людей редко бывают счастливыми?
kumehtar 14.04.2026
Потому что они ждут. Ждут выходных, ждут отпуска, ждут удачного момента. . .
а удачный момент так и не приходит.
|
|
Фиксация колонок в отчете СКД
Maks 14.04.2026
Фиксация колонок в СКД отчета типа Таблица.
Задача: зафиксировать три левых колонки в отчете.
Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка)
/ / . . .
|
Настройки VS Code
Loafer 13.04.2026
{
"cmake. configureOnOpen": false,
"diffEditor. ignoreTrimWhitespace": true,
"editor. guides. bracketPairs": "active",
"extensions. ignoreRecommendations": true,
. . .
|
Оптимизация кода на разграничение прав доступа к элементам формы
Maks 13.04.2026
Алгоритм из решения ниже реализован на нетиповом документе, разработанного в конфигурации КА2.
Задачи, как таковой, поставлено не было, проделанное ниже исключительно моя инициатива.
Было так:. . .
|
Контроль заполнения и очистка дат в зависимости от значения перечислений
Maks 12.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2.
Задача: реализовать контроль корректности заполнения дат назначения. . .
|