Я работаю над автоматическим c инструментом декодирования файловой структуры базы данных. Файл состоит из заголовка и тела. Информация, известная до попытки декодирования файла: Количество строк Размер тела
Поля могут быть следующими:
- Строка: один байт для размера, за которым следует фактическая строка, не оканчивающаяся нулем
- StringAcii: один байт для размера, за которым следует фактическая строка, не оканчивающаяся нулем
- OptionalString: один байт в качестве флага, один байт для размера, за которым следует фактическая строка, не оканчивающаяся нулем
- OptionalStringAcii: один байт как флаг, один байт для размера, за которым следует фактическая строка, не оканчивающаяся нулем
- Число: 32 бита
- Bool: байт со значением 0 или 1
Также есть файл метаданных для каждого файла, который содержит количество столбцов.
Мой текущий подход таков: вычислить все возможные столбцы типов, но выйду раньше, если я найду комбинацию, которая никогда не будет возможна при просмотре первой строки. Например, столбец 1 = bool, где значение равно 4.
Для каждой возможной комбинации столбцов, которая по крайней мере действительна для первой строки, попробуйте проанализировать всю таблицу. Если ошибок нет и весь байт израсходован в конце, у нас есть возможный кандидат.
Это работает очень хорошо, но слишком медленно, если таблица имеет 25+ столбцов. Как лучше решить эту проблему?