2014-07-15 651 views
1

我在FORTRAN中有一個字符串數組,其結果如下:CI- Energies --- th = 89 ph = 120'。我如何從字符串中提取字符'120'並存儲到實際變量中?如何從FORTRAN中的字符串讀取數字數據

該字符串寫入文件'input.DAT'。我已經寫了FORTRAN代碼爲:

implicit real*8(a-h,o-z) 
character(39) line 
open(1,file='input.DAT',status='old') 
read(1,'(A)') line,phi 
write(*,'(A)') line 
write(*,*)phi 
end 

在執行時它顯示:

At line 5 of file string.f (unit = 1, file = 'input.dat') 
Fortran runtime error: End of file 

我給「39」作爲字符數組的維數,因爲有39個字符包括「空格」在直到'120'的字符串。

+0

這個代碼有幾個問題。 ('(A)')行和'read(line(37:)')來替換read(1,'(A)')行,phi'。 F3.0)')phi'。 – Andrey

+4

您的問題表明您對Fortran編程相對陌生。不要學習使用隱式類型,學會使用'隱式無類型'。 –

回答

3

假設您想要的字符串,可以在上等號後閱讀出現的實數使用SCAN內部函數查找該位置,然後從該字符串的其餘部分讀取該編號,如以下程序中所示。

program xreadnum 
implicit none 
integer :: ipos 
integer, parameter :: nlen = 100 
character (len=nlen) :: str 
real :: xx 
str = "results: CI- Energies --- th= 89 ph=120" 
ipos = scan(str,"=",back=.true.) 
print*,"reading real variable from '" // trim(str(1+ipos:)) // "'" 
read (str(1+ipos:),*) xx 
print*,"xx = ",xx 
end program xreadnum 
! gfortran output: 
! reading real variable from '120' 
! xx = 120.000000  
1

要串s轉換爲實數型變量r

READ(s, "(Fw.d)") r 

這裏w是總場寬度和d是數字的小數點後的位數。如果輸入字符串中沒有小數點,則wd的值可能會影響結果,例如,

s = '120' 
READ(s, "(F3.0)") r ! r <-- 120.0 
READ(s, "(F3.1)") r ! r <-- 12.0 

問題的答案的另一部分(如何提取與特定數量的轉換子)強烈依賴於輸入字符串的格式,例如如果所有的字符串是由固定寬度的字段組成,有可能跳過繩的不相干部分:

s = 'a=120' 
READ(s(3:), "(F3.0)") r 
相關問題