我正在尝试完成将ASCII数据文件读入MATLAB的相对简单的任务。文件结构如下:
(0,180)
[ 0 0.0174533 0.0349066 0.0523599 0.0698132 ... ]
虽然我能够在fscanf
的第一行读到,但我无法在'%f'
的浮点值向量中读取:
A = fscanf(fid, '(%d,%d)\n[ %f ]').
我找到了解决问题的方法。必须使用两次textscan
来电,而不是一次拨打fscanf
。随时欢迎更优雅的解决方案。
function [range, theta] = readTheta(fname)
fid = fopen(fname, 'r');
line1 = fgetl(fid);
C = textscan(line1, '(%d,%d)\n');
range = [ C{1}, C{2} ];
line2 = fgetl(fid);
line2 = regexprep(line2, {'[ ' ' ]'}, '');
C = textscan(line2, '%f');
theta = C{1};
fclose(fid);
end
答案 0 :(得分:2)
你可以比textscan
更加努力地推动data = textscan(anyLine,'%f','delimiter','[]() ,','MultipleDelimsAsOne',true);
。例如,请考虑将以下参数设置为textscan。
anyLine= '(0,7)';
data = textscan(anyLine,'%f','delimiter','[]() ,','MultipleDelimsAsOne',true);
disp(data{1});
anyLine= '[ 0 0.0174533 0.0349066 0.0523599 0.0698132 ]';
data = textscan(anyLine,'%f','delimiter','[]() ,','MultipleDelimsAsOne',true);
disp(data{1});
现在这个命令适用于上面的任何一行。
{{1}}