Einführung in Stringoperationen
Geschrieben von: Stefan Gründhammer Jede Website muß mit Strings arbeiten, und sei es "nur", um Daten vom Benutzer einzulesen und zu validieren. Um eine erfolgreiche Validierung durchzuführen, können Sie auf die vielen Stringbehandlungs-Funktionen in VBScript zurückgreifen. Unter anderem sollten Sie besonders auf die Groß- und Kleinschreibung der Dateinamen achten. Sie verwenden zum Beispiel ein Formular in Ihrer Webseite und wollen die dort eingegebenen Daten nutzen, sei es für Ihre Statistiken oder nur zum Speichern dieser Daten in einer Datenbank. Dann sollten Sie eventuell vorhandene Leerzeichen am Anfang und am Ende jedes Datensatzes entfernen. Oder wie oft haben Sie schon verschiedenste Zeichenketten miteinander vergleichen müssen? Zur Lösung solcher Probleme ohne viel Zeit- und Arbeitsaufwand, werde ich Ihnen in diesem Artikel einige Stringoperationen, sowie die Anwendung von Stringoperatoren erläutern. Auf folgende Befehle (Funktionen) und Operatoren werde ich in diesem Artikel näher eingehen:
Stringvergleiche, Operatoren
Umwandeln von Großbuchstaben auf Kleinbuchstaben und umgekehrtOft ist es nicht zu vermeiden ganze Zeichenketten klein zu schreiben und zwar genau dann, wenn Sie Buchstabenvergleiche machen, oder Strings zum Einfügen in Ihre Datenbank vorbereiten müssen. Als Beispiel könnte man hier das Suchen nach einer bestimmten Folge von Zeichen anführen. Um caseinsensitiv suchen zu können, müssen Sie zuerst alle Zeichen klein schreiben (zu Kleinbuchstaben konvertieren). Dies funktioniert umgekhert mit Großbuchstaben natürlich auch. Ein besseres Beispiel dafür ist zweifellos dieses hier. Sie haben ein Formular und möchten Vor- und Nachname in Ihre Datenbank einfügen. Beide Namen müssen klein geschrieben werden da sonst ein Fehler in Ihrer Datenbank auftreten könnte (nur ein Beispiel). Hier liefere ich Ihnen dazu die passende Funktion. Ich habe hierfür ein einfaches Formular zur Überprüfung von Eingaben verwendet, welches ich etwas ausgeschmückt habe.
1: <% @Language = VBScript %> 2: <% Option Explicit 3: Response.Expires = 0 4: 5: Dim strVorname, strNachname, strFirma, strStadt, strPLZ, intPLZ, strEmailAdresse 6: Dim bError, bErfolg, bPostBack, strError 7: 8: bError = False ' Errorflag 9: strError = "<font color=""Red""<Korrigieren Sie folgende Felder:</font><br>" 10: bPostback = False 11: bErfolg = True 12: 13: 'pruefen ob formular gepostet 14: If 0 < Request.ServerVariables("CONTENT_LENGTH") Then 15: bPostBack = True 16: strVorname = LCase(Trim(Request.Form("Vorname"))) 17: strNachname = UCase(Trim(Request.Form("Nachname"))) ... Für diesen Artikel wird es ab Zeile 16 interessant, denn hier habe ich gleich 2 Befehle kombiniert. Ich beginne von innen heraus. Es handelt sich in diesem Formular um eine Datenübermittlung mit der Post-Methode. Als erstes werden mögliche Leerzeichen durch den Befehl Trim() vom String entfernt, sodaß sich nur noch Buchstaben im String befinden. Und zweitens werden alle Buchstaben, welche noch nicht klein geschrieben sind durch den Befehl LCase() zu Kleinbuchstaben konvertiert (nach dem Ausführen des Formular zu sehen). Die Trim-Funktion wird weiter unten noch genauer besprochen. In Zeile 17 werden wieder die Leerzeichen entfernt, aber diesmal werden die Buchstaben nicht in Kleinbuchstaben, sondern durch den Befehl UCase() in Großbuchstaben konvertiert.
Hier noch einige Details zur Syntax dieser beiden oft verwendeten Funktionen: Jetzt komme ich zur vorhin bereits erwähnten Trim-Funktion mit all ihren Varianten. Diese entfernt überflüssige Leerzeichen, die am Anfang oder am Ende einer Zeichenkette stehen, wie in den folgenden Absätzen erklärt. Leerzeichen entfernenSie haben die Trim-Funktion bereits weiter oben kurz gesehen, um die Erklärung Trim()-Funktion abzurunden beschreibe ich Ihnen hier auch noch die Funktion von LTrim() und RTrim(). Wenn Sie schon einmal mit Formularen zu tun hatten, haben Sie sicher schon bemerkt, daß manche User ihre Angaben in die Eingabefelder nicht so geschrieben haben wie Sie es sich vorgestellt haben. Es wurden z.B. am Anfang 3 Leerzeichen und am Ende 7 Leerzeichen eingegeben; damit kann man nicht wirklich viel anfangen. Um diese Angaben aber dennoch in einer Datenbank verwerten zu können, müssen Sie diese Leerzeichen entfernen. Hierzu gibt es drei Funktionen:
Wollen Sie nur die Leerzeichen auf der linken Seite entfernen, dann verwenden Sie die Funktion LTrim(Zeichenfolge). Diese Funktion liefert Ihnen eine Kopie Ihrer Zeichenkette wobei diese keine Leerzeichen auf der linken Seite enthält. Ich haben in der Zeile 18 meines Formularbeispiels diese Funktion verwendet um Ihnen seine Funktion zu zeigen (hier wäre natürlich Trim() zielführender).
18: strStadt = LTrim(Request.Form("Stadt")) ' Leerzeichen von links weggeschnitten Wenn Sie in Ihrer Datenbank ein Feld mit fester Länge (z.B.200 Zeichen) haben, in dem ein Datensatz mit nur 80 Zeichen gespeichert ist, dann wäre es sinnvoll, wenn Sie die restliche Zeichen (Füllzeichen) wegschneiden könnten. Dies machen Sie am einfachsten mit RTrim(Zeichenfolge). Die Syntax dieser Funktion ist wieder gleich wie die der LTrim() Funktion. In Zeile 20 habe ich von der Email Adresse die Leerzeichen auf der rechten Seite zur Demonstration weggeschnitten (auch in diesem Fall wäre Trim() die geeignetere Variante Leerzeichen zu entfernen).
'Leerzeichen von rechts weggeschnitten 20: strEmailAdresse = RTrim(Request.Form("EmailAdresse")) Wenn Sie nun die Leerzeichen auf beiden Seiten entfernen wollen, dann verwenden Sie die bereits oben angeführte Funktion Trim(Zeichenfolge) Die Länge von Strings bestimmenBeim Überprüfen der Richtigkeit von Eingaben in Formularen kommt man nicht um die Längenbestimmung von Strings herum. Da diese Funktion sehr wichtig für jeden ASP Programmierer ist, sollten Sie sich damit auskennen. Ich zeige im nächsten Listing wieder einen Ausschnitt meines einfachen Formularvalidierungsskripts (formular.asp).
45: ' Emailadresse auf Richtigkeit bei der Eingabe pruefen 46: If 6 > Len(strEmailAdresse) Or 0 = InStr(strEmailAdresse,"@") Or 0 _ = InStrRev(strEmailAdresse,".") or _ 47: 5 <= (Len(strEmailAdresse) - InStrRev(strEmailAdresse,".")) or _ 48: 2 > (Len(strEmailAdresse) - InStrRev(strEmailAdresse,".")) Then 49: bErfolg = False 50: strError = strError & "Email Adresse, " 51: End if In Zeile 46 sehen Sie folgende Funktionen Len(strEmailAdresse), InStr(strEmailAdresse,"@"), InStrRev(strEmailAdresse,"."). Mit Instr oder InstrRev kann man prüfen ob und wo eine Zeichenkette in einer anderen Zeichenkette enthalten ist. Außerdem wird der gesamte Codeblock von einer If-Bedingung eingeschlossen, was aber nicht Thema dieses Artikels ist. 6 > Len(strEmailAdresse) aus Zeile 46 mißt die Länge des Strings strEmailAdresse und vergleicht die Länge mit der Zahl 6, dieser Vergleich liefert True, wenn die Länge des Strings größer als 6 ist. Die Funktion Len(Zeichenfolge) liefert Ihnen die Anzahl an Zeichen der Zeichenfolge. Spezielle Zeichen wie das Steuerzeichen für "Return", oder vbcrlf in VBScript, benötigen den Platz von 2 Zeichen in einer Zeichenkette. Vorsicht beim Eingeben von Zeichenketten: Vergessen Sie nicht diese in Anführungszeichen zu setzen. Sie können aber auch den Variablennamen als Parameter für die Längenbestimmung einsetzen, so wie im Beispiel oben. Verwendung von VBScript-OperatorenIn diesem Abschnitt werde ich mich nur auf die für ASP-Programmierer wichtigsten VBScript-Operatoren beschränken (siehe Auflistung oben). In den Zeilen 46 bis 48 des Scripts formular.asp kommen schon einige der oben angeführten Operatoren vor. Ich werde hier auf alle oben angeführten Operatoren näher eingehen: Zur Erklärung der Operatoren nehme ich den Längenvergleich des oberen Listings 6 > Len(strEmailAdresse)und baue diesen leicht um:
Ergebnis = 6 > Len(strEmailAdresse) ">": Ergebnis ist True wenn die Zahl 6 größer als die Länge der Strings strEmailAdresse ist. Ergebnis ist False wenn 6 kleiner oder gleich der Länge des Strings ist, und ist Null wenn einer der zu vergleichenden Ausdrücke Null ist. Ersetzt man das Zeichen ">" mit den anderen oben angeführten Operatoren so erhält man: "<": Ergebnis ist True wenn 6 kleiner strEmailAdresse ist, False wenn 6 größer gleich strEmailAdresse ist und Null wenn einer der zuvergleichenden Ausdrücke Null ist.
"<>": Ergbnis ist True wenn 6 ungleich strEmailAdresse, False wenn 6 gleich strEmailAdresse und Null wenn einer der zu... Null ist. ">=": Ergebnis ist True wenn 6 größer oder gleich strEmailAdresse ist, False wenn 6 kleiner strEmailAdresse ist und Null... "<=": Ergebnis ist True wenn 6 kleiner oder gleich strEmailAdresse ist, False wenn 6 größer strEmailAdresse ist und Null... "=": Ergebnis ist True wenn 6 gleich strEmailAdresse ist, False wenn 6 ungleich strEmailAdresse ist und Null... Es gibt aber Operatoren bei deren Verwendung sehr aufgepaßt werden muß. Wenn Sie Strings zusammenfügen müssen werden Sie meistens den Operator "&" verwenden. Sie können theoretisch auch einfach das Pluszeichen (+) zum Verbinden zweier Strings einsetzen. Hier müssen Sie aber sehr vorsichtig sein. Aus Sicherheitsgründen sollten Sie immer "&" zum Verbinden von Strings verwenden, den das "+" kann zu einer Addition führen wenn einer der beiden Ausdrücke eine Zahl und kein String ist. Um die Erlärung der VBScript-Operatoren mit einem Schlag beenden zu können kommt hier noch ein kurzes Beispiel. Ich zeige Ihnen wie Sie den Operator "=" noch verwenden können. Speichern Sie vergleich.asp ab, und starten Sie die Datei in Ihrem Browser. Hier ist ein Auszug daraus:
12: <% Dim strText1, strText2 13: strText1 = "Vergleichen von Strings" 14: strText2 = "Vergleichen von strings" 15: If strText1 = strText2 Then 16: Response.Write "<b>SUPER, die Strings erfüllen die gewünschte_ Bedingung</b>" 17: Else 18: Response.Write "<b>SCHADE, die Strings erfüllen nicht die gewünschte_ Bedingung</b>" 19: End If 20: %> Obwohl auf den ersten Blick strText1 und strText2 gleich sind erzeugt diese Schleife eine Fehlermeldung. Aber das ist ja logisch werden nun viele von Ihnen sagen, weil in strText2 das Wort strings klein geschrieben ist. Der Grund für die Ungleichheit der beiden Strings ist, daß die beiden Strings auf Gleichheit der ANSI-Zeichen überprüft werden, was in diesem Beispiel nicht der Fall ist. Darum sollten Sie immer auf die Verwendung von LCase() oder UCase() achten wenn Sie Strings miteinander vergleichen, denn ein "a" ist größer als ein "A". Diese Regel gilt natürlich auch für alle anderen Stringsvergleiche, welche oben angeführt sind. Achtung: Wenn Sie Recordsets oder Strings aus Recordsets vergleichen kann es zu schweren Fehlern kommen und zwar dann wenn Ihnen das Recordset den Wert NULL zurückliefert. Es kommt zu einem Run-Time Error, wenn man einen Wert von NULL als Parameter an Stringfunktionen übergibt, der zur Folge hat, daß die Ausführung des Scripts unterbrochen und eine Fehlermeldung zum User gesendet wird. Dieser Fall tritt dann ein, wenn das Recordset leer ist. Wenn Sie dann einen Vergleich mit einem anderen String machen wollen, müssen Sie einen Leerstring zum Feldwert hinzufügen,daher wird aus der Anweisung strRecord = rs(name) die Anweisung strRecord = ""& strRecord. Wenn das Recordset aus irgendeinem Grund leer sein sollte, wird zwar immer noch NULL zurückgeliefert, aber statt NULL wird ein Leerstring in der Variable gespeichert.
1: <% 2: strRecord = rs("name") 3: 'umwandeln von StrRecord 4: strRecord = ""& strRecord 5: strVergleich = "Hansi" 6: 'vergleichen von strRecord und strVergleich 7: Vergleich = StrComp(strRecord, strVergleich) 8: response.write Vergleich 9: %> Die Funktion StrComp wird im Anschluß noch genauer erklärt. Vergleichen von StringsNeben dem Vergleichen mit Hilfe des "=" Operators gibt es auch noch eine weitere Funktion:
StrComp(Zeichenkette1, Zeichenkette2[, Vergleichsmodus) String1 und String2 werden entweder auf binäre Gleichheit oder Textgleichheit geprüft. Dies können Sie mit dem Vergleichsmodus Parameter entscheiden. Das Vergleichsmodus Parameter kann zwei Werte haben oder ganz weggelassen werden:
Lassen Sie den Vergleichsmodus Parameter weg, dann wird automatisch auf binäre Gleichheit geprüft. Zum besseren Verständnis habe ich natürlich wieder ein kurzes Beispiel geschrieben, speichern Sie vergleichen.asp wie gehabt ab.
1: <% @Language = VBScript %> 2: <% Option Explicit 3: Response.Expires=0 %> 4: <html> 5: <head> 6: <title>vergleichen.asp</title> 7: </head> 8: <body> 9: <h3>Vergleichen eines Strings mit einem anderen</h3> 10: <p>Zum Vergleichen zweier Strings wird der Befehl StrComp() verwendet:</p> 11: <% dim strText1, strText2, strText3, strText4, vergleich1 12: dim vergleich2, vergleich3, vergleich4, vergleich5 13: strText1 = "HALLO" 14: strText2 = "hallo" 15: strText3 = "HALLO" 16: strText4 = "wiedersehen" 17: vergleich1 = StrComp(strText1, strText2, 1) 18: vergleich2 = StrComp(strText1, strText2, 0) 19: vergleich3 = StrComp(strText1, strText3, 1) 20: vergleich4 = StrComp(strText1, strText4, 1) 21: vergleich5 = StrComp(strText1, strText2) 22: %> 23: <b>Das Ergebnis 1 lautet: <% Response.write vergleich1 %></b><br> 24: <b>Das Ergebnis 2 lautet: <% Response.write vergleich2 %></b><br> 25: <b>Das Ergebnis 3 lautet: <% Response.write vergleich3 %></b><br> 26: <b>Das Ergebnis 4 lautet: <% Response.write vergleich4 %></b><br> 27: <b>Das Ergebnis 5 lautet: <% Response.write vergleich5 %></b><br> Es gibt genau vier Werte welche von der StrComp() Funktion zurückgegeben werden:
Ich habe in diesem Beipiel mehrere Vergleiche mit Wörtern gemacht. Wenn Sie vergleichen.asp downgeloadet und gestartet haben, so können Sie mit den Listings selbst experimentieren. SchlußbemerkungIch habe Ihnen in diesem Artikel eine Einführung in Stringoperationen gegeben und diese anhand von Beispielen erklärt, Sie sollten nun in der Lage sein die wichtigsten Funktionen anwenden zu können. Ich habe in diesem Artikel nicht alle Stringoperationen beschrieben die es in der weiten Welt von VBScript gibt. Ich werde Ihnen in einem der nächsten Artikel aber noch eine ganze Reihe von wichtigen Operationen erklären. Mit dieser kleinen Sammlung sollten Sie aber in der Lage sein, die meisten Ihrer Probleme professionell lösen zu können. Download des CodesKlicken Sie hier, um den Download zu starten. Verwandte Artikel
Dynamische Stylesheets Wenn Sie jetzt Fragen haben...Wenn Sie Fragen rund um die in diesem Artikel vorgestellte Technologie haben, dann schauen Sie einfach bei uns in den Community Foren der deutschen .NET Community vorbei. Die Teilnehmer helfen Ihnen gerne, wenn Sie sich zur im Artikel vorgestellten Technologie weiterbilden möchten. Haben Sie Fragen die sich direkt auf den Inhalt des Artikels beziehen, dann schreiben Sie dem Autor! Unsere Autoren freuen sich über Feedback zu ihren Artikeln. Ein einfacher Klick auf die Autor kontaktieren Schaltfläche (weiter unten) und schon haben Sie ein für diesen Artikel personalisiertes Anfrageformular.
Und zu guter Letzt möchten wir Sie bitten, den Artikel zu bewerten. Damit helfen Sie uns, die Qualität der Artikel zu verbessern - und anderen Lesern bei der Auswahl der Artikel, die sie lesen sollten.
©2000-2006 AspHeute.com |