使用fgets和fprintf在matlab中进行文件处理

时间:2015-07-06 20:13:59

标签: matlab

我正在尝试从一个文件中读取数据并将其打印到另一个文件中。这是我的代码 -

fileID=fopen('first3.txt','w');
fid=fopen('a.txt');
tline=fgets(fid);
tline=fgets(fid);
tline=fgets(fid);
tline=fgets(fid);
grp = textscan(tline,'%d %d %d %d %d %d %d %d %d %d %s');

tline=fgets(fid);
n1=textscan(tline,'%.4f %.4f %.4f %c %d %d %d %d %d %d %d %d %d %d %d %d');
fprintf(fileID,'   %f    %f    0.0000 %c   0 0 0 0 0 0 0 0 0 0 0 0\n',double(n1{1}),...
                double(n1{2}),char(n1{4}),double(n1{5}),double(n1{6}),double(n1{7}),...
                double(n1{8}),double(n1{9}),double(n1{10}),double(n1{11}),double(n1{12}),...
                double(n1{13}),double(n1{13}),double(n1{15}),double(n1{16}));      

fclose(fileID);
fclose(fid);

这是我的输入文件 - a.txt

aaa
  bbb
ccc
  4  3  0  0  0  0  0  0  0  0 ABC
    0.0000   -0.1976    0.0000 C   0  0  0  0  0  0  0  0  0  0  0  0

这是我的输出文件 -

   0.000000    -0.197600    0.0000 C   0 0 0 0 0 0 0 0 0 0 0 0
   0.000000    0.000000    0.0000  NUL   0 0 0 0 0 0 0 0 0 0 0 0
   0.000000    0.000000    0.0000  NUL   0 0 0 0 0 0 0 0 0 0 0 0
   0.000000    0.000000    0.0000  NUL   0 0 0 0 0 0 0 0 0 0 0 0
   0.000000    0.000000    0.0000  NUL   0 0 0 0 0 0 0 0 0 0 0 0

为什么这些额外的行打印在输出文件中?

注意 - 我必须在打印前修改该行的某些变量的内容。这就是我使用textscanfget的原因。我无法直接打印整条线,因为我必须修改一些内容。所以,请提出我的代码中存在的问题。

1 个答案:

答案 0 :(得分:0)

问题是因为您在此行中将15个值传递给printf

fprintf(fileID,'   %f    %f    0.0000 %c   0 0 0 0 0 0 0 0 0 0 0 0\n',double(n1{1}),...
            double(n1{2}),char(n1{4}),double(n1{5}),double(n1{6}),double(n1{7}),...
            double(n1{8}),double(n1{9}),double(n1{10}),double(n1{11}),double(n1{12}),...
            double(n1{13}),double(n1{13}),double(n1{15}),double(n1{16}));

但格式字符串(' %f %f 0.0000 %c 0 0 0 0 0 0 0 0 0 0 0 0\n')只有3个格式参数。如果输入的参数多于参数,MATLAB将重复该行,直到它使用了所有输入。

将格式字符串中的0值替换为%d,或者删除多余的输入。 E.g:

fprintf(fileID,'   %f    %f    0.0000 %c   0 0 0 0 0 0 0 0 0 0 0 0\n',double(n1{1}),...
            double(n1{2}),char(n1{4}));