2011-06-03 123 views
2

我想將一個.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 

我怎樣才能得到它?任何專家,請幫助!

回答

0
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可變的潛規則,但它是文本處理呢,所以你可能不會注意到緩慢。

編輯:在以前的版本中有太多的錯誤,不得不開始新鮮。

4

可以文件讀入到使用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