2016-06-13 4 views
2

次の作業例の入力がist - たとえば "ach_40"の場合、出力は "ach_40.DOC?"です。と "ach_40.IMG"です。どこに "?"から来る?FORTRANの文字列操作:奇妙な振る舞い

コードは次のとおりです。

program test 

    character*8 filin 
    character*12 dummy,file1,file2 
    character*4 :: img = '.IMG', doc='.DOC' 
    integer*4 ls1, ls2, i 

    write(*,*) ' File (without extension): ' 
    read(*,'(a8)') filin 

c first file 

    dummy=filin // doc 

    ls1 = len_trim(dummy) 
    ls2=0 
    do i = 1,ls1 
    if(dummy(i:i).ne.' ') then 
     ls2=ls2+1 
     file1(ls2:ls2) = dummy(i:i) 
    endif 
    enddo 

c  second file 

    dummy=filin // img 

    ls1 = len_trim(dummy) 
    ls2=0 
    do i = 1,ls1 
    if(dummy(i:i).ne.' ') then 
     ls2=ls2+1 
     file2(ls2:ls2) = dummy(i:i) 
    endif 
    enddo 

    write(*,*) file1 
    write(*,*) file2 

    stop 
    end 

おかげで、あなたのヒントのためにたくさん!

+0

以下の点に留意してください。a)Fortranの固定長文字列は、常に同じ固定長を持ちます。 b)変数を定義していない場合は、値は定義されておらず、プログラムのロジックをサンプル入力とともに実行し、「 'file1'の最後の数文字の値は何になると思いますか? " – IanH

答えて

3

file1file2の値を決して設定しないでください。明示的に何かに設定されていない文字は何でもかまいません。あなたは

file1 = '' 
file2 = '' 

として文字列を初期化設定することができ、彼らは何が必要であるスペースで埋められます開始時に


しかし、あなたはおそらくしたい:

file1 = trim(filin) // doc 
file2 = trim(filin) // img 

代わりにその複雑なコードのすべてを。