我想将.txt文件读入Matlab。 其中一列包含字母和数字。 (所以我猜一种方法是将此列读为字符串。)
问题是我还需要找出该列中大于5的数字。
e.g。 .txt看起来像
12 1
21 2
32 7
11 a
03 b
22 4
13 5
31 6
即。最终,我想得到
32 7
31 6
我怎么能得到它?任何专家,请帮忙!
答案 0 :(得分:4)
您可以使用TEXTSCAN将文件内容读入字符串的单元格数组中,使用CELLFUN和STR2NUM将字符串转换为数字值('a'
等字符并且'b'
将导致空矩阵[]
),删除其中包含任何空单元格的单元格数组,然后使用{{3将剩余数据转换为N×2矩阵}}:
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 :(得分: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变量的潜规则,但无论如何都是文本处理,所以你可能不会注意到它的缓慢。
编辑:在以前的版本中有太多错误,必须重新开始。