我需要批量处理混合单位的文本文件,即整数比和浮点数(它们是未知有理数或无理数的缩放对数近似值(。Matlab如何检测哪个输入是哪个?将扫描"."还是"/"字最好?
252.63
4/3
757.89
2/1
在这个例子中,我认识到数字以递增的顺序表示值(但以混合单位表示,这在我的研究领域是典型的(,我将以不同于4/3和2/1的方式处理252.63和757.89。
我在Matlab中没有找到像isa(x, 'rat')
这样的函数,其中x是上面列表中的任何一行,"rat"是ratio。
Matlab可以非常简单地搜索字符串中的特定字符。
slashmask = str == '/'; % returns false for every character in str that's not a slash, and true for every one that is.
slashdetected = any(slashmask); % returns false if no character is a slash.
如果您所需要做的只是获取比率并对其进行评估,然后以与浮点相同的方式使用它,那么只需使用"eval"函数即可检索等效的浮点值。
感谢您的提示。在你的帮助下,我解决了这个问题(每行数据文件(:
x = fgetl(fileId);
if isnan(str2double(x)) == true
% Interpret string as ratio number
x = str2num(x);
% then convert to musical cents,
s(i) = log(x) / log(2) * 1200;
else
% convert string to float, already in cents.
s(i) = str2double(x);
end