将文本文件中的每一行加载到MATLAB中的不同向量中

时间:2018-04-03 21:30:46

标签: 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));

1 个答案:

答案 0 :(得分:1)

在这种情况下,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};

尽管速度稍慢,您也可以在同一方法中使用strsplitstr2double

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