4

在 bash 中,我可以编写如下所示的简单脚本;在我使用环境变量“fileplace”定义文件路径时读取文件夹中文件的内容

#!/bin/bash

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

cat $file/file1.dat

我想通过使用变量定义路径,在 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

如果我想避免在 FORTRAN 代码中使用长路径(/home/vijay/data1/process-folder1/)。有没有可能实现这一目标?如果是,任何人都可以帮助更正此 FORTRAN 代码吗?提前感谢任何帮助。

谢谢

维杰

4

2 回答 2

12

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

于 2013-04-22T08:27:02.400 回答
7

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

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

open (unit=10, status="old",file=fileplace//"file1.dat")

笔记:

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

    character(len=:), allocatable :: fileplace

应该这样做。

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

于 2013-04-22T08:23:48.103 回答