8.3 Zeichenketten

Zeichenketten (Zeichenfolgen, Strings) können dafür benutzt werden, um eine Abfolge von Zeichen oder Binärdaten in einer Variablen abzulegen. Standardmäßig wird Text in Zeichenketten mit der UTF-8-Zeichencodierung gespeichert, was bedeutet, dass bis zu 4 Bytes notwendig sein können, um ein Unicode-Zeichen zu speichern. Zeichenketten werden angegeben, indem man sie mit Anführungs- und Schlusszeichen begrenzt ("). Aufgrund der leichteren Lesbarkeit Ihres Codes sollten Sie im Variablenname am Schluss ein Dollarzeichen $ setzen. So kann man sie leichter von den Zahlenvariablen unterscheiden. Beispielsweise:

 
a$ = "Hello World!"

Natürlich kann das Dollarzeichen auch weggelassen werden:

 
a = "Hello World!"

Aber mit dem Dollarzeichen am Ende ist der Code lesbarer, weil wir wissen, dass a eine Zeichenkette ist.

Sie können Zeichenketten mit dem Operator .. verketten. Der obige Code könnte auch so geschrieben werden:

 
a$ = "Hello" .. " " .. "World!"

Dadurch werden drei Zeichenketten zu einer Zeichenketten zusammengefügt und in a$ abgelegt. Siehe Zeichenketten verketten für Details.

Wenn Ihre Zeichenkette ein Anführungs-/Schlusszeichen enthalten muss, können Sie diesen Escape Code benutzen: \"

 
; Das wird Hello, "Mr. John Doe" ausgeben
DebugPrint("Hello, \"Mr. John Doe\"!")

Escape-Code wird immer nach einem umgekehrten Schrägstrich angegeben (\). Wenn Sie einen umgekehrten Schrägstrich in eine Zeichenkette schreiben müssen, benutzen Sie den umgekehrten Schrägstrich als Escape-Code: (\\). Die folgende Escape-Codes werden von Hollywood unterstützt:

 
\a    lässt den Systempiep/-ton hören
\b    Zeichen löschen links
\f    Seitenvorschub
\n    Neue Zeile
\r    Wagenrücklauf
\t    Horizontaler TAB
\v    Vertikaler TAB
\\    Umgekehrter Schrägstrich/Backslash
\"    Anführungs- oder Schlusszeichen
\'    Apostroph
\?    Fragezeichen
\[    Öffnende Eckige Klammer
\]    Schliessende Eckige Klammer
\xxx  Codepunkt

Die letzte Escape-Sequenz ermöglicht es Ihnen, Zeichen direkt einzufügen, indem Sie einfach ihren Codepunktwert nach dem Backslash angeben. Der Codepunktwert muss in der Dezimal-Notation angegeben werden und kann bis zu drei Ziffern belegen. Nur Latin 1 Codepunkte im Bereich von 0 bis 255 sind hier erlaubt. Jeder Wert größer als 255 wird nicht akzeptiert. Mit dieser Escape-Sequenz können Sie ein Nullzeichen in eine Zeichenkette einfügen:

 
a$ = "Hello\0World"

In vielen Programmiersprachen definiert ein Null-Zeichen das Ende einer Zeichenkette. Hollywood aber erlaubt Ihnen, so viele Null-Zeichen in eine Zeichenkette einzufügen, wie Sie wollen. Alle Befehle der Zeichenkettenbibliothek funktionieren so. Zum Beispiel würde dieser Code 11 zurückgeben:

 
DebugPrint(StrLen("Hello\0World"))

Aber das gilt nicht für Befehle, die Text ausgeben. Das folgende Beispiel wird wegen des Null-Zeichens "Hello" ausgeben:

 
; Dies wird "Hello" ausgeben, weil ein Null-Zeichen das Ende der
; Zeichenkette definiert
DebugPrint("Hello\0World")

Wenn ein Neue-Zeile-Zeichen nach einem umgekehrten Schrägstrich folgt, wird Hollywood auch ein Neue-Zeile-Zeichen in die Zeichenkette einfügen und analysiert die Zeichenkette auf der nächsten Zeile weiter. Z.B. entstehen mit den beiden nächsten Variablendefinitionen die gleiche Zeichenkette:

 
a$ = "Hello\nWorld!"
a$ = "Hello\
World!"

Wenn Sie diese Eigenschaft benutzen wollen, vergewissern Sie sich, dass das Neue-Zeile-Zeichen nach dem umgekehrten Schrägstrich folgt. Es muss kein Leerzeichen/TAB zwischen dem umgekehrten Schrägstrich und dem Neue-Zeile-Zeichen haben.

Wenn Sie mehrere Zeilen Text haben, der in einer Zeichenkette zugewiesen wird, können Sie doppelte Eckige Klammern ([[) und (]]) benutzen:

 
a$ = [[
<HTML>
<HEAD>
<TITLE>My HTML Page</TITLE>
</HEAD>
<BODY>
<A HREF="http://www.airsoftsoftwair.de/" TARGET="_NEW">
http://www.airsoftsoftwair.de/</A>
</BODY>
</HTML>
]]

Damit wird dasselbe erreicht wie mit diesem Code:

 
a$ = "<HTML>\n<HEAD>\n<TITLE>My HTML Page</TITLE>\n</HEAD>\n" ..
     "<BODY>\n<A HREF=\"http://www.airsoftsoftwair.de/\"" ..
     " TARGET=\"_NEW\">http://www.airsoftsoftwair.de/</A>\n" ..
     "</BODY>\n</HTML>\n"

Wie sie sehen können, ist die erste Version weitaus besser lesbar. Deshalb wird bei mehrfachen Zeilen Text empfohlen, die Version mit [[...]] zu benutzen. Folgt nach [[ ein Neue-Zeile-Zeichen, wird dies ignoriert. Das Wagenrücklaufzeichen ('\r') wird nicht in eine solch lange Zeichenkette eingefügt. Jeder Zeilenumbruch wird nur mit dem Neue-Zeile-Zeichen ('\n') dargestellt. Ein weiterer Vorteil ist, dass Sie Anführungs-/Schlusszeichen direkt und ohne Escape-Code zwischen [[...]] verwenden können.

Sie können auch rohe Binärdaten in Zeichenketten speichern. Zum Beispiel kann der Befehl DownloadFile() verwendet werden, um eine Datei direkt in eine Zeichenkette herunterzuladen. Bei der Verwendung von binären Daten innerhalb von Zeichenketten müssen Sie beim Aufrufen von Befehlen der Zeichenkettenbibliothek vorsichtig sein. Befehle dieser Bibliothek erwarten normalerweise gültige UTF-8-Daten innerhalb der Zeichenkette, die an sie übergeben werden. Dies ist nicht der Fall, wenn Sie Zeichenketten als Container für rohe Binärdaten verwenden. Um Zeichenketten mit rohen Binärdaten zu erstellen, die auch mit den Befehlen der Zeichenkettenbibliothek arbeiten, müssen Sie diesen Befehlen explizit mitteilen, die Zeichenkettendaten nicht als UTF-8 zu interpretieren. Dies geschieht durch die Übergabe der Konstante #ENCODING_RAW im optionalen Codierungsparameter, die die meisten Befehle der Zeichenkettenbibliothek akzeptieren. Dann können diese Befehle auch mit Zeichenketten verwendet werden, die rohe Binärdaten enthalten. Siehe Zeichencodierungen für Details.

Schließlich gibt es keine Begrenzung der Zeichenkettenlänge. Zeichenketten können so groß sein, wie es der Systemspeicher zulässt. Wenn Sie jedoch große Datenmengen in einer Zeichenkette speichern, sollten Sie etwas Vorsicht walten lassen und die Zeichenketten auf Nil setzen, wenn Sie sie nicht mehr benötigen. Somit weiss der Speicherbereiniger, dass diese Zeichenkette aus dem Speicher gelöscht werden kann. Betrachten Sie das folgende Beispiel:

 
data$ = DownloadFile("http://www.airsoftsoftwair.de/images/" ..
                     "products/hollywood/47_shot1.jpg")
...machen Sie etwas mit data$...
data$ = Nil

Dadurch wird die Datei unter der angegebenen URL heruntergeladen und als binäre Daten in data$ gespeichert. Nachdem die Binärdaten in data$ verarbeitet wurden, wird data$ auf Nil gesetzt, um dem Speicherbereiniger mitzuteilen, dass er die Daten in data$ aus dem Speicher löschen kann. Dies ist sehr wichtig, da ansonsten Ihr Skript ständig mehr Speicherplatz benötigt.


Navigation zeigen