|
Mehrere Wahrheiten gibt es ja eigentlich nicht, sondern immer nur eine. Allerdings gibt es eine ganze Reihe verschiedener Möglichkeiten, eine Wahrheit auszudrücken. natürlich ist hier nicht die Rede von irgendwelchen philosophischen Wahrheiten, sondern von logischen "Wahrheiten", von Zuständen, im logischen Sinne "wahr" oder "falsch" sind oder als solche betrachtet werden sollen. Das erste Bezeichnungspaar in unserer Sprache haben wir nun auch schon genannt, nämlich "wahr/falsch". Weitere Bezeichnungspaare wären etwa "ja/nein", "an/aus", "ein/aus", "geschlossen/offen" und dergleichen mehr. Und da es von solchen Bezeichnungspaaren in jeder Sprache eine ganze Reihe gibt, ist es eigentlich nicht verwunderlich, dass Visual Basic neben seinem gewissermaßen muttersprachlichen "true/false" nur noch das jeweilige landessprachliches Paar kennen will. Wenn Sie also irgendein anderes Bezeichnungspaar verwenden möchten, können Sie nicht auf die VB-Konvertierungs-Funktionen CStr und CBool zurückgreifen, sondern benötigen eigene Funktionen.
Im einfachsten Fall deklarieren Sie ein entsprechendes String-Variablen-Paar:
Public SFalse As String
Public STrue As String
und dazu zwei Funktionen, für jede Konvertierungs-Richtung eine:
Public Function CBoolS(BoolValue As Boolean) As String
Select Case BoolValue
Case False
CBoolS = SFalse
Case True
CBoolS = STrue
End Select
End Function
Public Function CSBool(BoolStr As String) As Boolean
Select Case LCase$(BoolStr)
Case LCase$(SFalse)
CSBool = SFalse
Case LCase$(STrue)
CSBool = True
Case Else
Err.Raise 5
End Select
End Function
Irgendwie ist das aber nicht sonderlich spannend und kaum einen Artikel wert, finden Sie nicht auch? Interessanter wäre es vielleicht, wenn die Funktion, die einen "Wahrheits"-String entgegen nimmt, so tolerant wäre, eine ganze Reihe an möglichen Bezeichnern, und wenn ebenfalls möglich, auch nur deren Anfangsbuchstaben, zu verstehen und "wahrheitsgemäß" zu interpretieren.
Kein Problem, meinen Sie? Einfach ein Array oder eine Collection aus den möglichen Bezeichnern anlegen und in einer Schleife durchlaufen. Ist der gegebene Bezeichner darunter, hat man den Treffer. Ok, so weit so gut - allerdings brauchen Sie zwei Arrays bzw. Collections - eines für die "Wahr"-Bezeichner, und eines für die "Falsch"-Bezeichner, die im Prinzip immer beide durchsucht werden müssten.
Anders herum gedacht geht es jedoch ein wenig eleganter: Sie stopfen den zu einem Bezeichner gehörenden Wahrheitswert selbst in eine Collection hinein, und verwenden den Bezeichner lediglich als Schlüssel. Sie brauchen nicht zwischen "Wahr"- und "Falsch"-Bezeichnern zu unterscheiden - es können letztlich beliebig viele True- und False-Werte abgelegt werden. Zur Prüfung, um welchen Wahrheitswert es sich bei einem Bezeichner handelt, bzw. ob es sich überhaupt um einen gültigen Bezeichner handelt, versuchen Sie einfach, einen Wert unter dem Bezeichner als Schlüssel aus der Collection auszulesen. Existiert der Schlüssel, erhalten Sie den betreffenden Wahrheitswert, also True oder False, zurück. Existiert er nicht, wird ein Laufzeitfehler ausgelöst, den Sie abfangen und gegebenenfalls als indifferenten, neutralen, nicht initialisierten Wert usw. interpretieren können.
Private mBoolStrings As Collection
Public Function SBool(Str As String) As Boolean
If mBoolStrings Is Nothing Then
zInit
End If
On Error Resume Next
SBool = mBoolStrings(LCase$(Str))
If Err.Number Then
On Error GoTo 0
Err.Raise 5
End If
End Function
Private Sub zInit()
Set mBoolStrings = New Collection
With mBoolStrings
.Add True, "y"
.Add True, "1"
.Add True, "t"
.Add True, "yes"
.Add True, "-1"
.Add True, "true"
.Add True, "on"
.Add True, "ok"
.Add False, "n"
.Add False, "0"
.Add False, "f"
.Add False, "no"
.Add False, "false"
.Add False, "off"
.Add False, "cancel"
.Add True, "j"
.Add True, "w"
.Add True, "ja"
.Add True, "wahr"
.Add True, "ein"
.Add True, "an"
.Add True, "weiter"
.Add False, "nein"
.Add False, "falsch"
.Add False, "aus"
.Add False, "abbrechen"
End With
End Sub
Mit den Prozeduren Add und Remove können Sie jederzeit weitere Bezeichner hinzufügen bzw. wieder entfernen. Natürlich können Sie auch die vordefinierte Initialisierung beliebig Ihren (Sprach-)Bedürfnissen anpassen.
Public Sub Add(Str As String, ByVal BoolValue As Boolean)
If mBoolStrings Is Nothing Then
zInit
End If
On Error Resume Next
mBoolStrings.Add BoolValue, Str
End Sub
Public Sub Clear()
Set mBoolStrings = Nothing
End Sub
Public Sub Remove(Str As String)
On Error Resume Next
mBoolStrings.Remove Str
End Sub
|