Vij*_*jay 4 fortran fortran77 fortran90
在bash中,我可以编写一个简单的脚本,如下所示; 在我使用环境变量"fileplace"定义文件的路径时读取文件夹中文件的内容
#!/bin/bash
fileplace="/home/vijay/data1/process-folder1/"
cat $file/file1.dat
Run Code Online (Sandbox Code Playgroud)
我希望通过使用变量定义路径,在FORTRAN 90中实现相同的功能.我想这样做是因为我的文件夹位置路径很长,我想避免在FORTRAN 90中对长行使用&和+符号.
我曾尝试编写如下的简单FORTRAN 90代码进行测试.
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
Run Code Online (Sandbox Code Playgroud)
如果我可以避免在FORTRAN代码中使用长路径(/ home/vijay/data1/process-folder1 /).有没有可能实现这个目标?如果是,任何人都可以帮助纠正这个FORTRAN代码?提前感谢任何帮助.
谢谢
维杰
Ste*_*fan 12
Fortran不是一个使用字符串的好语言,但这仍然是可能的.
您需要一个变量,您可以在其中存储路径.如果此路径是常量并且在编译时已知,则可以简单地编写
CHARACTER(*), PARAMETER :: fileplace = "/home/vijay/data1/process-folder1/"
Run Code Online (Sandbox Code Playgroud)
然后可以打开该文件
OPEN(unit=10, status="old",file=fileplace//"file1.dat")
Run Code Online (Sandbox Code Playgroud)
如果要在执行期间更改路径,则必须为其设置适当的长度fileplace并在需要时进行相应的调整:
CHARACTER(100) :: fileplace
WRITE(fileplace,*) "/home/vijay/data1/process-folder1/"
OPEN(unit=10, status="old", file=TRIM(ADJUSTL(fileplace))//"file1.dat")
Run Code Online (Sandbox Code Playgroud)
函数ADJUSTL()并将TRIM()字符串的内容移动到左侧以删除任何前导空格,然后剪切所有尾随空格.
你可以像这样使用一些Fortran:
fileplace = "/home/vijay/data1/process-folder1/"
open (unit=10, status="old",file=fileplace//"file1.dat")
Run Code Online (Sandbox Code Playgroud)
注意:
//.你必须声明字符变量fileplace,例如
character(len=:), allocatable :: fileplace
应该这样做.
Fortran 2003引入了标准过程GET_ENVIRONMENT_VARIABLE,如果您的编译器实现它,您可能也会感兴趣.