Hidrológiai Közlöny 1987 (67. évfolyam)
2-3. szám - Gauzer Balázs: Néhány FORTRAN szubrutin hidrológiai adatok elsődleges feldolgozásához
150 HIDROLÓGIAI! KÖZLÖNY 1987. 67. ÉVFOLYAM, 2—3. SzAM Í5T0RAGE:2 SUBROUTINE NREAD(IR,N,NP) CHARACTER IR(1) DIMENSION NP( 1) C K-M0D(N,256) MAX=N/256 IF(MAX.LE.0) MAX=40 1=0 N=0 JSW=1 C 1 1=1+1 IF(I-K) 2, 2, 100 2 J=ICHAR(IR( I))-48 IF( J) 10, 4, 3 3 IF(J-9) 4, 4, 10 4 GOTO ( 5, 6 ), JSW C 5 J5W = 2 N=N+1 IF(N.GT.MAX) GOTO 15 NP(N)=0 6 IF(NP(N)-3276) 8, 7, 9 7 IF(J-7) 8, 8, 9 8 NP(N)=NP(N)+ 10+J GOTO 1 9 N=-42 GOTO 100 C 10 IF( J + 12) 12, 11, 12 11 N=-N IF(N.EQ. 0) N = -41 GOTO 100 12 GOTO ( 1, 13 ), JSW 13 JSW=1 GOTO 1 15 N=-43 C 100 RETURN END 1. ábra. Az NltEAD szubrutin = — 41 —nem talált numerikus almezőt = — 42 — túlcsordulás egy almezőben (UP/I) 32767) = — 43 — az INSCR karaktersor a megadottnál több numerikus almezőt tartalmaz. NP — A numerikus almezőkből konvertált pozitív egcsz értékeket tartalmazó tömb —OUT— Hívott szubrutin: NINCS. A szubrutin forrásnyelvi listáját az 1. ábrán közöljük. Az BREAD szubrutin Az RREAD szubrutin megkeresi a numerikus almezőket az input karaktersorozatban, és valós számmá konvertálja azokat. A szubrutin csak a következő karaktereket ismeri fel: 012345678 9+—.$ Az összes többi karaktert a numerikus almezők (a beolvasandó számok) közötti elválasztójelként kezeli. Ha a szubrutin $ (dollár) jelet talál az input karaktersorozatban, visszatér a főprogramba. Paraméterek: INSCR —Jelentése megegyezik az NREAD szubrutinnál leírtakkal N — Jelentése megegyezik az NREAD szubrutinnál leírtakkal, kivéve a túlcsordulás ellenőrzését. RP — A numerikus almezőkből konvertált valós értékeket tartalmazó tömb. Hívott szubrutin: NINCS, (lásd: 2. ábra). JSTORAGE:2 SUBROUTINE EREAD(IR,N,R) CHARACTER IR(1) DIMENSION R(1) DATA RMAX /1E37/ C • K=MOD(N,256) MAX-N/256 IF(MAX.LE.0) MAX=40 1=0 N=0 ISFL=1 1 IPFL=1 NFL = 1 2 1=1+1 IF(I-K) 3, 3, 50 3 J = ICHAR(IR( I)) 48 IF(J) 10, 5, 4 4 IF(J-9) 5, 5, 31 5 RJ=FL0AT(J) GOTO ( 6, 7 ), NFL C 6 NFL=2 N=N + 1 IF(N.GT.MAX) GOTO 55 R(N)=0.0 7 GOTO ( 8, 9 ), IPFL Ö IF(R(N).GT.RMAX) GOTO 5/ R(N)=R(N)*10. <-RJ GOTO 2 9 JX=JX-1 R(N)=R(N)+RJ*10.**JX GOTO 2 C 10 IF(J.NE.-2) GOTO 20 GOTO ( 11, 14 ), NFL 11 NFL=2 12 N=N*1 IF(N.GT.MAX) GOTO 55 R(N)=0.0 13 IPFL=2 JX=0 GOTO 2 14 GOTO ( 13, 15 ), IPFL 15 GOTO ( 12, 16 ), ISFL 16 R(N)=-R(N) ISFL=1 GOTO 12 C 20 IF(J.NE.-3) GOTO 30 GOTO ( 21, 22 ), NFL 21 ISFL=2 GOTO 2 22 GOTO ( 24, 23 ), ISFL 23 R(N)=-R(N) 24 ISFL=2 GOTO 1 C 30 IF(J.EQ.-12) GOTO 40 31 GOTO ( 2, 32 ), NFL 32 GOTO ( 1, 33 ) , ISFL 33 ISFL=1 R(N)=-R(N) GOTO 1 40 IF(N) 41, 41, 42 41 N=41 GOTO 45 42 GOTO ( 45, 43 ), NFL 4 3 GOTO ( 45, 44 ), ISFL 44 R(N)=-R(N) 45 N=-N GOTO 100 50 GOTO ( 100, 51 ), NFL 51 GOTO ( 100, 52 ), ISFL 52 R(N)=-R(N) GOTO 100 54 N=-42 GOTO 100 55 N=-43 C 100 RETURN END 2. ábra. Az EliEAD szubrutin