2013-10-13 29 views
0

我有两个数据结构:外,在输出文件MATLAB fprintf中改变角色

atomName <855*1 cell> 
atomSASA <855*1 double> 

我使用的代码产生一个输出文件:

%write out SASA values for individual atoms to file 
results_file = fopen('output.txt','w'); 
fprintf(results_file,'SASA for Individual Atoms: \n'); 
i=1; 
while i < (855) 
    fprintf(results_file,'Atom %s %s: %.3f\n',i,cell2mat(atomName(i)),atomSASA(i)); 
    i = i + 1; 
end 

的文件似乎是正确的前32行,但从第33行开始,在单词Atom后面还有一个额外的字符。性格改变每一行,最终通过数字,大写字母AZ去,下字母AZ等我想从每行中删除这个多余的字符:

Atom ! HG23: 6.286 
Atom " N: 0.000 
Atom # CA: 0.000 
Atom $ C: 0.000 
Atom % O: 0.000 
Atom & CB: 0.000 
Atom ' CG: 0.000 
Atom (CD1: 0.000 
Atom) CD2: 0.000 
Atom * CE1: 0.000 
Atom + CE2: 0.000 
Atom , CZ: 0.000 
Atom - OH: 0.000 
Atom . H: 0.000 
Atom/HA: 0.000 
Atom 0 HB2: 0.000 
Atom 1 HB3: 0.000 
Atom 2 HD1: 0.000 
Atom 3 HD2: 0.000 
Atom 4 HE1: 0.000 
Atom 5 HE2: 0.000 
Atom 6 HH: 0.000 
Atom 7 N: 0.000 
Atom 8 CA: 0.000 
Atom 9 C: 0.000 
Atom : O: 0.000 
Atom ; CB: 0.000 
Atom < CG: 0.000 
Atom = CD: 0.000 
Atom > CE: 1.208 
Atom ? NZ: 1.312 
Atom @ H: 0.000 
Atom A HA: 0.000 
Atom B HB2: 0.000 
Atom C HB3: 0.000 
Atom D HG2: 0.000 
Atom E HG3: 0.000 
Atom F HD2: 0.000 
Atom G HD3: 0.000 
Atom H HE2: 0.000 
Atom I HE3: 33.979 
Atom J HZ1: 0.000 
Atom K HZ2: 0.000 
Atom L HZ3: 44.513 
Atom M N: 0.000 
Atom N CA: 0.000 
Atom O C: 0.000 
Atom P O: 0.000 
Atom Q CB: 0.000 
Atom R CG: 0.000 
Atom S CD1: 0.000 
Atom T CD2: 0.000 
Atom U H: 0.000 
Atom V HA: 0.000 
Atom W HB2: 0.000 
Atom X HB3: 0.000 
Atom Y HG: 0.000 
Atom Z HD11: 0.000 
Atom [ HD12: 0.000 
Atom \ HD13: 0.000 
Atom ] HD21: 0.000 
Atom^HD22: 0.000 
Atom _ HD23: 0.000 
Atom ` N: 0.000 
Atom a CA: 0.000 
Atom b C: 0.000 
Atom c O: 0.000 
Atom d CB: 0.000 
Atom e CG1: 0.000 
Atom f CG2: 0.000 

回答

1

你或许应该更换你的fprintf由:

fprintf(results_file,'Atom %i %s: %.3f\n', i, atomName{i}, atomSASA(i)); 

要打印一个整数,你应该使用%i%d,与%s整数被解释为ASCII值:

>> fprintf('as ascii: %s\n', 66) 
as ascii: B 
>> fprintf('as number: %i\n', 66) 
as number: 66 

另一件事:写atomName{i}而不是cell2mat(atomName(i))更容易。使用花括号为单元格数组索引可为您提供第i个单元格的内容,您想要的内容。与正常括号索引,它会给你一个1x1的单元阵列与第i个单元格的内容:

>> atoms = {'aa','bb','cc'} 
atoms = 
    'aa' 'bb' 'cc' 
>> class(atoms{2}) 
ans = 
char 
>> class(atoms(2)) 
ans = 
cell 

the manual

+0

谢谢你对花括号的有用改变和捷径... – LanneR