PROGRAM Get_Matrix1 CHARACTER Line*400 DIMENSION Num(7) INTEGER Iph, i c OPEN (1, 'mo.da1') c OPEN (2, 'mo.dat') OPEN (1, 'w.da1') OPEN (2, 'w.dat') READ (1, '(A)', END = 10) Line WRITE (2, '(A,20X,A)') Line(1:12), CHARNB(Line(13:)) DO DO i = 1, 7 Num(i) = 0 END DO Iph = 1 READ (1, '(A)', END = 10) Line i = 1 DO WHILE (Line(i:i) .NE. ' ' .AND. i .LE. 12) IF (Line(i:i) .EQ. 'O') THEN IF (Line(i+1:i+1).GE.'0' .AND. Line(i+1:i+1).LE.'9') THEN IF (Line(i+2:i+2).GE.'0' .AND. Line(i+2:i+2).LE.'9') THEN i = i + 1 READ (Line(i:i+1), '(I2)') tmp i = i + 1 ELSE i = i + 1 READ (Line(i:i), '(I1)') tmp END IF Num(2) = Num(2) + tmp ELSE Num(2) = Num(2) + 1 END IF ELSE IF (Line(i:i) .EQ. 'H') THEN IF (Line(i+1:i+1).GE.'0' .AND. Line(i+1:i+1).LE.'9') THEN i = i + 1 READ (Line(i:i), '(I1)') tmp Num(3) = Num(3) + tmp ELSE Num(3) = Num(3) + 1 END IF ELSE IF (Line(i:i) .EQ. 'N') THEN IF (Line(i+1:i+1).GE.'0' .AND. Line(i+1:i+1).LE.'9') THEN i = i + 1 READ (Line(i:i), '(I1)') tmp Num(4) = Num(4) + tmp ELSE Num(4) = Num(4) + 1 END IF ELSE IF (Line(i:i) .EQ. 'C') THEN IF (Line(i+1:i+1).GE.'0' .AND. Line(i+1:i+1).LE.'9') THEN IF (Line(i+2:i+2).GE.'0' .AND. Line(i+2:i+2).LE.'9') THEN i = i + 1 READ (Line(i:i+1), '(I2)') tmp i = i + 1 ELSE i = i + 1 READ (Line(i:i), '(I1)') tmp END IF Num(5) = Num(5) + tmp ELSE Num(5) = Num(5) + 1 END IF ELSE IF (Line(i:i) .EQ. 'W') THEN c ELSE IF (Line(i:i+1) .EQ. 'Mo') THEN c i = i + 1 IF (Line(i+1:i+1).GE.'0' .AND. Line(i+1:i+1).LE.'9') THEN i = i + 1 READ (Line(i:i), '(I1)') tmp Num(6) = Num(6) + tmp ELSE Num(6) = Num(6) + 1 END IF ELSE IF (Line(i:i) .EQ. 'K') THEN IF (Line(i+1:i+1).GE.'0' .AND. Line(i+1:i+1).LE.'9') THEN i = i + 1 READ (Line(i:i), '(I1)') tmp Num(7) = Num(7) + tmp ELSE Num(7) = Num(7) + 1 END IF ELSE IF (Line(i:i) .EQ. '+') THEN Num(1) = -1 GO TO 5 ELSE IF (Line(i:i) .EQ. '-' .OR. Line(i:i) .EQ. 'e') THEN Num(1) = 1 GO TO 5 ELSE IF (Line(i:i) .EQ. '[') THEN Iph = 0 GO TO 5 ELSE PRINT, 'Wrong formula ', Line(1:12) GO TO 10 END IF i = i + 1 END DO 5 WRITE (2, '(A,1X,7I2,I4,1X,A)') Line(1:12), Num, Iph, * CHARNB(Line(13:)) END DO 10 CLOSE (1) CLOSE (2) END