0

私は2つのデータ構造を持っています:

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 
4

1 に答える 1

0

おそらく次のものに置き換える必要がありますfprintf

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

%i整数を出力するには、 or%dを使用する必要があります%s。整数は ascii 値として解釈されます。

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

atomName{i}もう 1 つ: の代わりに書く方が簡単ですcell2mat(atomName(i))。中括弧を使用してセル配列にインデックスを付けると、必要な i 番目のセルの内容が得られます。通常の括弧でインデックスを付けると、i 番目のセルの内容を含む 1x1 セル配列が得られます。

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

マニュアルを参照してください。

于 2013-10-13T18:04:35.647 に答える