我正在尝试读取格式为
的csv文件 Var1 Val1A Val1B ... Val1Q
Var2 Val2A Val2B ... Val2Q
...
我不会提前知道文件中有多少变量(行)或多少次运行(列)。
我一直在尝试让文本扫描工作,但无论我尝试什么,我都无法获得所有变量名称被隔离或逐列单元格数组。这就是我一直在尝试的。
fID = fopen(strcat(pwd,'/',inputFile),'rt');
if fID == -1
disp('Could not find file')
return
end
vars = textscan(fID, '%s,%*s','delimiter','\n');
fclose(fID);
有人有建议吗?
答案 0 :(得分:2)
如果文件在每行中具有相同的列数(您只是不知道开头有多少列),请尝试以下操作。
首先,通过解析第一行并找到列数来计算出多少列,然后解析整个文件:
% Open the file, get the first line
fid = fopen('myfile.txt');
line = fgetl(fid);
fclose(fid);
tmp = textscan(line, '%s');
% The length of tmp will tell you how many lines
n = length(tmp);
% Now scan the file
fid = fopen('myfile.txt');
tmp = textscan(fid, repmat('%s ', [1, n]));
fclose(fid);
答案 1 :(得分:0)
对于任何给定的文件,所有行都是等长吗?如果是,您可以从第一行开始读取并使用它来计算字段数,然后使用textscan读取文件。
fID = fopen(strcat(pwd,'/',inputFile),'rt');
firstLine = fgetl(fID);
numFields = length(strfind(firstLine,' ')) + 1;
fclose(fID);
formatString = repmat('%s',1,numFields);
fID = fopen(strcat(pwd,'/',inputFile),'rt');
vars = textscan(fID, formatString,' ');
fclose(fID);
现在你将拥有一个单元格数组,其中第一个条目是var名称,所有其他条目是观察结果。
在这种情况下,我假设分隔符是空格,即使你说它是一个csv文件。如果它真的是逗号,您可以相应地更改代码。