Programmiersprache Pascal

Unterprogramme zur Arbeit mit Zeichenketten

Standard Pascal

Es wird keine Unterstützung zur Arbeit mit Zeichenketten geboten.

Extended Pascal

Ermittlung der Länge einer Zeichenkette

  laenge := Length(s);          { VAR laenge : INTEGER;
                                      s : STRING(kapazitaet); }
Length(s) liefert die Anzahl der belegten Zeichen in s. Dies ist zu unterscheiden von der Kapazität kapazitaet der Zeichenkette s.
Die Kapazität kann mittels s.capacity abgefragt werden.
Es gilt stets Length(s) <= s.capacity

Ermittlung der Lage einer Zeichenkette in einer anderen

  position := Index(s1, s2);    { VAR position : INTEGER; 
                                      s1 : STRING(kapazitaet1);
                                      s2 : STRING(kapazitaet2); }
Es wird die Position ermittelt, ab der die Zeichenkette s2 (erstmalig) in der Zeichenkette s1 vollständig enthalten ist.
Die Funktion liefert 0 zurück, falls s2 nicht in s1 enthalten ist.

Extraktion einer Teilzeichenkette

  substring := Substr(s, position, laenge);
                                 { VAR position, laenge : INTEGER;
                                       s : STRING(kapazitaet1);
                                       substring : STRING(kapazitaet2); }
  substring := Substr(s, position);
Die Funktion liefert die Teilzeichenkette von s, die mit dem position-ten Zeichen beginnt.
In der ersten Variante werden laenge Zeichen extrahiert, in der zweiten Variante werden alle Zeichen ab der angegebenen Position extrahiert.
Gilt position+laenge-1 > Lengt(s), so führt dies im allgemeinen zu einem Laufzeitfehler.

Bemerkung:
Substr(s, position, laenge) entspricht s[position..position+laenge-1].

Entfernen abschließender Leerzeichen aus einer Zeichenkette

  s2 := Trim(s1);               { VAR s1, s2 : STRING(...); }
Beispiel:
  PROGRAM trimmen(OUTPUT);
  VAR s1, s2 : STRING(15);
  BEGIN
    s1 := ' Trimm mich ';
    Writeln(s1, ' ', Length(s1));
    s2 := Trim(s1);
    Writeln(s2, ' ', Length(s2));
  END.
Achtung: Führende Leerzeichen werden nicht entfernt.

Lexikographischer Vergleich zweier Zeichenketten

  vergleich := Eq(s1, s2);      { VAR vergleich : BOOLEAN;
                                      s1 : STRING(kapazitaet1);
                                      s2 : STRING(kapazitaet2); }
  vergleich := Ne(s1, s2);
  vergleich := Ge(s1, s2);
  vergleich := Gt(s1, s2);
  vergleich := Le(s1, s2);
  vergleich := Lt(s1, s2);
Dabei bedeuten
  Eq   equal               gleich
  Ne   not equal           ungleich
  le   less or equal       kleiner oder gleich
  lt   less then           kleiner als
  ge   greather or equal   größer oder gleich
  gt   greather then       größer als
Beispiel:
  PROGRAM str_fct(OUTPUT);
  VAR s1, s2, s3, s4 : STRING(10);
      l : INTEGER;
  BEGIN
    s1 := 'Otto';
    s2 := 'Ottokar';
    s3 := 'Lotto-Otto';
    s4 := 'tto';
  
    Writeln('Laenge von ', s1, ' : ', Length(s1));
    Writeln('Kapazitaet von ', s1, ' : ', s1.capacity);
  
    Writeln('Position von ', s2, ' in ', s1, ' : ', Index(s1, s2));
    Writeln('Position von ', s1, ' in ', s2, ' : ', Index(s2, s1));
    Writeln('Position von ', s4, ' in ', s3, ' : ', Index(s3, s4));
  
    Writeln('Substring von ', s2, ' : ', Substr(s2, 4, 3));
    Writeln('Substring von ', s2, ' : ', Substr(s2, 4));
    Writeln('Substring von ', s2, ' : ', s2[4..6]);
  
    Writeln(s1, ' =  ', s2, ' : ', Eq(s1, s2));
    Writeln(s1, ' <= ', s2, ' : ', Le(s1, s2));
  END.


P. Böhme, 26.08.1996