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
我正在尝试将 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