我试图使用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
我的矩阵长达数千行,所以我不希望不必逐行循环。
有关如何处理的任何建议吗?
答案 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);