Я хотел бы прочитать гетерогенные двоичные данные в matlab. Я знаю с самого начала, сколько это и в каком типе данных каждый сегмент. Например:Matlab читает гетерогенные двоичные данные
%double %double %int32 ...
, а затем это повторяется примерно в миллион раз. Легкий enoug для обработки с fread
, поскольку известно количество укусов для каждого сегмента и поэтому может рассчитать значение пропуска для каждой строки.
Но теперь сегмент данных выглядит следующим образом:
%double %int32%*char %double %double ...
Посредством чего int
до *char
является длина указанной строки. Это приводит к тому, что я больше не могу рассчитать пропуск, и я застрял в чтении всего файла за строкой, поэтому мне нужно сделать намного больше доступа к файлам и замедлить все.
Чтобы получить хотя бы некоторую скорость, я не буду читать всего %double %double ...
(около 30 элементов) за один раз, а затем использовать их из буфера, чтобы заполнить массив. В C это было бы довольно простой задачей здесь, без memcpy и не так прямого доступа к указателям ...
Вы знаете какой-либо способ достичь этого, не используя файлы mex?
Я не думаю, что есть встроенная функция, которая бы поняла, «прочитайте столько символов, что этот int говорит вам». Учитывая этот «динамический характер» формата, я думаю, что повторный выбор является единственным выбором. – sebastian
Другая мысль: если вы влияете на формат, вы можете подумать о сохранении символов с фиксированной длиной, заполняя более короткий массив символов нулями при необходимости. Это применимо только в том случае, если char-массивы находятся в пределах определенной длины ... – sebastian
@sebastian. К несчастью, у меня нет никакого контроля на этой стороне. Он в значительной степени исправлен, как есть. В противном случае я бы выбрал что-то вроде HDF5, и мне не пришлось бы разбираться со всеми этими ... –