在FORTRAN中定义文件的路径

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()字符串的内容移动到左侧以删除任何前导空格,然后剪切所有尾随空格.


Hig*_*ark 7

你可以像这样使用一些Fortran:

fileplace = "/home/vijay/data1/process-folder1/"

open (unit=10, status="old",file=fileplace//"file1.dat")
Run Code Online (Sandbox Code Playgroud)

注意:

  1. 在Fortran中,字符串连接由运算符表示//.
  2. 你必须声明字符变量fileplace,例如

    character(len=:), allocatable :: fileplace

应该这样做.

Fortran 2003引入了标准过程GET_ENVIRONMENT_VARIABLE,如果您的编译器实现它,您可能也会感兴趣.