Textscan在行开始时跳过所需的空白区域

时间:2013-10-09 10:43:29

标签: matlab file-io delimiter textscan

运行某个我正在使用.txt的软件 - 输入我需要用Matlab操作的文件。 我知道该怎么做,我没想到会遇到什么问题。由于它不起作用,我将操作脚本减少到最小,所以实际上没有任何改变。除了一些白色空间,其他软件似乎对此反应非常敏感。

我文件的部分内容如下:

...
*CONTROL_TERMINATION
$#  endtim    endcyc     dtmin    endeng    endmas
  1.000000         0     0.000     0.000     0.000
*CONTROL_TIMESTEP
$#  dtinit    tssfac      isdo    tslimt     dt2ms      lctm     erode     ms1st
     0.000  0.900000         0     0.000 -1.000E-4         0         0         0
$#  dt2msf   dt2mslc     imscl
     0.000         0         0
...

我正在将它加载到Matlab并直接保存而无需更改:

% read original file
fid = fopen('filename.txt','r');
param = textscan(fid,'%s','delimiter','\n');
rows = param{1,1};
fclose(fid);

% overwrite to new file
fid = fopen('filename.txt','w');
fprintf(fid, '%s\r\n', rows{:});
fclose(fid);

输出文件缺少每行开头的空格,这似乎是输入和输出文件的唯一区别。 (至少我希望如此)

...
*CONTROL_TERMINATION
$#  endtim    endcyc     dtmin    endeng    endmas
1.000000         0     0.000     0.000     0.000
*CONTROL_TIMESTEP
$#  dtinit    tssfac      isdo    tslimt     dt2ms      lctm     erode     ms1st
0.000  0.900000         0     0.000 -1.000E-4         0         0         0
$#  dt2msf   dt2mslc     imscl
0.000         0         0
...

虽然这对我来说似乎很奇怪,但这应该是原因 - 我可以改变哪些文件看起来100%相同?我遇到的问题是白色空间有不同的长度。

1 个答案:

答案 0 :(得分:3)

您可以使用whitespace中的textscan选项,并将其设置为空字符串。

param = textscan(fid,'%s','delimiter','\n','whitespace','');

默认情况下,textscan在处理任何数据字段(doc center)时不包含前导空格字符。