我的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
答案 0 :(得分:2)
可能这不是最好的方法,但它仍然很短。 如果您的文件包含少于1000000行,则可以使用:
a=importdata('1.txt','\n',1000000)
因此,a
将是单元格数组,单元格数量等于行数(行)。现在,比方说,如果你想获得第3行,只需使用:
b=str2num(a{3})
b
是一个行向量 - txt文件中的第三行。
编辑:如果要提取第1列,请使用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
可能有更好的方法。此解决方案便于处理行, 我没注意到,你想获得专栏
答案 1 :(得分:2)
在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
答案 2 :(得分:2)
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
答案 3 :(得分:1)
假设您的文件只包含数值,您可以将其解析为单元格数组,如下所示:
% 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);
然后您可以像这样访问各行(作为double数组):
>> n{1}
ans =
1 2
>> n{7}
ans =
1 2 3 4
PS:这与我对How to load a text file in Matlab when the number of values in every line are different
的回答重复