Nächste Seite: Wahrheitswerte (BOOLEAN) Aufwärts: Zeichenketten Vorherige Seite: Zeichenkettenverkettung:

####
Sonderzeichen in konstanten Zeichenketten:

bietet ähnlich zu ANSI-C die Möglichkeit, innerhalb von konstanten Zeichenketten Sonderzeichen und Steuercodes anzugeben. Hierdurch ist es möglich, jedes Zeichen von `CHAR(0)` bis `CHAR(255)` zu erreichen.

Einleitendes Zeichen ist immer der Backslash ,,`\```. Direkt daran anschliessend folgen bestimmte Zeichen oder Kombinationen, die den Wert des Zeichens bestimmen (Tabelle 5.3). Der Backslash selbst wird als ,,`\\``` angegeben. Alle in der Tabelle nicht vermerkten Zeichen nach ,,`\``` ergeben eine Fehlermeldung.

Tabelle 5.3: Sonderzeichen in Zeichenketten-Konstanten.
Kombination | Zeichen | Dezimal | Hex | Oktal
`\o` | ASCII.nul | 0 | 00H | 000B
`\b` | ASCII.bs | 8 | 08H | 010B
`\e` | ASCII.esc | 27 | 1BH | 033B
`\f` | ASCII.ff | 12 | 0CH | 014B
`\n` | ASCII.eol | 10 | 0AH | 012B
`\r` | ASCII.cr | 13 | 0DH | 015B
`\t` | ASCII.tab | 9 | 09H | 011B
`\[` | ASCII.csi | 155 | 9BH | 233B
`\"` | `'"'` | 34 | 22H | 042B
`\'` | `"'"` | 39 | 27H | 047B
`\\` | `"\"` | 92 | 5CH | 134B
`\`x12 | CHAR(12H) | 12 = Zweistellige Hexzahl
|  | (gross oder klein)
`\`123 | 123C | 123 = Dreistellige Oktalzahl

Zu den Sonderzeichen noch einige Anmerkungen und Tips:

- Die Angabe der Sonderzeichen ist teilweise redundant. Ein Zeilenvorschub (`CHAR(10)`) lässt sich z.B. durch ,,`\n```, ,,`\x0a```, ,,`\x0A``` oder als ,,`\012``` angeben.
- ,,`\o``` liefert `ASCII.nul`. Dieses Zeichen dient aber auch gleichzeitig als Ende-Kennung eines Strings. Der Compiler selbst kümmert sich beim Einlesen von Konstanten nicht darum, da er die Länge der Konstanten intern vermerkt. Alle Standard- und Bibliotheks-Prozeduren hingegen kennen die Länge nicht und sehen dieses Zeichen als Ende an. Die Anweisung

  wird also nur ,,`Eis``` ausgeben, da die Zeichenkette scheinbar mit dem Nullzeichen endet.
- Das Zeichen ,,`\``` muss bei (standardmässig) eingeschalteter Option nun beispielsweise in einer `CASE`-Anweisung als ,,`\\``` geschrieben werden, sonst wird das abschliessende Hochkomma als Sonderzeichen behandelt und die Zeichenkette endet erst am Zeilenende (mit einer Fehlermeldung).

          CASE char OF
          "\o": WriteInt(0,3); |
          "\\": WriteInt(92,3); |
          "x" : WriteInt(120,3);

- BString-Strukturen5.4, die Sie vielleicht von PASCAL her kennen, lassen sich leicht erstellen:

        "\x03DF0"
        "\002AB"

- Sogar komplett initialisierte, konstante `RECORD`s kann man erstellen. Die Daten dürfen aber während des Programmlaufs nicht verändert werden, da Zeichenketten-Konstanten im Code-Bereich liegen:

        VAR
          ldb:POINTER TO RECORD
                len:LONGINT;
                name:ARRAY[0..1000] OF CHAR
              END;
        ldb:=ADR("\o\o\o\011_LinkerDB\o\o\o");

- Zeichenketten, die beide Arten von Anführungszeichen enthalten:

        WriteString("\"'Hallo', sagte er\", sagte sie.");

  ergibt die Ausgabe

        "'Hallo', sagte er", sagte sie.

- Eine komplette Alert-Message:

        "\o\xa0\x11Guru Medi\o\001\o\xAc\x1Ctation\o\o"
        -->  Guru Medi
              tation

Nächste Seite: Wahrheitswerte (BOOLEAN) Aufwärts: Zeichenketten Vorherige Seite: Zeichenkettenverkettung: