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

时间:2015-03-10 19:35:19

标签: matlab

我的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

4 个答案:

答案 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

的回答重复