2013-04-22 264 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,如果您的編譯器實現它,您也可能會感興趣。