我有一个包含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]}
请告诉我用什么方法来阅读上述文件?
答案 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))
更快更容易