2012-04-04 37 views
0

打開輸出文件我有一段Fortran代碼:使用變量FORTRAN

C -------------------------------------------- 
     CALL READIN_HYD 
     CALL READIN_CONFIG 
     CALL READIN_FORCE 
     CALL READIN_STEPPER 
C -------------------------------------------- 

     OPEN(11,FILE='EVO_0wall.dat') 

,我試圖用我的東西能夠輸入我的輸入來代替硬編碼的文件名(EVO_0wall.dat)參數(全部由子程序readin_hyd等讀取)。

我試圖做這樣的事情:

CHARACTER*30 OUTFILE 

    WRITE(*,*) 'OUTPUT FILE' 
    READ(*,*) OUTFILE 
    WRITE(*,*) 'OUTPUT FILE: ',OUTFILE 

我已經加入到READIN_CONFIG子程序。回來了,我

OPEN(11,FILE=OUTFILE,STATUS='NEW') 

替換主程序,希望它會像以前一樣說同樣的事情,如果在輸入文件我管包含「EVO_0wall.dat」(用單引號)在適當的地點。

如果我運行代碼,所有其他輸入變量被正確讀取,並且數據輸出正確 - 但是,它創建並將輸出放置在一個奇數文件中,沒有擴展名和字符名稱(例如,程度,\「{a}和0)。使用.dat擴展名重命名文件可讓我打開它,並且內部的數據是正確的(編輯:實際上,變量OUTFILE變爲奇數字符函數,如果我試圖簡單地打印它的值,所以我猜它不只是OPEN語句中的錯誤語法)

有沒有某種方法可以讓FORTRAN處理字符串,我是FORTRAN的新手(這是別人的代碼,我正在適應),我不太清楚我錯過了什麼,任何幫助都會很多不勝感激!

謝謝!

+2

您如何獲得將read_hyd中的outfile設置回主例程中的outfile版本的值?對不起,要問的基本知識,但你知道,沒有使用像參數列表或模塊的東西,他們是不同的變量?我的猜測,我強調這是一個猜測,主程序中的outfile是未初始化的 – 2012-04-04 09:14:28

回答

1

這似乎沒問題。下面的閱讀語句應該允許你忽略撇號:

read (*, '(A)') outfile 

什麼OUTFILE產值的「回聲」寫聲明?

0

我的FORTRAN很生鏽,但我認爲{a}可能代表十六進制A,或十進制10,它是換行符。這就是當你讀入OUTFILE名字時你會得到的。

您可能需要修剪的所有空格

1

的OUTFILE作爲替代@MSB的建議,你可以使用trimadjustl,像這樣:

implicit none 
    character*99 :: outf 

    outf='outf.outf' 

    open(1,file=trim(adjustl(outf))) 
    write(1,*)'foobar',42 
    close(1) 

    end 

這裏adjustl確保有沒有領先的空白,並且trim修剪尾隨的空白。這應該工作,只要outf變量只包含合法字符[我會建議使用基本的ASCII]。

請注意,如果我將status='new'添加到open語句中,它將在運行時(至少爲gfortran 4.4.3)失敗,如果文件已存在。如果您確實想確保現有文件未被覆蓋,您首先需要inquire

+0

+1(triml(...))---這應該修復它。 – alexurba 2012-04-05 07:18:15