2017-05-30 160 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语句。 –

相关问题