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

Matlab 文本扫描以读取未知数量的变量和未知数量的运行,matlab,textscan,Matlab,Textscan,我正在尝试读取csv文件,该文件将具有以下格式 Var1 Val1A Val1B ... Val1Q Var2 Val2A Val2B ... Val2Q ... 我不会提前知道文件中有多少变量(行)或多少次运行(列) fID = fopen(strcat(pwd,'/',inputFile),'rt'); firstLine = fgetl(fID); numFields = length(strfind(firstLine,' ')) + 1; fclose(fID); fo

我正在尝试读取csv文件,该文件将具有以下格式

  Var1 Val1A Val1B ... Val1Q
  Var2 Val2A Val2B ... Val2Q
  ...
我不会提前知道文件中有多少变量(行)或多少次运行(列)

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);
我一直在尝试让文本扫描工作,但无论我尝试什么,我都无法将所有变量名隔离,也无法获得逐列的行单元格数组。这就是我一直在尝试的

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

有人有什么建议吗?

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

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

首先,通过分析第一行计算出有多少列,并找到列数,然后分析完整文件:

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