fortran批处理.000文件,批量生成.dat文件。我现在只能生成一个2012072002.dat。谢谢
怎么改open(unit=23,file="d:\ssdat\2012072002.dat",form='binary')这一行呀!谢谢程序如下:programlistf...
怎么改open(unit=23, file="d:\ssdat\2012072002.dat",form='binary') 这一行呀! 谢谢 程序如下:program listfile
character*100 fPath
character*200 path
character*7 outPut
parameter(n=512)
integer i
character*8 sta(n)
integer nlev,nflag
integer hig(n),station(n)
real lat(n),lon(n),rain(n)
integer m2
character*9 m1
fPath="*.000"outPut="dir.txt"
call ListToFile(fPath,outPut)
open(1,file='dir.txt',status='old')
10 continue
read(1,*,end=20)path
!print*,index(Path,"dir.txt")
if(index(Path,"dir.txt")==0)then
!print*,path
open(2,file=''//trim(Path)//'',status='old')
do i=1,13 read (2,*)
enddo
read(2,'(a9,i4)') m1,m2
do i=1,m2 read (2 ,*) station(i),lon(i),lat(i),hig(i),rain(i)
enddo
open(unit=23, file="d:\ssdat\2012072002.dat",form='binary')
nlev=1
nflag=1
tim=0.0
do i=1,284
sta(i)=char(i)
write(23 )sta(i),lat(i),lon(i),tim,nlev,nflag
write(23)rain(i)
enddo
nlev=0
nflag=0
write(23 )sta(1),lat(1),lon(1),tim,nlev,nflag
close(23)
close(2)
endif
goto 10
20 close(1)
end program listfile
subroutine ListToFile(fPath,outPut)
character*(*),InTent(In):: fPath,outPut
character*100 CMD
CMD="dir /a-d/b/s "//trim(fPath)//" >"//trim(outPut)
call SYSTEM(CMD)
endsubroutine 展开
character*100 fPath
character*200 path
character*7 outPut
parameter(n=512)
integer i
character*8 sta(n)
integer nlev,nflag
integer hig(n),station(n)
real lat(n),lon(n),rain(n)
integer m2
character*9 m1
fPath="*.000"outPut="dir.txt"
call ListToFile(fPath,outPut)
open(1,file='dir.txt',status='old')
10 continue
read(1,*,end=20)path
!print*,index(Path,"dir.txt")
if(index(Path,"dir.txt")==0)then
!print*,path
open(2,file=''//trim(Path)//'',status='old')
do i=1,13 read (2,*)
enddo
read(2,'(a9,i4)') m1,m2
do i=1,m2 read (2 ,*) station(i),lon(i),lat(i),hig(i),rain(i)
enddo
open(unit=23, file="d:\ssdat\2012072002.dat",form='binary')
nlev=1
nflag=1
tim=0.0
do i=1,284
sta(i)=char(i)
write(23 )sta(i),lat(i),lon(i),tim,nlev,nflag
write(23)rain(i)
enddo
nlev=0
nflag=0
write(23 )sta(1),lat(1),lon(1),tim,nlev,nflag
close(23)
close(2)
endif
goto 10
20 close(1)
end program listfile
subroutine ListToFile(fPath,outPut)
character*(*),InTent(In):: fPath,outPut
character*100 CMD
CMD="dir /a-d/b/s "//trim(fPath)//" >"//trim(outPut)
call SYSTEM(CMD)
endsubroutine 展开
1个回答
展开全部
关于 Fortran 批处理文件。有多种方法,他们各有其适用性。
1.如果文件名是有一定规律的。
a. 那么在程序里按照规律构建文件名(字符串)。Open 时给予该字符串,作为文件名。
2.如果文件名没有规律。
b. 可以使用 System 语句,调用 dir 命令,把所有文件名写入某文件。然后读取该文件,每读一行,获得一个文件名,Open 处理一次。
这就是你代码里的方法。
c. 如果你使用的是 Visual Fortran 系列编译器,该编译器为你提供了 GetFileInfoQQ 函数,可以实现文件循环。
d. 如果你的编译器没有 GetFileInfoQQ 函数,但可以使用 Windows API 函数接口,那么 windows 为你提供了 FindFileFirst 和 FindFileNext 两个函数用来穷举文件。
我个人比较不喜欢 b 方法。
其中,a 方法通用性最好。但它要求文件名是有一定规律的。(比如 201101.txt 到 201109.txt ,是有规律的)
c 方法只适合于 Visual Fortran 编译器
d 方法适用于几乎所有 windows 平台编译器。
如果你对哪个方法有兴趣,请追问我。
1.如果文件名是有一定规律的。
a. 那么在程序里按照规律构建文件名(字符串)。Open 时给予该字符串,作为文件名。
2.如果文件名没有规律。
b. 可以使用 System 语句,调用 dir 命令,把所有文件名写入某文件。然后读取该文件,每读一行,获得一个文件名,Open 处理一次。
这就是你代码里的方法。
c. 如果你使用的是 Visual Fortran 系列编译器,该编译器为你提供了 GetFileInfoQQ 函数,可以实现文件循环。
d. 如果你的编译器没有 GetFileInfoQQ 函数,但可以使用 Windows API 函数接口,那么 windows 为你提供了 FindFileFirst 和 FindFileNext 两个函数用来穷举文件。
我个人比较不喜欢 b 方法。
其中,a 方法通用性最好。但它要求文件名是有一定规律的。(比如 201101.txt 到 201109.txt ,是有规律的)
c 方法只适合于 Visual Fortran 编译器
d 方法适用于几乎所有 windows 平台编译器。
如果你对哪个方法有兴趣,请追问我。
追问
哈哈! 老朋友! 好详细! 我是个新手,我程序里面的批处理方法都是找的现成的程序改了改,都不是很明白它的意思。 就感觉应该把这个open(unit=23, file="d:\ssdat\2012072002.dat",form='binary')里面用啥命令改改就行,完全是感觉,哈哈! 应该不会这么简单,不知道应该怎么弄呢? 用b方法
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询