假设以下数据格式(第一行中有标题行,500多行):
1, "<LastName> ,<Title>. <FirstName>", <Gender>, 99.9
我试过这个(IGNORE:见下面的编辑):
[flag, name, gender, age] = textread('file.csv', '%d %q %s %f', 'headerlines', 1);
...并收到以下错误消息
error: textread: A(I): index out of bounds; value 1 out of bound 0
error: called from:
error: C:\Program Files\Octave\Octave3.6.2_gcc4.6.2\share\octave\3.6.2\m\io\textread.m at line 75, column 3
我忘记了分隔符(错误消息在strread.m中的不同行返回失败):
[flag, name, gender, age] = textread('file.csv', '%d %q %s %f', 'headerlines', 1, 'delimiter', ',');
答案 0 :(得分:0)
我使用了它,然而它将名称字段的文本限定字符串拆分为两个单独的字段,因此字符串中包含字段分隔符的任何文本限定字段将创建一个额外的输出列(我仍然感兴趣知道为什么%q格式不适用于这个字段 - &gt;也许是空格?):
% Begin CSV Import ============================================================================
% strrep is used to strip the text qualifier out of each row. This is wrapped around the
% call to textread, which brings the comma delimited data in row-by-row, and skips the 1st row,
% which holds column field names.
tic;
data = strrep(
textread(
'file.csv' % File name within current working directory
,'%s' % Each row is a single string
,'delimiter', '\n' % Each new row is delimited by the newline character
,'headerlines', 1 % Skip importing the first n rows
)
,'"'
,''
);
for i = 1:length(data)
delimpos = findstr(data{i}, ",");
start = 1;
for j = 1:length(delimpos) + 1,
if j < length(delimpos) + 1,
csvfile{i,j} = data{i}(start:delimpos(j) - 1);
start = delimpos(j) + 1;
else
csvfile{i,j} = data{i}(start:end);
end
end
end
% Return summary information to user
printf('\nCSV load completed in -> %f seconds\nm rows returned = %d\nn columns = %d\n', toc, size(csvfile)(1), size(csvfile)(2));