2015-05-05 2 views
-1

У меня есть довольно большой двоичный файл, содержащий информацию в объеме около одного ГБ данных.Сплит большого двоичного файла в Matlab

Я пытаюсь разделить один GB файла .bin на 4 файла по 256 МБ каждый, я не получаю никакой помощи.

Я пробовал использовать textscan и memmapfile функции, но бесполезные.

Любая помощь по этому вопросу?

+1

подробнее объясните с кодом. –

+0

'textscan' не для двоичных файлов. Попробуйте 'fread'. – nkjt

+0

Пожалуйста, объясните, что вы пытались сделать, и как это не сработало. «Я не получаю никакой помощи», совершенно неясно. –

ответ

1

MATLAB может считывать и записывать двоичные файлы.

Попробуйте использовать fopen(), fread()/fwrite() и fclose() команды.

Чтобы прочитать двоичный файл в MATLAB, сначала открыть файл для чтения.

Тогда магия приходит - вы должны знать контекст/структуру двоичных данных внутри файла .bin таким образом, чтобы иметь возможность сканировать данные затем в переменные , используя правильный формат.

fHANDLE   = fopen('aHugeBinFileNAME.bin','r'); % Open the binary file for reading with a fileHandle fHANDLE 
[dVECTOR,count] = fread(fHANDLE, 'int16');   % Scan the data into a vector of int16 values, in this case called dVECTOR 
fclose(fHANDLE);          % Close the file 

Во всяком случае, получить более подробную информацию об услугах FileIO через help fread() и др на дополнительные параметры для чтения «первый/следующий» 256 огромного входного файла для конкретного контекста использования.

dVECTOR_256M = fread(fHANDLE, 256*1024*1024, 'uint8', 0, 'b'); % Big-Endian convention 
+0

Спасибо за ответ. Я вижу, что следующая ошибка может быть из-за моего размера оперативной памяти, «Ошибка при использовании fread Недостаточно памяти. Введите HELP MEMORY для ваших опций». –

+0

Конечно, низкоуровневый доступ к .bin-файлам позволяет работать в режиме скользящего окна (как на 'fread()' -s из входных потоков байтов и 'fwrite()' -s на вывод -stream-of-bytes), так что ваши ресурсы памяти не будут опустошены из-за отсутствия какого-либо (довольно явного) контроля над их (по своей сути неэффективным) слепым и необоснованно оптимистичным способом использования. Еще одно, что нужно учитывать, помимо RAM-памяти. Из-за выравнивания дискового пространства HDD на жестком диске, фактический размер 'fread()'/'fwrite()' не должен занимать меньше, чем около 16 * 64 Кбайт файлов (выходит далеко за пределы темы OP). – user3666197

+1

@ krishnachaitanya Приятно знать, что ответ вам помог. ** StackOverflow ** Сетевой этикет поощряет пользователей выражать это с помощью кликов [+1]. ** Не стесняйтесь ** «голосовать» и показывать это как для хороших Вопросов, так и для ответов, всякий раз, когда вы найдете полезную информацию, которую вы считаете полезной. ** Наслаждайтесь активным членом этого большого сообщества StackOverflow. ** – user3666197