我想將一個.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
我怎樣才能得到它?任何專家,請幫助!
我想將一個.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串的單元陣列的內容,使用CELLFUN和STR2NUM轉換字符串數值(如'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
+1喜歡它。甚至不知道'textscan()' – 2011-06-03 21:38:04