自动文件和文件夹命名

问题描述:

我是一位新的Fortran用户。我正在尝试根据日期和时间创建一个文件名。我只知道打开外商投资企业的命令是:自动文件和文件夹命名

open (unit=10,file='test.txt') 

我想有使用当前的日期和时间,当程序执行文件的名称,而不是'test.txt'。如果有人能帮助我,我会很感激。

+0

看来你的问题不是关于创建文件,而是基于日期和时间值创建文件名称,否则你需要创建一个基于日期和时间的字符串,这反过来又是一个串联问题。查看[这个例子](http://www.cs.mtu.edu/~shene/COURSES/cs201/NOTES/chap02/char-opr.html)获取解决方案。 – mins 2015-04-05 07:31:52

+0

非常感谢...... – James 2015-04-05 08:22:32

+0

虽然这个问题似乎已经解决了,但在我看来,使用'write(10,*)'输出到一个名为'fort.10'的文件是一种选择,然后在运行可执行文件时重命名该文件,或将其放入makefile中。 – 2015-04-05 09:15:22

您可以使用date_and_time来实现这一目标:

module time_ftcs 

contains 
    function timestamp() result(str) 
    implicit none 
    character(len=20)      :: str 
    integer        :: values(8) 
    character(len=4)      :: year 
    character(len=2)      :: month 
    character(len=2)      :: day, hour, minute, second 
    character(len=5)      :: zone 

    ! Get current time 
    call date_and_time(VALUES=values, ZONE=zone) 
    write(year,'(i4.4)') values(1) 
    write(month,'(i2.2)') values(2) 
    write(day,'(i2.2)')  values(3) 
    write(hour,'(i2.2)') values(5) 
    write(minute,'(i2.2)') values(6) 
    write(second,'(i2.2)') values(7) 

    str = year//'-'//month//'-'//day//'_'& 
      //hour//':'//minute//':'//second 
    end function timestamp 
end module 

program test 
    use time_ftcs, only: timestamp 

    open (unit=10,file='test'//trim(timestamp())//'.txt') 
    write(10,*) 'Hello World' 
    close(10) 
end program 

这导致文件

$cat test2015-04-05_09:32:27.txt 
Hello World 
+0

非常感谢你@Vogt – James 2015-04-05 08:23:06

您可以使用内建子进程date_and_time来实现这一目标:

module time_ftcs 

contains 
    function timestamp() result(str) 
    implicit none 
    character(len=15)      :: str 
    character(len=8)      :: dt 
    character(len=10)      :: tm 

    ! Get current time 
    call date_and_time(DATE=dt, TIME=tm) 

    str = dt//'_'//tm(1:6) ! tm(7:10) are milliseconds and decimal point 

    end function timestamp 
end module 

program test 
    use time_ftcs, only: timestamp 

    open (unit=10,file='test_'//timestamp//'.txt') 
    write(10,*) 'Hello World' 
    close(10) 
end program 

这应导致文件

$cat test_20150405_093227.txt 
Hello World