fprintf打印字符和数字没有循环

时间:2014-02-21 14:49:08

标签: matlab printf

我试图使用fprintf来编写数据文件。假设我有一个包含如下数据的矩阵:

Values = [ 1,  735123.0, 23, 24, 25;
           2,  735123.5, 34, 35, 36;
           ...
           8000, 739122.5, 21, 22, 43] 

我可以使用以下方法将其写入文件:

fprintf(FileID, '%d, %f, %d, %d, %d', Values')

但实际上第二列代表日期(datestr(735123.5)= 2012年9月11日12:00:00)并且我希望fprintf在数据文件的第二列中打印日期,以便文件将读取

1, 11-Sep-2012 00:00:00, 23, 24, 25
2, 11-Sep-2012 12:00:00, 34, 35, 36
...
8000, 24-Aug-2023 12:00:00, 21, 22, 43 

我的矩阵长达数千行,所以我不希望不必逐行循环。

有关如何处理的任何建议吗?

2 个答案:

答案 0 :(得分:0)

这样的东西
n = num2cell(Values');
n(2,:) = cellfun(@datestr, n(2, :),'UniformOutput', false);
fprintf(FileID, '%d, %s, %d, %d, %d', n{:});

虽然cellfun基本上是一个循环。

答案 1 :(得分:0)

没有for循环或cellfun

separator = repmat(', ',size(Values,1),1); %// column used as separator
lineFeeds = repmat('\n',size(Values,1),1); %// column of line feeds
string = [ num2str((Values(:,1))) ...
           separator ...
           datestr(Values(:,2)) ...
           separator ...
           num2str(Values(:,3)) ...
           separator ...
           num2str(Values(:,4)) ...
           separator ...
           num2str(Values(:,5)) ...
           lineFeeds ];
string = reshape(string.',1,[]); %'// put everything in one row
FileID = fopen('tmp.txt', 'wt'); %// use 't', or '\n' may not get written to file
fprintf(FileID, string);
fclose(FileID);