文本扫描读取未知数量的变量和未知数量的运行



我正在尝试读取格式为的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);

有人有什么建议吗?

如果文件每行中的列数相同(只是不知道从多少开始),请尝试以下操作。

首先,通过解析第一行来计算出有多少列,并找到列的数量,然后解析整个文件:

% 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);

对于任何给定的文件,所有行的长度都相等吗?如果是,您可以从读取第一行开始,用它来计算字段数,然后用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文件。如果真的是逗号,您可以相应地更改代码。

最新更新