将没有分隔符的文本文件读入向量MATLAB

时间:2015-08-17 07:34:46

标签: matlab matrix vector integer

我有一个包含200行的文本文件,每行有200个值。该文件由整数组成,但它们不是由任何分隔符分隔,甚至不是空格。这是一个例子,

1111111111111111111111111111111111111111122222222222222222222222222220000111
1111111111111111111111111111100000000003123333333333333333333333333333300002
0000000000022222222222222222222222222222222211111121212222222222222222111111

文件开头可能包含一些字符串,但我只想读取这些数字。我希望能够计算每个整数的出现次数。因此,我将所有这些数字读入矢量或矩阵,其中矢量中的每个元素都是文件中的数字。因此,向量必须包含200 * 200个元素。然后,我将计算每个元素的出现次数。

我查看了textscan等可用的文件阅读方法,但我认为textscan格式为C = textscan(fid,'%d %d');需要指定%d 200 * 200次,是这种情况,还是有一种使用textscan的方式?

我也试过importdata,但是当我尝试打印结果时,我没有得到数值。它似乎只读取第一行,因为这行200x1 double。这是输出,

A = 
          data: [200x1 double]
      textdata: {6x1 cell}
    colheaders: {[1x107 char]}

请告诉我用什么方法来阅读上述文件?

2 个答案:

答案 0 :(得分:1)

您使用importdata的数据,只导入双值和标题。您可以使用readtable函数,如下所示(我假设1个标题行):

datafile='test.txt';
headerlines=1;

%OPTION1
A=readtable(datafile); %from Matlab R2013b
AA=cell2mat(table2array(A(headerlines+1:end,:)));

%OPTION2
A=textread(datafile,'%s'); %from Matlab R2006a
AA=cell2mat(A(headerlines+1:end,:));

%PROCESSING
b=zeros(size(AA));
for k=1:size(AA,1)
  b(k,:)=str2double(regexp(AA(k,:),'\d','match'));
end

%COUNTING
[nelements,centers]=hist(b',0:9);

正则表达式可以将数字输出到列:

regexp('01112345640','\d','match')

这应返回1x11单元格,其中数字为char格式。

答案 1 :(得分:1)

一个简单的方法: 每个整数都是一个单独的数字(在所需的输出中),因此逐行读取数据作为字符串,然后进行循环

for j= 1:numel(a_line_of_integers), 
    x(j) = str2num(a_line_of_integers(j);
end 

并重复阅读的每一行。请注意,如果切换到R,x=as.numeric(strsplit(a_line_of_Integers))更快更容易