2017-05-30 7 views
0

char()関数の出力をfprintfに渡そうとしているので、複数の行をテキストファイルに書き込むことができます。問題は、fprintf(fid,'%s\n', str)が行間の空白をすべて無視し、代わりに大きな行を1つ印刷することです。私はstrを印刷して、新しい行を失うことはありません。変数textlinepreへの文字列のセル配列として読み込まれfprintfのchar関数:ファイルに書き込むときに新しい行を保持する

str = (char(textlinepre)); 
filename = 'newfile.dat'; 
fid = fopen(filename,'w'); 
fprintf(fid,'%s\n', str);  
fclose(fid); 

オリジナルDAT /テキストファイルの内容、。

%Created with Spacar 2.0.25 at 18-05-17, 11:43:37 

% leafspring1 
BEAM  1 1 2 3 4 0.0000000000 1.0000000000 0.0000000000 
% solid bar 
BEAM  2 3 4 5 6 0.0000000000 0.0000000000 1.0000000000 
% leafspring2 
BEAM  3 5 6 7 8 0.0000000000 1.0000000000 0.0000000000 

    X  1 0.0000000000 0.0000000000 0.0000000000 
    X  3 0.0000000000 0.1000000000 0.1000000000 
    X  5 0.0000000000 0.0000000000 0.1000000000 
    X  7 0.0000000000 0.1000000000 0.0000000000 

FIX 1 1 
FIX 1 2 
FIX 1 3 
FIX 2 2 
FIX 2 3 
FIX 2 4 
FIX 7 1 
FIX 7 2 
FIX 7 3 
FIX 8 2 
FIX 8 3 
FIX 8 4 

RLSE 3 1 
RLSE 3 2 
RLSE 3 3 
RLSE 3 4 
RLSE 3 5 
RLSE 3 6 

DYNE 1 1 
DYNE 1 2 
DYNE 1 3 
DYNE 1 4 
DYNE 1 5 
DYNE 1 6 


END 
HALT 

XF 3 0.000000000000 0.000000000000 0.000000000000 

EM 1 0.070650000000 0.000001909022 0.000001907550 0.000000001472 0.000000000000 
EM 2 1.999400000000 0.000094804883 0.000066646667 0.000028158217 0.000000000000 
EM 3 0.070650000000 0.000001909022 0.000001907550 0.000000001472 0.000000000000 

ESTIFF 1 1890000.000000000000 0.058028906301 51.030000000000 0.039375000000 0.000000000000 0.000000000000 
ESTIFF 3 1890000.000000000000 0.000000000000 0.000000000000 0.039375000000 0.000000000000 0.000000000000 

EDAMP 1 0.365400000000 0.000006500000 0.000190000000 0.000005300000 
EDAMP 3 0.365400000000 0.000000000000 0.000000000000 0.000005300000 

TIMESTEP  10.00 50 
ITERSTEP 10 10 0.00005 

END 
END 

VISUALIZATION 
BEAMVIS 1 0.000500000000 0.018000000000 
BEAMVIS 2 0.013000000000 0.020000000000 
BEAMVIS 3 0.000500000000 0.018000000000 

VIBRATIONMODE 1 
VIBREND 7.854 
ENLARGEFACTOR 0.01 
TRANSPARENCY 0.6 
+0

はい、申し訳ありませんが、私は編集を試みましたそれをより明確な処方にする。 –

+1

'textlinepre'とは何ですか?あなたは現在、文字列全体の後に新しい行を印刷していますが、その中の特定の点ではありません。 – Wolfie

+0

各文字列(行)の後に入力を挿入する方法は分かりません。 –

答えて

0

は、文字列のセル配列を取る(あなたのケースで外部ファイルからこれを取得する)正常に動作

filename = 'newfile.dat'; 
fid = fopen(filename,'w'); 
% Print to file line by line, so '\n' is added after every element 
for ii = 1:numel(textlinepre) 
    fprintf(fid, '%s\n', textlinepre{ii}); 
end 
fclose(fid); 

これを行うためのmathworksの例は次のとおりです。Export cell array to text file

+0

これは完璧に機能しました!私の感謝はすごいです:) –

0

textlinepreの作成方法に問題があります。私は以下のコードを持って、それをファイルに

textlinepre = {'line1', 'line2', 'line3'}; 

書き込みを

textlinepre = sprintf(['%% leafspring1\n' ... 
         'BEAM 1 1 2 3 4 0.0000000000 1.0000000000 0.0000000000\n'... 
         '%% solid bar\n'... 
         'BEAM 2 3 4 5 6 0.0000000000 0.0000000000 1.0000000000\n'... 
         '%% leafspring2\n'... 
         'BEAM 3 5 6 7 8 0.0000000000 1.0000000000 0.0000000000\n\n'... 
         'X 1 0.0000000000 0.0000000000 0.0000000000']); 
str = (char(textlinepre)); 

filename = 'newfile.dat'; 
fid = fopen(filename,'w'); 
fprintf(fid,'%s\n', str); 
fclose(fid); 
+0

OPは文字列を手動で構築していないと思います。 textlinepreはディスク上のファイルから来ます。 –

+0

これはすべて手動で行う必要があることを意味しますか? Textlinepreは別のテキストファイルから差し引かれます。手動で行うことは、数行からかなり困難です。 –

+0

@ S.Hoefsloot上記の "textlinepre"の値が無効なMatlabステートメントであるため、 "textlinepre"を得るために実際のテキストファイルをアップロードできますか? –

関連する問題