2013-09-21 3 views
2

Я до сих пор довольно новичок в Matlab, но по какой-то причине документация не помогла с этим.Matlab - Импорт файла .dat в массив

У меня есть файл .dat, который я хочу превратить в массив столбцов _ на 6 столбцов (количество строк изменяется в зависимости от программы, которая генерирует файл .dat). То, что мне нужно сделать, это получить размеры изображения, которые этот массив будет использоваться для создания из первой строки 2-го столбца (x) и 1-й строки 4-го столбца (y). При использовании инструмента импорта данных в Matlab, это работает должным образом:

enter image description here

Однако мне нужна программа, чтобы сделать это автоматически. Если первой строки там не было, я уверен, что могу просто использовать fscanf, чтобы поместить данные в массив, но размеры изображения необходимы.

Любая идея, что мне нужно использовать вместо этого?

ответ

0

Вы можете использовать textscan. Первый вызов этой функции будет обрабатывать первую строку (т. Е. Получить размер вашего файла), а второй - оставшийся файл. Второй вызов использует repmat, чтобы объявить спецификацию формата: %f, что означает double, повторный nb_col раз. Опция CollectOutput объединит все столбцы в одном массиве. Обратите внимание: textscan может читать весь файл без указания количества строк.

Код будет

fileID = fopen('youfile.dat');  %declare a file id 

C1 = textscan(fileID,'%s%f%s%f'); %read the first line 
nb_col = C1{4};      %get the number of columns (could be set by user too) 

%read the remaining of the file 
C2 = textscan(fileID, repmat('%f',1,nb_col), 'CollectOutput',1); 

fclose(fileID);      %close the connection 

В том случае, когда число столбцов фиксирован, вы можете просто сделать

fileID = fopen('youfile.dat'); 
C1 = textscan(fileID,'%s%f%s%f'); %read the first line 
im_x = C1{2};      %get the x dimension 
im_y = C1{4};      %get the x dimension 

C2 = textscan(fileID,'%f%f%f%f%f%f%*[^\n]', 'CollectOutput',1); 
fclose(fileID); 

Спецификация формата %*[^\n] пропускает остальные из линия.

+0

Извините, возможно, я был неясен. Массив, который мне нужно создать, это не 200x341, это размер изображения, который будет использоваться для создания. Что мне нужно сделать, так это получить размеры изображения из этой первой строки, а затем перевернуть остальную часть этого .dat-файла в массив, в котором я нуждаюсь, в данном случае - от массива 68201x6 до массива 68200x6. В тот момент, когда я пытаюсь получить размеры изображения из кода вы в курсе, все это я получаю: Nx = [136401x1 двойного] Ny = [136401x1 двойные] –

+0

см правки. – marsei

+0

Это сработало, спасибо большое. –

Смежные вопросы