Mit zunehmender Erfahrung im Umgang mit Batchdateien werden Sie wahrscheinlich feststellen, dass Sie Textzeichenfolgen manipulieren müssen. Vielleicht müssen Sie einen Benutzer nach einem Namen oder Kennwort fragen, eine Liste von Dateien verarbeiten oder einen Namen in einer Telefonliste suchen. All dies sind Beispiele für die Verarbeitung von Zeichenketten - die Manipulation von lesbarem Text.

 

TCC enthält mehrere Funktionen, die die Verarbeitung von Zeichenketten erleichtern. So können Sie beispielsweise die  Befehle INPUT, MSGBOX und QUERYBOX für Benutzereingaben, die  Befehle ECHO und ECHOERR, ECHOS und ECHOSERR, SCREEN, SCRPUT und VSCRPUT für Ausgaben und den  Befehl FOR oder die  Funktion @FILEREAD zum Durchsuchen der Zeilen einer Datei  verwenden .  Darüber hinaus  bieten  die Variablenfunktionen eine breite Palette von  Möglichkeiten zur Behandlung von Zeichenketten und Zeichen.

 

Nehmen wir zum Beispiel an, Sie benötigen eine Batch-Datei, die einen Benutzer nach einem Namen fragt, den Namen in einen Vor- und einen Nachnamen aufteilt und dann ein hypothetisches LOGIN-Programm ausführt. LOGIN erwartet die Syntax /F:Vorname /L:Nachname, wobei sowohl der Vor- als auch der Nachname in Großbuchstaben geschrieben werden und keiner der beiden Namen länger als 8 Zeichen ist. Hier ist eine Möglichkeit, eine solche Batch-Datei zu schreiben:

 

@echo off

setlocal

unalias *

input Enter your name (no initials): %%name

 

set first=%@word[0,%name]

set flen=%@len[%first]

set last=%@word[1,%name]

set llen=%@len[%last]

 

iff %flen gt 8 .or. %llen gt 8 then

echo First or last name too long

quit

endiff

 

login /F:%@upper[%first] /L:%@upper[%last]

endlocal

 

Der  Befehl SETLOCAL am Anfang dieser Batch-Datei speichert die Umgebung und die Aliasnamen. Dann  entfernt  der  Befehl UNALIAS * alle vorhandenen Aliase, damit sie das Verhalten der Befehle im Rest der Batch-Datei nicht beeinträchtigen. Der erste Zeilenblock endet mit einem  INPUT-Befehl, der den Benutzer auffordert, einen Namen einzugeben. Die Eingabe des Benutzers wird in der Umgebungsvariablen NAME gespeichert.

 

Der zweite Zeilenblock extrahiert den Vor- und Nachnamen des Benutzers aus der Variablen NAME und berechnet die Länge der beiden Namen. Er speichert den Vor- und Nachnamen zusammen mit der jeweiligen Länge in weiteren Umgebungsvariablen. Beachten Sie, dass die  Funktion @WORD das erste Wort als 0 und nicht als 1 nummeriert.

 

Der  IFF-Befehl im dritten Zeilenblock prüft die Länge des Vor- und Nachnamens. Wenn einer der beiden länger als 8 Zeichen ist, zeigt die Batch-Datei eine Fehlermeldung an und endet. (QUERYBOX kann die Länge des Eingabetextes einfacher mit dem Schalter/L begrenzen. Wir haben oben eine etwas umständlichere Methode verwendet, um die Verwendung von Stringfunktionen in Batchdateien zu demonstrieren.)

 

Im letzten Block schließlich führt die Batch-Datei das Programm LOGIN mit den entsprechenden Parametern aus und stellt dann mit dem Befehl ENDLOCAL die ursprüngliche Umgebung und die Alias-Liste wieder her. Gleichzeitig verwirft ENDLOCAL die temporären Variablen, die die Batchdatei verwendet hat (NAME, FIRST, FLEN usw.).

 

Bei der Verarbeitung von Zeichenketten müssen Sie auch einige häufige Fallen vermeiden. Die größte davon ist der Umgang mit Sonderzeichen.

 

Angenommen, Sie haben eine Stapeldatei mit diesen beiden Befehlen, die einfach eine Zeichenkette annehmen und ausgeben:

 

input Enter a string: %%str

echo %str

 

Diese Zeilen sehen sicher aus, aber was passiert, wenn der Benutzer die Zeichenfolge "some > none" (ohne Anführungszeichen) eingibt? Nachdem die Zeichenkette in die Variable STR eingefügt wurde, wird die zweite Zeile zu

 

echo some > none

 

Das">" ist ein  Umleitungssymbol, d. h. die Zeile gibt die Zeichenkette "some" aus und leitet sie an eine Datei namens NONE weiter - wahrscheinlich nicht das, was Sie erwartet haben. Sie könnten versuchen,  diese Art von Problem durch doppelte Anführungszeichen zu vermeiden, aber das wird nicht ganz funktionieren. Wenn Sie Anführungszeichen verwenden (ECHO `%STR`), gibt der Befehl die vierstellige Zeichenkette %STR aus. Die Namen von Umgebungsvariablen werden nicht expandiert, wenn sie in Anführungszeichen stehen.

 

Wenn Sie doppelte Anführungszeichen verwenden (ECHO "%STR"), wird die vom Benutzer eingegebene Zeichenkette ordnungsgemäß angezeigt, und die doppelten Anführungszeichen werden ebenfalls angezeigt. Mit doppelten Anführungszeichen würde die Ausgabe wie folgt aussehen:

 

"some > none"

 

Wie Sie sich vorstellen können, wird diese Art von Problem noch viel schwieriger, wenn Sie versuchen, Text aus einer Datei zu verarbeiten. Sonderzeichen im Text können in Ihren Stapeldateien für allerlei Verwirrung sorgen. Text, der Anführungszeichen, doppelte Anführungszeichen oder Umleitungssymbole enthält, kann praktisch nicht korrekt verarbeitet werden.

 

Eine Möglichkeit, diese potenziellen Probleme zu umgehen, besteht darin, den  Befehl SETDOS /X zuverwenden , um Umleitungssymbole und andere Sonderzeichen vorübergehend zu deaktivieren. Die obige zweizeilige Stapeldatei würde viel eher zu den erwarteten Ergebnissen führen, wenn sie auf diese Weise umgeschrieben würde:

 

setdos /x-15678

input Enter a string: %%str

echo %str

setdos /x0

 

Die erste Zeile schaltet die Alias-Verarbeitung aus und deaktiviert mehrere Sonderzeichen, darunter das Befehlstrennzeichen und alle Umleitungssymbole. Sobald die Zeichenkette verarbeitet wurde, aktiviert die letzte Zeile wieder die Funktionen, die in der ersten Zeile ausgeschaltet wurden.

 

Wenn Sie erweiterte Funktionen zur Verarbeitung von Zeichenketten benötigen, die über die Möglichkeiten von TCC zur Verfügung stehen, sollten Sie die Sprachen Lua, Perl, Python, REXX oder Ruby verwenden . Unsere Produkte können Lua-, Perl-, Python-, REXX- und Ruby-Programme intern ausführen und unterstützen auch die interne Auswertung einzelner Perl-, Python-, REXX- und Ruby-Ausdrücke.