需要输入变量参数的程序,如何批量读取并处理不同文件
编译环境为 IVS+IVF对于不需要在命令行中输入参数的Fortran程序,
我采用do循环和open就可以让它重复生成不同的chem.asc文件(完成我所需的工作)
PROGRAM CKINTERP
IMPLICIT NONE
INTEGER MDIM,KDIM,IDIM,MAXTP,MAXSP,MAXTB,LIN,LOUT,LTHRM,LINCK,
&MAXORD,LIWORK,LRWORK,LCWORK
PARAMETER(MDIM=10,KDIM=100,IDIM=500,MAXTP=3,MAXSP=12,MAXTB=10,
&LIN=15,LOUT=16,LTHRM=17,LINCK=25,MAXORD=10,
&LIWORK=40000,LRWORK=40000,LCWORK=10000)
INTEGER IWORK(LIWORK)
DOUBLE PRECISION RWORK(LRWORK)
CHARACTER*16 CWORK(LCWORK)
LOGICAL L(KDIM)
integer i
character*2 filelist
do i=1,3
write(filelist,"(i2)") i
OPEN (LIN,FILE="chem"//trim(adjustl(filelist))//".inp",
& STATUS='UNKNOWN',FORM='FORMATTED')
OPEN (LOUT, FILE="chem"//trim(adjustl(filelist))//".out",
& FORM='FORMATTED', STATUS='UNKNOWN')
OPEN (LTHRM, FILE="therm"//trim(adjustl(filelist))//".dat",
1 FORM='FORMATTED', STATUS='UNKNOWN')
open(LINCK,file="chem"//trim(adjustl(filelist))//".asc",
& FORM='FORMATTED',STATUS='UNKNOWN')
CALL CKINTP (MDIM, KDIM, IDIM, MAXTP, MAXSP, MAXTB,
1 LIN, LOUT, LTHRM, LINCK, MAXORD,
2 LIWORK, IWORK, LRWORK, RWORK, LCWORK, CWORK, L)
但是对于会有需要输入命令行参数的程序,就只能出现运行完成第一个,然后就关闭,运行完成了。
如何让它继续处理第二个chem2.asc 和第三个 chem3.asc?
PARAMETER (LENRWK=100000, LENIWK=100000, LENLWK=200, LENCWK=200,
1 LIN=5, LOUT=6, LREST=14, LSAVE=15, LRCRVR=16,
2 LINKCK=25)
DIMENSION RWORK(LENRWK), IWORK(LENIWK)
CHARACTER CWORK(LENCWK)*16
LOGICAL LWORK(LENLWK)
integer i
character*2 filelist
do i=1,3
write(filelist,"(i2)") i
OPEN (LINKCK, FORM='FORMATTED',STATUS='UNKNOWN',
1 FILE="chem"//trim(adjustl(filelist))//".asc")
OPEN (LREST,FORM='UNFORMATTED',STATUS='UNKNOWN',
1 FILE="rest"//trim(adjustl(filelist))//".bin")
OPEN (LRCRVR, FORM='UNFORMATTED',STATUS='UNKNOWN',
1 FILE="recov"//trim(adjustl(filelist))//".bin")
OPEN (LSAVE,FORM='UNFORMATTED',STATUS='UNKNOWN',
1 FILE="save"//trim(adjustl(filelist))//".bin")
CALL PSR (LIN, LOUT, LINKCK,LREST, LSAVE, LRCRVR, LENLWK,
1 LWORK, LENIWK, IWORK, LENRWK, RWORK, LENCWK, CWORK)
STOP
END
请问应该如何解决这一问题?能够让它重复读取这几个文件并执行?
操作系统的批处理(windows)或 shell(linux)了解一下 http://bbs.fcode.cn/thread-2157-1-1.html vvt 发表于 2019-12-16 21:14
操作系统的批处理(windows)或 shell(linux)了解一下
好的,我了解一下。主要是想在源程序上改改 necrohan 发表于 2019-12-17 08:35
http://bbs.fcode.cn/thread-2157-1-1.html
主要是没找到源程序修改的思路 落月黎明 发表于 2019-12-17 16:05
主要是没找到源程序修改的思路
没太明白你的意思,你在源程序里不是已经用do循环实现了吗?
如果要反复执行,用输入修改参数,直接 do while true ... end 套在输入参数那部分外面不就行了,用负数判断退出循环。 necrohan 发表于 2019-12-17 17:04
没太明白你的意思,你在源程序里不是已经用do循环实现了吗?
如果要反复执行,用输入修改参数,直接 do w ...
我原以为加上do循环以后,它可以实现打开第一个文件,然后输入参数,运行完成。再打开第二个文件,输入参数,运行完成..........
实际上,在打开完第一个文件之后,输入参数,运行完成。就结束了。
对于不用输入参数的程序,它就可以像我原以为的那样。
感谢回复 vvt 发表于 2019-12-16 21:14
操作系统的批处理(windows)或 shell(linux)了解一下
您好,我了解了一下批处理,但是发现出了一些问题,想请您帮忙看一下。
这是我的批处理文件。我的exe程序是需要一个chem.asc文件,所以我将chem.asc文件与exe程序放到了一个文件夹下。 当我运行我的批处理文件时候,它只有当chem.asc文件与批处理文件在一起时,才能运行成功,并在批处理文件所在的文件夹里生成结果。 但我想要实现的是在他们各自的文件夹里运行,不太明白哪里出错了。
@echo off
E:\20191028工作\ChemkinIII\Chemkin\Debug\Console1\Console1\chem1\Console1.exe < E:\20191028工作\ChemkinIII\Chemkin\Debug\Console1\Console1\chem1\1.txt
E:\20191028工作\ChemkinIII\Chemkin\Debug\Console1\Console1\chem2\Console1.exe < E:\20191028工作\ChemkinIII\Chemkin\Debug\Console1\Console1\chem2\1.txt
echo
之后我采用调用2个批处理文件的方式,集成在同一个批处理文件中。如
call 1.bat
call 2.bat
仍然需要chem.asc文件,并生成结果在当前目录下。
请问这应该如何处理? 本帖最后由 pasuka 于 2019-12-19 22:44 编辑
非要绕开shell,那么就定义结构体,自己编写个namelist来实现
01.asc N1 param01 param02 ... paramN1
02.asc N2 param01 ... paramN2
每次主程序读取namelist然后for循环处理 pasuka 发表于 2019-12-19 22:41
非要绕开shell,那么就定义结构体,自己编写个namelist来实现
01.asc N1 param01 param02 ... paramN1
02.a ...
感谢回答,我是菜鸟,我得去查查相关内容学习学习
页:
[1]
2