2013-04-22 262 views
4

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

#!/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代码?提前感谢任何帮助。

谢谢

维杰

回答

10

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

+0

我的路径是这样的(/ 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)的实体必须是伪参数或PARAMETER]。 ?谢谢 – Vijay 2013-04-22 10:10:30

+0

Sry ...我忘了'PARAMETER'。 – Stefan 2013-04-22 10:31:56

+0

使用列表定向内部写入来定义一个字符常量值的字符变量是不必要的复杂的。一个简单的赋值语句会更好也允许删除对ADJUSTL的引用)。 – IanH 2013-04-22 11:41:45

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,如果您的编译器实现它,您也可能会感兴趣。