自动文件和文件夹命名
问题描述:
我是一位新的Fortran用户。我正在尝试根据日期和时间创建一个文件名。我只知道打开外商投资企业的命令是:自动文件和文件夹命名
open (unit=10,file='test.txt')
我想有使用当前的日期和时间,当程序执行文件的名称,而不是'test.txt'
。如果有人能帮助我,我会很感激。
答
您可以使用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
看来你的问题不是关于创建文件,而是基于日期和时间值创建文件名称,否则你需要创建一个基于日期和时间的字符串,这反过来又是一个串联问题。查看[这个例子](http://www.cs.mtu.edu/~shene/COURSES/cs201/NOTES/chap02/char-opr.html)获取解决方案。 – mins 2015-04-05 07:31:52
非常感谢...... – James 2015-04-05 08:22:32
虽然这个问题似乎已经解决了,但在我看来,使用'write(10,*)'输出到一个名为'fort.10'的文件是一种选择,然后在运行可执行文件时重命名该文件,或将其放入makefile中。 – 2015-04-05 09:15:22