将文本文件中的每一行加载到MATLAB中的其他向量中



我有以下文件:

0 1 4 8 
2 3 0 1 2 3 
2 1 3 1 1 2 

该文件将始终有三行,我希望每行都在单独的向量

我有这样的代码,但是正如人们可以看到的那样,它不会将文本存储在不同的向量中。

  fid = fopen('my_file.txt');
  while ~feof(fid)
     line=fgetl(fid);
     C = str2num(line)
  end

编辑:我通过使用Cellarrays获得了答案。如果有人可以做得更好,请在下面回答。

fid = fopen('my_file.txt');
CCSMat = {};
count = 1;
while ~feof(fid)
    line=fgetl(fid);
    C = str2num(line);
    CCSMat(count) = {C};
    count = count+1;
end
v1 = cell2mat(CCSMat(1));
v2 =  cell2mat(CCSMat(2));
v2 =  cell2mat(CCSMat(3));

在这种情况下,textScan函数可能会有所帮助,同时逐行阅读文件:

fid = fopen('data.txt','r');
res = cell(3,1);
res_off = 1;
while (~feof(fid))
    line = fgets(fid);
    vector = textscan(line,'%f','CollectOutput',true,'Delimiter',' ');
    res{res_off} = [vector{:}];
    res_off = res_off + 1;
end
fclose(fid);
v1 = res{1};
v2 = res{2};
v3 = res{3};

尽管稍慢一点,但您也可以在同一方法中使用strsplit与str2double一起使用:

fid = fopen('data.txt','r');
res = cell(3,1);
res_off = 1;
while (~feof(fid))
    line = fgets(fid);
    res{res_off} = str2double(strsplit(strtrim(line),' '));
    res_off = res_off + 1;
end
fclose(fid);
v1 = res{1};
v2 = res{2};
v3 = res{3};

最新更新