输出格式的字符串修剪

时间:2018-01-03 01:53:13

标签: fortran gfortran

这是我的代码:

Program String_Triming

Implicit none

Open(15, File = 'Output.txt')

Write(15,'(A,1x,"j",1x,A)') Ispis(20.45),Ispis(20.45)
Write(15,'(A,1x,"j",1x,A)') Ispis(-20.45),Ispis(-20.45)

Close(15)

Contains

Function Ispis ( Deg ) result ( Str )

  Real,intent(in)::Deg
  Character(len=16):: Str

  If ( Deg > 0 ) then

     Write(Str,'(F0.3)') 1000.0 + Deg
     Str = Str(2:)

     Else

     Write(Str,'(F8.3)') 1000.0 + abs(Deg)
     Write(Str,'("-",A)') Str(3:)

  End If

End Function Ispis

End program String_Triming

Output.txt文件的内容是:

020.450          j 020.450         
-20.450          j -20.450

我想从这段代码得到的结果是:

020.450 j 020.450         
-20.450 j -20.450

我如何得到这个结果?有没有办法将Str的长度缩短为Len=8 020.450的长度?

2 个答案:

答案 0 :(得分:0)

目前还不是很清楚你想要什么。如果您只想从输出文件中删除空格,为什么不通过sed运行它而不是编写Fortran程序:

$ cat Output.txt 
020.450          j 020.450
-20.450          j -20.450
$ sed -r 's/ +/ /g' Output.txt 
020.450 j 020.450
-20.450 j -20.450

如果你想首先产生这样的输出,你可以用整数格式“覆盖”str的前三个字符。像这样:

function Ispis(Deg) result(Str)
    real, intent(in) :: Deg
    character(len=7) :: Str
    write(Str, '(F7.3)') Deg
    if ( Deg < 0 ) then
        write(Str(:3), '(I3.2)') int(Deg)
    else
        write(Str(:3), '(I3.3)') int(Deg)
    end if
end function Ispis

注意:020.450的长度为7,而不是8。

答案 1 :(得分:0)

这是获得想要结果的解决方案:

range