如何加载 TXT 包含具有不同行的不同列



我有包含不同列的txt。例如,以下 txt 具有

1 2
1 2
1 2
1 2
1 2
1 2 3 4
1 2 3 4
1 2 3 4
1 2 3 4
第一列是 1

,因此我希望第一列的输出是 1。当我使用load时,它会抛出此错误

Error using load
Number of columns on line 6 of ASCII file test.txt must be the same as previous lines.

我用了importdata但输出是

 1
 1
 1
 1
 1
 1
 3
 1
 3
 1
 3
 1
 3

在 Matlab R2014b 中

c=csvread('test.txt')
c =
     1     2     0     0
     1     2     0     0
     1     2     0     0
     1     2     0     0
     1     2     0     0
     1     2     3     4
     1     2     3     4
     1     2     3     4
     1     2     3     4

也许这不是最好的方法,但它仍然很短。如果您的文件包含少于 1000000 行,您可以使用:

a=importdata('1.txt','n',1000000)

因此,a将是单元格数组,单元格数等于行数(行数)。现在,如果你想获得第三行,只需使用:

b=str2num(a{3})

b 是一个行向量 - txt 文件中的第三行。

编辑:如果要提取第一列,请使用 for 循环:

a=importdata('1.txt','n',1000000);
b=zeros(1,numel(a));  % b will be first column
for i=1:numel(a)       % loop throw rows 
    p=str2num(a{i});   % obtain row #i
    b(i)=p(1);            % b(i)=first element
end

也许有更好的方法。此解决方案便于处理行,我没有注意到,你想获得列

csvread由于

某种原因在R2014a和R2014b之间给出了不同的行为,并且没有更改的文档。请改用dlmread

dlmread('input.txt')

输出给出:

ans =
     1     2     0     0
     1     2     0     0
     1     2     0     0
     1     2     0     0
     1     2     0     0
     1     2     0     0
     1     2     0     0
     1     2     0     0
     1     2     0     0
     1     2     0     0
     1     2     0     0
     1     2     3     4
     1     2     3     4
     1     2     3     4
     1     2     3     4
     1     2     3     4

假设您的文件仅包含数值,您可以将其解析为单元格数组,如下所示:

% Read full file
str = fileread('A.txt'); 
% Convert text in a cell array of strings  
c = strsplit(str, 'n');
% Convert 'string' elements to 'double' 
n = cellfun(@str2num, c, 'UniformOutput', false);

然后,您可以像这样访问单个行(作为双精度数组):

>> n{1}
ans =
     1     2
>> n{7}
ans =
     1     2     3    4

PS:这是我的答案的副本 如何在 Matlab 中加载文本文件 当每行中的值数量不同时

最新更新