加载中…
个人资料
水龙一谭
水龙一谭
  • 博客等级:
  • 博客积分:0
  • 博客访问:73,469
  • 关注人气:21
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
相关博文
推荐博文
谁看过这篇博文
加载中…
正文 字体大小:

[笔记] Matlab 获取文件最近修改时间的一些方法

(2015-02-13 15:13:59)
标签:

it

matlab

分类: 写代码
背景:很多程序都要根据文件的最近修改时间来做些其他淫荡或平凡的事情,比如艳名远播的 make
问题:如何在 matlab 中获得一个文件的修改时间呢

1. matlab 内置的 dir 函数
matlab 自己有 ls 与 dir 命令,其意义与系统命令行的作用差不多,列出当前工作目录下的文件。而 dir 也能当作函数调用(help dir)。st = dir(filename) 返回一个结构 struct,其中就有一个 'date' 域,表示修改时间。例如:

>> st = dir('hello.pl')
st = 

       name: 'hello.pl'
       date: '13-二月-2015 14:23:07'
      bytes: 575
      isdir: 0
    datenum: 7.3601e+005
>>

不过这个 st.date 基本只能看,不能用,因为它自作主张地将时间截转化为系统格式。在我当前的 windows 系统下,它将月份转为中文“二月”了。试想要比较“二月”与“三月”哪个时间大小,很有点蛋疼。也没找到其他办法来设置 dir 输出 date 的格式。

所以要更好地控制结果,只好寻求外部工具了。matlab 最擅长的是数值计算,但也可调用其他一些外部程序(混合编程)做些其他不擅长的事情。

2. 调用 perl

请查看 matlab 的帮助文档(help perl)。matlab 可以调用一个 pl 脚本,并捕获输出,语法如 result = perl('perlfile',arg1,arg2,...)。另外,在 windows 下,其实不必安装 perl 解释器,matlab 软件安装自己包含一个  perl 解释器。一个字,matalb 代码里可以直接调用 perl 脚本。perl 很适合用于系统管理脚本,所以获取文件修改时间不在话下。

找一个能获取时间的 perl 脚本(例如参考 http://outofmemory.cn/code-snippet/13781/take-file-eventually-modify-time),不妨保存为 mtime.pl

>>type('mtime.pl');
use File::stat;
use POSIX qw(strftime);
my $file = $ARGV[0];
my $date_string = strftime "%Y-%m-%d %H:%M:%S", (localtime stat($file)->mtime);
print $date_string;
>>

然后就能在 matlab 中用 perl 函数调用该 pl 脚本,取得一个文件的修改时间,例如:

>> perl('mtime.pl', 'hello.pl')
ans =
2015-02-13 14:23:07
>> 

像 'yyyy-MM-dd HH:mm:ss' 这样格式的时间表示法就易读且易用了。

3. 用 java 类方法

matlab 对 java 的内置支持更直接,可以直接使用 java 的类对象。除了不必为变量声明强类型外,在 matlab 中使用 java 类与 java 程序或 matlab 使用自己的类相似的狠,一般使用情况下不必纠结其中的区别。

参考一下 java 程序是如何获取一个文件的修改时间(http://emily2ly.iteye.com/blog/742799),将其中部分核心代码抄下来,比如保存在一个 filetime.m 文件中:

>>type('filetime.m')
function ftime = filetime(filename)

import java.io.File;
import java.text.SimpleDateFormat;
import java.util.Calendar; 

fid = File(filename);
time = fid.lastModified();
fmt = SimpleDateFormat('yyyy-MM-dd HH:mm:ss');
cal = Calendar.getInstance();
cal.setTimeInMillis(time);
ftime = fmt.format(cal.getTime());
end
>>

转存为 matlab 函数后,直接按 matlab 方式调用函数即可,例如:

>> filetime('hello.pl')
ans =
2015-02-13 14:23:07
>> 

乍一看,用 java 方法要先 import 一大堆类,似乎有点麻烦。不过这是 matlab 调用已编译好的 java 类,比上面调用外部 perl 脚本运行更快些。

(结束)

0

阅读 评论 收藏 禁止转载 喜欢 打印举报/Report
  • 评论加载中,请稍候...
发评论

    发评论

    以上网友发言只代表其个人观点,不代表新浪网的观点或立场。

      

    新浪BLOG意见反馈留言板 电话:4000520066 提示音后按1键(按当地市话标准计费) 欢迎批评指正

    新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 会员注册 | 产品答疑

    新浪公司 版权所有