如何使用MATLAB从文本文件中读取数据向量?

时间:2014-06-18 15:11:10

标签: matlab scanf

我正在尝试完成将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

1 个答案:

答案 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}}