将复杂的.txt文件读入Matlab

将复杂的.txt文件读入Matlab

问题描述:

我想将一个.txt文件读入Matlab。 其中一列包含字母和数字。 (所以我想一种方法是阅读这一列是字符串。)将复杂的.txt文件读入Matlab

问题是我还需要找出该列中大于5的数字。

例如该.TXT看起来像

12 1 
21 2 
32 7 
11 a 
03 b 
22 4 
13 5 
31 6 

即最后,我想获得

32 7 
31 6 

我怎样才能得到它?任何专家,请帮助!

fid = fopen('txt.txt','r'); 

Aout = []; 

while(1)  
    [a1,count1] = fscanf(fid,'%s',1); 
    [a2,count2] = fscanf(fid,'%s',1); 
    if(count1 < 1 | count2 < 1) 
     break;  
    end 
    if(~isempty(str2num(a2)) & str2num(a2) > 5 & (~isempty(str2num(a1)))) 
     Aout = [ Aout ; str2num(a1) str2num(a2) ]; 
    end 
end 

fclose(fid); 

违反循环中不断增长的一个Matlab可变的潜规则,但它是文本处理呢,所以你可能不会注意到缓慢。

编辑:在以前的版本中有太多的错误,不得不开始新鲜。

可以文件读入到使用TEXTSCAN串的单元阵列的内容,使用CELLFUNSTR2NUM转换字符串数值(如'a''b'字符将导致空矩阵[]),删除的行单元阵列具有所有空单元格在其中,然后将剩余的数据转换成一个N×2矩阵使用CELL2MAT

fid = fopen('junk.txt','r');      %# Open the file 
data = textscan(fid,'%s %s','CollectOutput',true); %# Read the data as strings 
fclose(fid);          %# Close the file 
data = cellfun(@str2num,data{1},'UniformOutput',false); %# Convert to numbers 
data(any(cellfun('isempty',data),2),:) = [];  %# Remove empty cells 
data = cell2mat(data);        %# Convert to N-by-2 array 

矩阵data现在看起来像这样,考虑到的问题的示例文件:

>> data 

data = 

    12  1 
    21  2 
    32  7 
    22  4 
    13  5 
    31  6 

,你可以得到有第二列大于5的值,像这样的行:

>> data(data(:,2) > 5,:) 

ans = 

    32  7 
    31  6 
+0

+1喜欢它。甚至不知道'textscan()' – 2011-06-03 21:38:04