2013-11-24 2 views
2

Я хочу импортировать данные из текстового файла с заголовками строк и столбцов, а также в матрицу. Например, входной файл выглядит следующим образом:Как импортировать данные с заголовками строк и столбцов

data c1 c2 c3 c4 
r1 1 2 3 4 
r2 5 6 7 8 

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

Заранее спасибо.

ответ

1

Я использовал бы textscan с дополнительным %*s в строке формата, чтобы сожрать первый столбец заголовка в каждой строке. Первая строка заголовка должна быть использована для подсчета количества столбцов, в случае, если оно неизвестно:

fid = fopen('input.txt'); %// Open the input file 

%// Read the first header row and calculate the number of columns in the file 
C = textscan(fid, '%s', 1, 'Delimiter', '\n', 'MultipleDelimsAsOne', true); 
cols = numel(regexp(C{1}{1}, '\s*\w+')); 

%// Read the rest of the rows and store the data values in a matrix 
C = textscan(fid, ['%*s', repmat('%f', 1, cols - 1)]); 
A = [C{:}];    %// Store the data in a matrix 

fclose(fid);    %// Close the input file 

данных хранятся в матрице A.

+0

Спасибо за ответ. Я попробовал это и успешно получил свои данные, хранящиеся в матрице, но у меня есть еще одно сомнение. Если мне нужно знать имя столбца и строки dataelement 3 (которое будет r1, c3), как я это покажу? – Keerthana

1

Из документации на readtable см http://www.mathworks.com/help/matlab/ref/readtable.html

T = readtable(filename, 'ReadVariableNames', true) если первый столбец имеет заголовки

или

T = readtable(filename, 'ReadRowNames', true), если первая строка содержит заголовки

Вы также можете быть заинтересованы в 'HeaderLines' пар имя-значение, если вы хотите удалить больше, чем только первую строку.

+0

К сожалению, эта функция была введена только в Matlab 2013b. – thewaywewalk

+0

А, я этого не видел. В исходном вопросе была упомянута команда, поэтому я предположил, что с ней была версия. – athypes

+0

@athypes Спасибо за ответ. потому что я использую 2013a, я не могу использовать параметр readtable. Я виноват, что я говорю об этом. – Keerthana

1

Вы можете использовать importdata, например, предположим, что разделитель является "закладка",

rawdata = importdata(filename, '\t'); 
row_names = rawdata.textdata(2:end,1); 
col_names = rawdata.textdata(1, 2:end); 
data_mat = rawdata.data; 

row_names и col_names являются массив ячеек типов. Если вы хотите, чтобы они были одной строкой, разделенной \t или , и т. Д., Вы можете использовать strjoin.

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