home *** CD-ROM | disk | FTP | other *** search
- (* ------------------------------------------------------ *)
- (* POSITION.INC *)
- (* erweiterte POS - Funktion für Turbo Pascal *)
- (* (c) 1990 Stephan Pietzko & TOOLBOX *)
- (* ------------------------------------------------------ *)
-
-
- (* für Turbo 3.0 ist der TYPE STRING ohne Angabe der *)
- (* Länge nicht zulässig, der Kopf der FUNCTION könnte *)
- (* z.B. wie folgt aussehen: *)
- (* *)
- (* TYPE String_255 = STRING [255]; *)
- (* *)
- (* FUNCTION Position(Nr : INTEGER;
- Substr, S : String_255) : BYTE; *)
-
-
- FUNCTION Position(Nr : INTEGER;
- Substr, S : STRING) : BYTE;
-
- (* Position sucht S nach dem Nr ten Vorkommen von *)
- (* Substr ab. Ist Nr z.B. 2, so wird die Position des 2.*)
- (* Vorkommens ausgegeben. Ist Nr < 0, so wird die Nr te *)
- (* Position von hinten gesucht. Ist Nr = 0, so ist das *)
- (* Funktionsergebnis die Anzahl des Vorkommens von *)
- (* Substr in S. *)
- (* Nur wenn Substr in S mindestens Nr mal vollständig *)
- (* enthalten ist, liefert die Funktion die Position des *)
- (* Zeichens in S zurück, mit dem Substr zum Nr ten mal *)
- (* beginnt. Ansonsten ist das Ergebnis 0. *)
-
- VAR
- i, j : BYTE;
- ii : ARRAY [0..255] of BYTE;
- BEGIN
- j := 0;
- ii[0] := 0;
- REPEAT
- Inc(j); (* für Turbo 3.0 : j := SUCC(j); *)
- i := Pos(Substr, S);
- ii[j] := ii[j-1] + i;
- S := Copy(S, i+1, 255);
- UNTIL i = 0;
- IF Nr = 0 THEN
- Position := j - 1
- ELSE
- IF Abs(Nr) >= j THEN
- Position := 0
- ELSE
- IF Nr < 0 THEN Position := ii[j + Nr]
- ELSE Position := ii[Nr];
- END;
- (* ------------------------------------------------------ *)
- (* Ende von POSITION.INC *)