我需要批量处理混合单位的文本文件,即整数比和浮点数(它们是未知有理数或无理数的比例对数近似值)。 Matlab如何检测哪个输入是哪个?扫描为“。”或'/'字符最好?
252.63
4/3
757.89
2/1
在此示例中,我认识到数字代表升序值(但以混合单位表示,这是我的研究领域中的典型值),我将处理252.63和757.89的方式与4/3和2/1的方式不同。 / p>
我没有在Matlab中找到像isa(x, 'rat')
这样的函数,其中 x 是上面列表中的任何一行,而'rat'是比率。
答案 0 :(得分:3)
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”函数即可检索等效的浮点数。
答案 1 :(得分:1)
谢谢您的提示。在您的帮助下,我确定了这一点(每行数据文件):
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