在FORTRAN中定义文件的路径
在bash中,我可以编写一个简单的脚本,如下所示;在使用环境变量“fileplace”定义文件路径时读取文件夹中文件的内容 我希望通过使用变量定义路径,在FORTRAN 90中实现与上述相同的功能。我之所以想这样做,是因为我的文件夹位置路径很长,我希望在FORTRAN 90中避免使用&和+符号作为长行 我已经尝试过编写简单的FORTRAN 90代码,如下所示,用于测试在FORTRAN中定义文件的路径,fortran,fortran90,fortran77,Fortran,Fortran90,Fortran77,在bash中,我可以编写一个简单的脚本,如下所示;在使用环境变量“fileplace”定义文件路径时读取文件夹中文件的内容 我希望通过使用变量定义路径,在FORTRAN 90中实现与上述相同的功能。我之所以想这样做,是因为我的文件夹位置路径很长,我希望在FORTRAN 90中避免使用&和+符号作为长行 我已经尝试过编写简单的FORTRAN 90代码,如下所示,用于测试 program test_read implicit none open (unit=10, status="old",fil
program test_read
implicit none
open (unit=10, status="old",file="/home/vijay/data1/process-folder1/file1.dat")
read(10,*) junk
write(*,*) junk
stop
end
如果我想避免在FORTRAN代码中使用长路径(/home/vijay/data1/process-folder1/)。
有没有可能做到这一点?如果是,有人能帮助更正此FORTRAN代码吗?提前感谢您的帮助
多谢各位
Vijay您可以像这样使用一些Fortran:
fileplace = "/home/vijay/data1/process-folder1/"
open (unit=10, status="old",file=fileplace//"file1.dat")
注:
/
表示fileplace
,类似于
字符(len=:),可分配::fileplace
Fortran 2003引入了标准过程
GET\u ENVIRONMENT\u VARIABLE
,如果您的编译器实现了它,您可能也会对它感兴趣。Fortran不是处理字符串的好语言,但这仍然是可能的
您需要一个变量,用于存储路径。如果这个路径是一个常量,并且在编译时就已经知道了,那么只需编写
CHARACTER(*), PARAMETER :: fileplace = "/home/vijay/data1/process-folder1/"
然后可以使用打开该文件
OPEN(unit=10, status="old",file=fileplace//"file1.dat")
如果要在执行期间更改路径,则必须为fileplace
设置适当的长度,并在需要使用时进行相应调整:
CHARACTER(100) :: fileplace
WRITE(fileplace,*) "/home/vijay/data1/process-folder1/"
OPEN(unit=10, status="old", file=TRIM(ADJUSTL(fileplace))//"file1.dat")
函数
ADJUSTL()
和TRIM()
将字符串内容向左移动以删除所有前导空格,然后删除所有尾随空格。我的路径如下(/home/vijay/Simulation-Folder-Feb2013/chapter6-lyo-paper1-Vj/TRAJ-malto12per/)。我在序言中使用了(CHARACTER()::fileplace=“/home/vijay/Simulation-Folder-Feb2013/chapter6-lyo-paper1-Vj/TRAJ-malto12per/”)。然后在我输入的代码主体中(OPEN(unit=31,status=“old”,file=fileplace/“maltoLyo12per-reimage-set1.traj”)。但我得到如下错误[CHARACTER()::fileplace=“/home/vijay/Simulation-Folder-Feb2013/chapter6 lyo-1错误:假定字符长度为(1)的实体必须是伪参数或参数]。您对此有何评论吗?谢谢……我忘记了参数
。使用列表定向内部写入来定义具有字符文字常量值的字符变量是不必要的复杂操作。简单的赋值语句会更好(这也允许删除对ADJUSTL的引用)。
CHARACTER(100) :: fileplace
WRITE(fileplace,*) "/home/vijay/data1/process-folder1/"
OPEN(unit=10, status="old", file=TRIM(ADJUSTL(fileplace))//"file1.dat")