2016-11-16 102 views
0

我必須在Fortran 77程序中讀取輸入數據。它看起來如下在不知道長度的情況下讀取CHARACTER字符串

FILENAME PATH 

temperature ./Data 

,然後在Fortran代碼我進行如下

CHARACTER*8 FILENAME,PATH 

READ(5,'(A80)') CARDIN 

READ(5,*) FILENAME,PATH 

,但問題是我不知道的FILENAMEPATH提前長度。那麼,如果用戶不提供不完全是8的名字?你有什麼想法我可以解決這個問題嗎?

+3

您真的有使用/受Fortran 77限制的要求嗎? – francescalus

+0

是不幸 – MorganeMaPh

+0

在使用列表控制輸入讀取文件路徑(包含未加引號的斜線)時,請注意[像這樣](https://stackoverflow.com/q/36863608)中的問題。 – francescalus

回答

1

一個能做到這一點的F77,但是這是在風格上更F90 。

INTEGER*4 FUNCTION LengthString(String) 
IMPLICIT NONE 
CHARACTER* String 
INTEGER*4 I 

LengthString = -1 !default is -1 just because. 

DO I=LEN(String), 1, -1 
    IF(String(I:I) .ne. ' ') THEN 
    LengthString = I 
    EXIT 
    ENDIF 
ENDDO 

RETURN 
END FUNCTION LengthString 

而且節目可能是這樣的:

PROGRAM Main 
CHARACTER*80 AA 
INTEGER*4 LenAA 
... 
LenAA = LengthString(AA) 
IF(LenAA .lt. 1) !error out 
... 
WRITE(*,10) LenAA, A(1:LenAA) 
10 FORMAT('AA(',I4,')="',A,'"') 
... 

公開聲明看起來是這樣的:

OPEN(FILE=AA(1:LenAA),... 

和路徑是一樣的交易。

NewLongFile = Path(1:LenPath) // '/' // AA(1:LenAA) 
Len_NewLongFile = LengthString(NewLongFile) 
+1

什麼是反對'len_trim'? – francescalus

+0

我明白你的意思@francescalus!我很久以前就推出了自己的產品...... [筆畫鬍子-n-下巴] – Holmz

+1

公平地說,'len_trim'不是F77(但是之後,也不是'enddo')。 – francescalus

0

我不完全知道你想要做什麼,而是你可以使用TRIM「開刀」的相思空間:

 Program TEST 
     CHARACTER*50 FILENAME,PATH 

     READ(*,*) FILENAME,PATH 
     WRITE(*,*)TRIM(FILENAME),TRIM(PATH) 
     END 
+0

很好的使用TRIM。我通常使用80,128,256或1024.然後用一個單獨的變量來理解長度。即使您也使用TRIM,您將很快找到一個函數來查找字符串的結尾可能很有用。並且可用於各種靈活的字符串輸出處理。 – Holmz

+0

謝謝@PeMa可以工作...我想要做的是寫一個像「閱讀字符串,直到你有一個白色空間」的陳述。 – MorganeMaPh

+1

問題不在於書面,而在於閱讀。這不是一個好的解決方案。 –

相關問題