fprintf matlab中的char函数:写入文件时保留新行

char function in fprintf matlab: keeping new lines when writing to file

我正在尝试将 char() 函数的输出传递给 fprintf,以便我可以将多行内容写入文本文件。问题是 fprintf(fid,'%s\n', str) 忽略了行之间的所有空格,而是打印了一大行。我想打印 str,而不丢失新行。

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

原始dat/text文件内容,作为字符串元胞数组读入变量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

一定是你构建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);

取一个字符串元胞数组(在你的例子中,你从外部文件中得到它)

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