2017-05-30 83 views
0

我試圖將char()函數的輸出傳遞給fprintf,以便我可以將多行寫入文本文件。問題在於fprintf(fid,'%s\n', str)忽略了所有行之間的空格,而是打印出一條大行。我想打印str,而不會丟失新的行。fprintf matlab中的字符函數:寫入文件時保留新行

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

原始的DAT /文本文件的內容,這被讀入作爲字符串的單元陣列到可變textlinepre

%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

以字符串單元陣列(在你的情況從外部文件得到這個)

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

寫入文件

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); 

下面是一個數學工作的例子:Export cell array to text file

+0

這工作得很好!我的感激之情很棒:) –

0

構建textlinepre的方式肯定有問題。我有下面的代碼,它工作正常

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」,因爲您上面張貼的「textlinepre」的值是一個無效的Matlab語句。 –