将复杂的.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串的单元阵列的内容,使用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