如何从matlab

时间:2017-01-24 13:55:39

标签: matlab

现在我只能将固定长度的数据写入文本文件,但我需要更改为可变长度的数据。 我的代码:

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

2 个答案:

答案 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)

根据SqlLOCALDb_edited.png的答案,您可以使用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