65 CHARACTER (LEN=*),
INTENT(IN) :: text
66 INTEGER(mpi),
INTENT(OUT) :: nums
67 REAL(mpd),
INTENT(OUT) :: dnum(*)
70 INTEGER(mpi),
PARAMETER :: ndim=1000
71 INTEGER(mpi),
DIMENSION(2,ndim):: icd
72 CHARACTER (LEN=16) :: keywrd
73 CHARACTER (LEN=1) :: ch
74 REAL(mpd) :: dic(ndim)
76 INTEGER(mpi) :: icdt(ndim)
83 IF(text(1:1) ==
'*')
RETURN
88 IF(lent == 0.AND.(text(i:i) ==
'!'.OR.text(i:i) ==
'%')) lent=i
89 IF(text(i:i) /=
' ') last=i
91 IF(lent == 0) lent=last+1
115 IF(ich >= num.AND.ich <= num+9) ic=5
128 IF(icdt(i) == 5)
THEN
130 DO k=icd(1,i),icd(2,i)
131 dumber=10.0_mpd*dumber+real(ichar(text(k:k))-num,mpd)
139 IF(icdt(i) == 1)
THEN
141 IF(icdt(i-1) == 5.AND.icd(2,i-1)+1 == icd(1,i)) icode=1
142 IF(icdt(i+1) == 5.AND.icd(1,i+1)-1 == icd(2,i)) icode=icode+2
146 ELSE IF(icode == 2)
THEN
147 dic(i)=10.0d0**(icd(1,i+1)-icd(2,i+1)-1)*dic(i+1)
151 ELSE IF(icode == 3)
THEN
152 dic(i-1)=dic(i-1)+ 10.0d0**(icd(1,i+1)-icd(2,i+1)-1)*dic(i+1)
153 icd(2,i-1)=icd(2,i+1)
162 IF(icdt(i) == 6.AND.text(icd(1,i):icd(2,i)) ==
' ') icdt(i)=0
163 IF(icdt(i) /= 0)
THEN
174 IF(icdt(i) == 2.OR.icdt(i) == 3)
THEN
175 IF(icdt(i+1) == 5)
THEN
177 IF(icdt(i) == 3) dic(i+1)=-dic(i+1)
185 IF(icdt(i) == 6.AND.text(icd(1,i):icd(2,i)) ==
' ') icdt(i)=0
186 IF(icdt(i) /= 0)
THEN
197 IF(icdt(i) == 4)
THEN
198 IF(icdt(i-1) == 5.AND.icdt(i+1) == 5)
THEN
199 icd(2,i-1)=icd(2,i+1)
200 dic(i-1)=dic(i-1)*10.0d0**dic(i+1)
209 IF(icdt(i) == 5)
THEN
221 IF(ia == 0.AND.text(i:i) /=
' ') ia=i
222 IF(text(i:i) /=
' ') ib=i
224 IF(ib >= 0) keywrd=text(ia:ib)
289INTEGER(mpi) FUNCTION matint(pat,text,npat,ntext)
305 INTEGER(mpi) :: npatma
307 CHARACTER (LEN=*),
INTENT(IN) :: pat
308 CHARACTER (LEN=*),
INTENT(IN) :: text
309 INTEGER(mpi),
INTENT(OUT) :: npat
310 INTEGER(mpi),
INTENT(OUT) :: ntext
315 INTEGER(mpi) :: id(0:npatma,2)
318 CHARACTER (LEN=26) :: chu
319 CHARACTER (LEN=26) :: chl
320 INTEGER(mpi) :: nj(0:255)
322 DATA chu/
'ABCDEFGHIJKLMNOPQRSTUVWXYZ'/
323 DATA chl/
'abcdefghijklmnopqrstuvwxyz'/
333 nj(ichar(chl(i:i)))=ichar(chu(i:i))
340 IF(text(i:i) /=
' ')
GO TO 10
345 IF(text(i:i) /=
' ') itb=i
351 IF(pat(i:i) /=
' ')
GO TO 20
356 IF(pat(i:i) /=
' ') ipb=i
360 IF(npat > npatma)
THEN
361 WRITE(*,*)
'too long PAT (', pat,
'):', npat,
' >', npatma
362 CALL peend(34,
'Aborted, pattern string too long')
363 stop
'MATINT: string PAT too long! '
375 jc=nj(ichar(text(jt:jt)))
379 ic=nj(ichar(pat(ip:ip)))
380 IF(ic /= jc) ideq=ideq+1
381 id(i,jot)=min(ideq,id(i,3-jot)+1,id(i-1,jot)+1)
integer(mpi) function matint(pat, text, npat, ntext)
Approximate string matching.
subroutine ratext(text, nums, dnum)
Translate text.
subroutine rltext(text, ia, ib, nab)
Analyse text range.
integer(mpi) keyb
end (position) of keyword
integer(mpi) keya
start (position) of keyword