String-Operationen

Leere Zeichenkette prüfen

Es gibt mehrere Möglichkeiten zu prüfen, ob eine Zeichenkette leer ist. Das Problem im Skripting ist jedoch, dass Variablen keinen festen Typ haben, sondern nur Variant-Datentypen sind. Einige Vorgehensweisen können aber auch hier übernommen werden.

  1. Dim sString
  2.  
  3. sString = ""
  4. 'Möglichkeit 1
  5. If sString = "" Then MsgBox "Leer"
  6. 'Möglichkeit 2
  7. If StrComp(sString, "") = 0 Then MsgBox "Leer"
  8. 'Möglichkeit 3
  9. If Len(sString) = 0 Then MsgBox "Leer"
  10. If Len(sString) > 0 Then MsgBox "Variable enthält Daten"

Die effizientes Variante ist dabei Möglichkeit 3. Hier wird kein Vergleich durchgeführt, sondern nur die Länge, die im internen Variablenkopf gespeichert ist, geprüft. Sie ist sehr schnell.

Zeichenketten vergleichen

Auch hier gibt es verschiedene Möglichkeiten. Hier soll nur die vielseitigste Variante dargestellt werden, die sowohl mit als auch ohne Groß-/Kleinschreibung effektiv ist.

  1. Dim sText
  2.  
  3. sText = "Vergleich"
  4. 'Vergleich unabhängig der Groß-/Kleinschreibung
  5. If StrComp(sText, "vergleich", vbTextCompare) = 0 Then MsgBox "Gleich"
  6. 'Vergleich berücksichtigt Groß-/Kleinschreibung
  7. If StrComp(sText, "Vergleich", vbBinaryCompare) = 0 Then MsgBox "Gleich"

Zeichenketten in Zahlen umwandeln

Der einfachste und schnellste Weg ist das Casting, also das direkte Umwandeln einer Zeichenkette in eine Zahl mittels Operator.

  1. Option Explicit
  2.  
  3. Dim sZahl
  4. Dim dZahl
  5. Dim iZahl
  6. Dim lZahl
  7.  
  8. 'Achtung das Dezimalzeichen ist länderabhängig!
  9. 'In Deutschland in es das Komma
  10. sZahl = "1234,23"
  11.  
  12. If IsNumeric(sZahl) Then
  13. 'Konvertieren nach Double
  14. MsgBox VarName(CDbl(sZahl))
  15. 'Konvertieren nach Single
  16. MsgBox VarName(CSng(sZahl))
  17. 'Konvertieren nach Integer
  18. MsgBox VarName(CInt(sZahl))
  19. 'Konvertieren nach Long
  20. MsgBox VarName(CLng(sZahl))
  21. 'Konvertieren nach Currency
  22. MsgBox VarName(CCur(sZahl))
  23. End If
  24.  
  25. Public Function VarName(vValue)
  26. Select Case VarType(vValue)
  27. Case vbVariant Or vbArray
  28. If UBound(vValue, 1) > -1 Then
  29. VarName = "Array: " & VarName(vValue(0))
  30. Else
  31. VarName = "Array: Variant - Länge 0"
  32. End If
  33. Case Else
  34. VarName = TypeName(vValue)
  35. End Select
  36. End Function

Ländercode (Gebietsschema) berücksichtigen

Als Dezimaltrennzeichen wird je nach Gebietsschema entweder ein Komma (z. B. Deutschland) oder ein Punkt (z. B.englischer Sprachraum, Schweiz, Lichtenstein) verwendet. Das lokale Gebietsschema kann in VBScript mit der Funktion GetLocale ermittelt werden (s. Tabelle der Ländercodes).
Für fehlerfreie Berechnungen ist es daher ggf. erforderlich, bei Zahlenwerten, die in unter einem fremden Gebietsschema erzeugt wurde, dass Trennzeichen den Konventionen des lokalen Systems anzupassen.
Ein Bsp. ist die Verarbeitung von Exif-Werten, denn diese werden grundsätzlich mit einem Punkt als Trennzeichen gespeichert.

VBScript

  1. Wert = FF_GetExifTag("ExposureBiasValue") ' Wert der Belichtungskorrektur auslesen, er ist stets mit Punkt getrennt
  2. Gebietsschema = GetLocale ' Gebietsschema des Systems ermitteln
  3. if Gebietsschema <> 2055 and Gebietsschema <> 5127 Then ' nicht Schweiz oder Lichtenstein, weil dort auch der Punkt gilt
  4. Wert = Replace (Wert, ".", ",") ' Punkt durch Komma ersetzen, damit Round funktioniert
  5. End If
  6. Korrekturwert = Round(Wert, 2) ' jetzt wird die Round erfolgreich ausgeführt

Teilstring löschen

  1. Function DelPartString (Startstring, Delstring)
  2. ' löscht aus der Zeichekette 'Startstring' die Zeichenkette 'Delstring'
  3. ' es wird nur das erste Vorkommen von 'Delstring' berücksichtigt
  4. Dim i
  5. i = InStr (Startstring, Delstring)
  6. if i = 0 then Exit Function
  7. DelPartstring = Left (Startstring, i - 1) & Mid (Startstring, i + Len (Delstring))
  8. End Function

Alternative:

VBScript:

  1. sResult = Replace(sValue, sDelString, "", 1, 1, vbTextCompare)

JScript:

  1. sResult = sValue.replace(sDelString,"");

String um eine bestimmte Zeichenzahl kürzen

  1. Function Cut(p_Str,p_Cnt)
  2. 'schneidet vom String "p_Str" "p_Cnt" Zeichen ab
  3.  
  4. Cut=Left(p_Str,Len(p_Str)-p_Cnt)
  5.  
  6. End Function

Teilstring zwischen Begrenzern herauslösen

  1. Function MidString (String, Suchstring1, Suchstring2)
  2. ' gibt den Teilstring zwischen Suchstring1 und Suchstring2 zurück
  3. ' Bsp.: MidString("123[456]789","[","]") ergibt "456"
  4. MidString = Mid(String, Instr(String,Suchstring1)+1, Instr(String,Suchstring2)-Instr(String, Suchstring1)-1)
  5. End Function

siehe auch Pfad zerlegen