我有包含不同列的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 中加载文本文件 当每行中的值数量不同时