Matlab: строка заголовка только для чтения из .csv-файла - PullRequest
11 голосов
/ 07 декабря 2011

Предположим, что есть myfile.csv с именами переменных в первой строке и десятичными числами в следующих. В Matlab я бы хотел прочитать строку заголовка и десятичные числа отдельно. До сих пор я делал следующее, чтобы извлечь строку заголовка:

fid = fopen('myfile.csv');
a = textscan(fid,'%s','Delimiter','\n');
b = a{1,1};
fclose(fid);
c = textscan(b,'%s','Delimiter',',');
d = c{1}

Затем я использую команду csvread, чтобы извлечь числовую часть файла. Но должен быть (намного) более простой способ сделать это! Во-первых, я не хочу читать весь файл (как с a = textscan(fid,'%s','Delimiter','\n');), чтобы извлечь только первую строку. Во-вторых, кажется неправильным использовать для этого 7 строк кода - это можно сделать с меньшими затратами?

Буду благодарен за любые конструктивные предложения.

Ответы [ 2 ]

3 голосов
/ 07 декабря 2011

Откройте файл с помощью fopen, прочитайте строку заголовка с textscan, прочитайте десятичные числа с fscanf и в конце вызовите fclose - всего 4 строки всего :) Пример входного файла:

Weight,Size,Count
1,2,3
4,5,6
7,8,9
10,11,12

Чтение этого файла:

fid = fopen('myfile.csv', 'r');
header = textscan(fid, '%[^,],%[^,],%[^,\r\n]', 1);
data = transpose(fscanf(fid, '%g,%g,%g\n', [3, Inf]));
fclose(fid);

for i = 1 : 3; disp(['"' cell2mat(header{i}) '"']); end;
disp(data);

Обратите внимание, что данные, считанные fscanf, необходимо транспонировать (я подчеркнул это, написав transpose вместо '),Выход:

"Weight"
"Size"
"Count"
     1     2     3
     4     5     6
     7     8     9
    10    11    12
1 голос
/ 27 мая 2014

Чтобы извлечь первую строку, вам просто нужно

fid = fopen('myfile.csv');
a = textscan(fid,'%s',1);
fclose(fid);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...