Glengamoi (Forum) · AspHeute · .NET Heute (RSS-Suche) · AspxFiles (Wiki) · .NET Blogs

Einführung in Stringoperationen

Geschrieben von: Stefan Gründhammer
Kategorie: ASP Grundlagen

This printed page brought to you by AlphaSierraPapa

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:

FunktionBedeutung der Funktion
LCase()Wandelt den Text in Kleinbuchstaben um
UCase()Wandelt den Text in Großbuchstaben um
Len()Gibt die Länge eines Textes zurück
StrComp()Vergleicht 2 Strings miteinander
Trim()Entfernt Leerzeichen auf beiden Seiten des Textes
LTrim()Entfernt Leerzeichen auf der linken Seite des Textes
RTrim()Entfernt Leerzeichen auf der rechten Seite des Textes

Stringvergleiche, Operatoren

  • =
  • >=
  • <
  • &
  • >
  • +
  • <>
  • <=
  • Umwandeln von Großbuchstaben auf Kleinbuchstaben und umgekehrt

    Oft 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:
    LCase(Zeichenfolge). Die Funktion LCase() wandelt alle Großbuchstaben in Kleinbuchstaben um. Die Kleinbuchstaben werden natürlich nicht noch einmal konvertiert.
    UCase(Zeichenfolge) Die UCase() Funktion konvertiert alle Kleinbuchstaben in Großbuchstaben, für großgeschriebene Buchstaben gilt das selbe wie vorher für die Kleinbuchstaben.

    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 entfernen

    Sie 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 bestimmen

    Beim Ü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-Operatoren

    In 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 Strings

    Neben 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ßbemerkung

    Ich 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.

    This printed page brought to you by AlphaSierraPapa

    Download des Codes

    Klicken Sie hier, um den Download zu starten.
    http://www.aspheute.com/code/20001003.zip

    Verwandte Artikel

    Dynamische Stylesheets
    http:/www.aspheute.com/artikel/20010306.htm
    Eine IP Adresse für mehrere Websites
    http:/www.aspheute.com/artikel/20000801.htm
    Einfache String Operationen
    http:/www.aspheute.com/artikel/20000503.htm
    Stringoperationen, die Zweite
    http:/www.aspheute.com/artikel/20001020.htm
    Strukturierter Aufbau in der ASP-Programmierung
    http:/www.aspheute.com/artikel/20011112.htm

     

    ©2000-2006 AspHeute.com
    Alle Rechte vorbehalten. Der Inhalt dieser Seiten ist urheberrechtlich geschützt.
    Eine Übernahme von Texten (auch nur auszugsweise) oder Graphiken bedarf unserer schriftlichen Zustimmung.