我正在尝试从一个文件中读取数据并将其打印到另一个文件中。这是我的代码 -
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
为什么这些额外的行打印在输出文件中?
注意 - 我必须在打印前修改该行的某些变量的内容。这就是我使用textscan
和fget
的原因。我无法直接打印整条线,因为我必须修改一些内容。所以,请提出我的代码中存在的问题。
答案 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}));