Matlab: только строка заголовка из CSV файла
Предположим, есть 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 строк кода для этого - можно ли это сделать меньше?
Буду благодарен за любые конструктивные предложения.
Ответы
Ответ 1
Откройте файл с 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
Ответ 2
Чтобы извлечь первую строку, вам просто нужно
fid = fopen('myfile.csv');
a = textscan(fid,'%s',1);
fclose(fid);