现在我只能将固定长度的数据写入文本文件,但我需要更改为可变长度的数据。 我的代码:
fileID = fopen(logfilePathLocal,'at+');
formatSpec = '%s,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d\n';
fprintf(fileID,formatSpec,data{1,:});
fclose(fileID);
答案 0 :(得分:2)
您可以使用%f
代替%d
,并指定宽度和精度,例如宽度3和精度5将为%3.5f
。
有关说明符语法的更多信息,请参阅matlab文档中的fprintf
reference。
编辑:如果您的意思是,您不知道"我的格式字符串中有多少%d
最终会有",您可以首先手动构造格式字符串(例如通过concatenaton,或使用sprintf
),然后在fprintf
中使用结果字符串,例如
N = 5; % number of data, subject to change on each run.
% construct format-string
s = '%s';
for i = 1:N-1; s = [s, '%d, ']; end
s = [s, '%d\n']; % final data point
% use it with fprintf to print your data
fprintf (s, 'The data is: ', data{1,:});
答案 1 :(得分:1)
根据的答案,您可以使用eval
和一组字符组合生成所需的格式规范,以及您要打印到文件中的数据条目。< / p>
clear
clc
fid = fopen('file.txt','at+');
% Generate some random data in a cell
data = {rand(5,1) rand(3,1)};
% Calculate required dimensions for fprintf
% and store the results in file.txt
n = size(data,2);
m = [];
for i=1:n
m = [m size(data{i},1) - 1];
end
% Finally, we will have n = 2, m = [4 2]
% Produce the final dynamic code snippet
fmt = [];
for i=1:n
for j=1:m(i)
fmt = [fmt '%d,'];
end
fmt = [fmt '%d\n'];
eval(['fprintf(fid,fmt,data{' num2str(i) '});']);
fmt = [];
end
从file.txt
借来的示例输出是:
9.063082e-01,8.796537e-01,8.177606e-01,2.607280e-01,5.943563e-01
2.251259e-02,4.252593e-01,3.127189e-01