在不知道长度的情况下读取 CHARACTER 字符串

Read CHARACTER string without knowing the length

我必须在我的 Fortran 77 程序中读取输入数据。看起来如下

FILENAME PATH

temperature  ./Data

然后在 Fortran 代码中我按以下步骤进行

CHARACTER*8 FILENAME,PATH

READ(5,'(A80)') CARDIN 

READ(5,*) FILENAME,PATH

但问题是我事先不知道FILENAMEPATH的长度。那么如果用户没有给出不正好是 8 的名字呢?你知道我该如何解决这个问题吗?

我不完全确定你想做什么,但你可以使用 TRIM 到 "cut" 白葡萄酒 space:

      Program TEST
      CHARACTER*50 FILENAME,PATH

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

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)