2015-07-06 3 views
1

Я пытаюсь читать данные из одного файла и распечатать его в другой file.This Файл мой код-обработки в MatLab с помощью fgets и fprintf

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 

Почему эти дополнительные строки печатаются в выходном файле?

Примечание- Я должен изменить содержимое некоторых переменных строки перед printing.That поэтому я использую textscan и fget .Я не могут непосредственно печатать всю строку, как я должен изменить некоторые из содержания . Итак, предложите проблемы, которые присутствуют в моем коде.

ответ

1

Проблема в том, что вы передаете 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, либо избавитесь от лишних входов. Например:

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})); 
+0

О, извините, как я пропустил это. Спасибо большое. – LifeIsGood

Смежные вопросы