今天上午编写程序时,发现要经常存盘,但是相同的文件自动存盘时文件名又相同,因此做了一个自动将当前的时间转换为待存盘文件名来进行存盘,函数文件名为 now_filename.m, 先写函数内容吧:
%----------------------filename: now_filename.m -----------------------
function [ fname ] = now_filename( pre, post )
%NOW_FILENAME convert current time to filename
% NOW_FILENAME returns current time to filename as:
% 2010-02-23_093803413
% NOW_FILENAME('pre', 'post') returns
% pre2010-02-23_094339313post
% NOW_FILENAME('eion-', '.mat') returns
% eion-2010-02-23_094410117.mat
% AUTHOR: TANG Houjian @ 2010_02_12 10_04
if nargin == 0
pre = '';
post = '';
elseif nargin == 1
post = '';
end
t = clock; % Get current time
fname = [pre, num2str(t(1:1), '%04d'), ... % Year
num2str(t(2:3), '-%02d'), '_', ... % -month-day_
num2str(t(4:5), '%02d'), ... % hour min
num2str(fix(t(6)*1000), '%05d'), post]; % sec+ms
end
%-----------------------------end of file now_filename.m-------------------
上述文件用到了clock和num2str指令,虽然date2str(now)也能将当前时间转换为类似 “12-Feb-2010 10:23:32” 的形式,但是由于有冒号,且文件名的长度也不一致,故舍弃,用
fname = [pre, num2str(fix(t), '%_02d'), post]
也能达到功能,但基于两个方面的考虑,一个是时分秒太长,一般只需要标识日期,另外一个就是如果两次生成的时间太短(1秒之内)会出现相同的文件名,因此把秒后面的毫秒值也加入了显示,且直接显示在秒之后,运行结果为
>> now_filename
ans =
20100212_102751062
>> now_filename('abc')
ans =
abs20100212_102751062
>> now_filename('abc', '.txt')
ans =
abc20100212_102751062.txt
在调用是一般只需要用save指令即可保存文件,注意save指令在保存以变量内容为存盘文件名时的格式是save(fname, ...)
例如, 指令
>> a = '我要存储的变量';
>> save fname, a
将保存为文件 fname.mat, 而指令
>> a = '我要存储的变量';
>> fname = 'abc.mat';
>> save(fname, 'a')
将保存为文件 abc.mat,注意此处要存储的变量 a 要加单引号,否则嘿嘿…………
=======================================
see also:
datestr, now, clock, sprintf, num2str, fix