Таблица телеметрии в линейной записи: как сохранить строки, столбцы и порядок обхода
При выгрузке таблицы в последовательность значений нужно сохранить способ обхода ячеек. Иначе одинаковый список чисел может быть распределён по каналам и моментам времени неверно. Возьмём собственную учебную таблицу из двух строк времени и трёх столбцов каналов. В первой строке стоят 1, 2, 3, во второй — 4, 5, 6. Это не формат конкретного судового регистратора: задача — проверить обратное восстановление данных при двух явно определённых способах записи.
Описать оси таблицы
Пусть строки соответствуют моментам T1 и T2, а столбцы — каналам A, B и C. Тогда единица относится к A в T1, тройка — к C в T1, четвёрка — к A в T2. Принадлежность значения важна не меньше самого числа.
Вместе с данными нужны размеры таблицы и порядок обозначений осей. Если столбцы перечислены иначе, набор тех же чисел уже описывает другую раскладку по каналам. Подпись «шесть значений» не заменяет сведений о том, что именно измерено и в каком месте структуры хранится каждый отсчёт.
Пройти таблицу по строкам
Первый способ полностью записывает первую строку, затем вторую. Получается последовательность 1, 2, 3, 4, 5, 6. Для восстановления при известной ширине три отделяем первые три значения как T1 и следующие три как T2.
В результате возвращается исходная таблица. Но успешное восстановление зависит от правильного начала, длины строки и порядка каналов. Если получатель предполагает другую ширину, разбиение будет другим, хотя каждый отдельный элемент может выглядеть допустимым для своего числового типа.
Пройти таблицу по столбцам
Второй способ сначала записывает оба значения канала A, затем оба значения B, затем оба значения C. Получается последовательность 1, 4, 2, 5, 3, 6. При восстановлении первые два числа возвращаются в A по временам T1 и T2, следующие два — в B, последние два — в C.
Это тоже обратимое представление той же таблицы при сохранённых правилах. Оно не точнее первого и не содержит меньше исходных значений. Различается только порядок размещения. Выбор может зависеть от задачи конкретного формата, которой наш учебный пример не задаёт.
Проверить ошибочную интерпретацию
Если последовательность 1, 4, 2, 5, 3, 6 ошибочно разбить на строки по три, получится первая строка 1, 4, 2 и вторая 5, 3, 6. Все шесть чисел присутствуют, но часть значений относится уже не к тем каналам и временам.
Поэтому проверка количества или общего набора значений не обнаруживает такую подмену смысла автоматически. Для восстановления нужна согласованная структура. Порядок байтов внутри одного числа — отдельный вопрос: здесь мы переставляем целые значения между ячейками, не меняя их внутреннее представление.
Сохранить форму и пропуски
В описании выгрузки фиксируют размеры, оси, порядок обхода и правила для отсутствующих ячеек. Если пропуск просто удалён из линейного списка, все следующие позиции могут сдвинуться. Для восстановления нужен явный способ обозначить отсутствие либо отдельные координаты значений.
Также сохраняют версию структуры при добавлении канала или изменении порядка столбцов. Итог примера содержит две последовательности и точные правила обратного преобразования. Такой разбор помогает обсуждать судовые выгрузки содержательно: наличие всех чисел ещё не подтверждает, что они вернулись к правильным источникам и моментам наблюдения.