这是我的代码:
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
的长度?
答案 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