2015-05-08 4 views
0

У меня есть довольно большой и сложный текстовый файл для чтения в MATLAB. Основной формат выглядит следующим образом:Сложный текстовый файл с переменными столбцами в строке для MATLAB

000723  4  123.12345  5  234.76543 ... 178.94444\n 

первый столбец всегда дата шесть цифр в формате ггммдд, и последний столбец всегда двойной с «\ п» на конце, и не имеет перед ним следует целочисленный столбец. «...» указывает, где вы увидите больше столбцов, если они существуют. Дополнительные столбцы все приходят парами и следовать формату предыдущего мало, т.е .:

integer  double 

Как я могу идти об этом? Похоже, что большинство параметров чтения данных требуют, чтобы я знал размеры, но он постоянно меняется с помощью этого набора данных и всегда будет иметь переменные столбцы в каждой строке.

Я хотел бы получить его в простую матрицу, в которой столбцы являются:

Даты (от datenum) - двойной, соответствующая целым числом 1 - двойной, соответствующая целым числом 2 - ... - окончательное двойное значение

И если в этой строке не было целочисленного числа, тогда он просто дает 0 или NaN в этом месте матрицы.

+0

Функция 'importdata' может помочь –

+1

Да, я использовал' importdata' для этого в прошлом. Он, по крайней мере, получает значения в MATLAB разумным образом, но столбцы не выравниваются, и я должен использовать отдельную функцию, которую я написал, чтобы все было организовано. Я надеялся на более прямой метод «все в один раз», чем этот. –

ответ

0

Если importdata не работает, я бы попробовал что-то вроде textscan.

Просто импортируйте файл:

fid = fopen(FILENAME, 'rt'); 

Тогда просто указать тип данных для столбцов, например, так:

a = textscan(fid, '%s %f %f %f %f %f'); 

Затем преобразовать первый столбец типа String, в даты MATLAB и построить матрица:

data = datenum(a{1}); 

[m n] = size(data); 
for j=2:1:n 
    data = horzcat(data, a{j}); 
end 

Я уже использовал этот подход в наборах данных, но у вас также есть символ \n, который должен быть учтен, в противном случае MATLAB отобразит последний столбец как NaN.

Вот итеративный решение, которое я быстро придумал:

data = []; 

%// Iterate through all the lines in the file 
tline = fgets(fid); 
while ischar(tline) 
    %// Remove the newline character from the expression 
    str = regexprep(tline,'\\n',''); 

    %// Vertically concatenated with the global data set 
    vertcat(data, textscan(str, '%s %f %f %f %f %f')); 

    %// Get the next line 
    tline = fgets(fid); 
end 

Я не могу гарантировать, эти быстрые образцы кода не ошибка бесплатно, но я надеюсь, что они помогут вам!

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