User Tools

Site Tools


k8:k8.3:start

8.3 String operators

For operations with strings, Gambas provides you with only 2 operators. For the comparisons of two strings, you will mainly use the comparison operators in table 8.3.2.1.

8.3.1 Operators

Gambas knows the following operators for operands of type string:

OperatorDescription
String & String Connects two strings to one character string
String &/ String Connects two strings containing file names. A path separator is inserted between the two strings if this is required

Table 8.3.1.1: String operators

Message.Error("Fehler: " & Chr(10) & "The character is not in the input alphabet!") 
If NOT Exist(User.Home &/ "V24T" &/ "v24T.conf") Then …
Path = SettingsP.DefaultDir &/ Application.Name & ".conf" 

Note that in the third example, the last & links two strings to a complete filename (file name and extension such as udpserver.conf).

8.3.2 Comparison of character strings

Of the comparison operators in the following table, the last three are of particular interest because they can be used effectively in many cases by specifying patterns.

Comparison operatorDescription
String = String The comparison is true if two exact string are equal
String == String
String LIKE PatternStringThe system checks whether a string matches a pattern
String BEGINS PatternString The system checks whether a string begins with the pattern
String ENDS PatternString The system checks whether a string ends with the pattern

Table 8.3.2.1: Comparison operators 1 for strings

[1] Dim sZeichenkette As String
[2]   
[3] sZeichenkette = "Gambas"
[4] 
[5] Message.Info(IIF(sZeichenkette = "gambas", "Comparison true.", "Comparison false."))
[6] Message.Info(IIF(sZeichenkette == "gaMBas", "Comparison true.", "Comparison false."))

Comments:

  • The equals sign in line 1 is an assignment operator.
  • In the first comparison IF scharacter string = “gambas” in the 5th line, the equal sign is used as a comparison operator. The comparison provides a false statement.
  • In the 6th line, the comparison IF sstring == “gaMBas” delivers a true statement, because the comparison does NOT take capital and small letters into account.
Comparison operatorDescription
String1 < String2 The comparison is true if string1 is smaller than string2 ist
String1 > String2 The comparison is true if string1 is larger than string2 ist
String1 <= String2 The comparison is true if string1 is less than or equal to string2 ist
String1 >= String2 The comparison is true if string1 is greater than or equal to string2 ist

Table 8.3.2.2: Comparison operators for strings

For example, the comparison operators ⇐ and >= are available in the class app/src/gambas3/.src/Component/CSymbolInfo.class and are used there to determine whether a single character stored in the string sCar belongs to a certain interval A to Z in the ASCII character set.

If (sCar >= "A" AND sCar <= "Z") OR sCar = "." Then ...

For example, if you want to sort character strings with your own procedures, you can use the above-mentioned comparison operators for character strings, as you can see from the following source code:

Public Sub Form_Open()
  FMain.Center
  FMain.Resizable = False
End ' Form_Open()
 
Public Sub btnSort_Click()
  Dim aStringArray As String[]
 
  aStringArray = Split(txaText.Text, "\n")
    SwapSortStrings(aStringArray)
  txaText.Text = aStringArray.Join("\n")
 
End ' btnSort_Click()
 
Private Sub SwapSortStrings(aMatrix As String[])
' Implementation SwapSort algorithm: http://de.wikipedia.org/wiki/Swap-Sort
  Dim i, j, m As Integer
  Dim sTemp As String
 
  i = 0
  While i < aMatrix.Count
    m = 0
    For j = 0 To aMatrix.Count - 1
      If aMatrix[j] < aMatrix[i] Then Inc m ' Comparison of strings
    Next ' j
    If i = m Then
       Inc i
    Else
       sTemp = aMatrix[m]
       aMatrix[m] = aMatrix[i]
       aMatrix[i] = sTemp
    Endif ' i = m?
  Wend
End

Originalliste Sortierte String-Liste

Figures 8.3.2.1 and 8.3.2.2: Sorting strings

A disadvantage of SwapSort: Each item in the list to be sorted may only appear once. The method String[].Sort() does not have this disadvantage and uses the QuickSort algorithm.

8.3.3.3 LIKE operator

bErgebnis = String [NOT] LIKE Muster

The boolean variable bResult gets the value TRUE if the pattern string matches string. If NOT is used, the test is inverted.

The operator is not case-sensitive and the following patterns can be used:

PatternInterpretation
*A number of arbitrary characters
?A single character
[abc]A character from the set in square brackets
[x-y]A character from the interval into square bracket
[^x-y]A character not from the interval into square bracket
spaceAny number of characters with an ASCII code smaller than 32
{aaa, bbb,…. }One of the character strings from the { set } separated by commas.
\x Special characters x have special meaning for the LIKE operator and \x is used to represent such special characters.

Table 8.3.3.3.1: Sample

exampletruthfulness valuedescription
“Gambas” LIKE “G*”TRUEThe gambas string begins with G, which can be followed by any number of characters.
“Gambas” LIKE “G[^Aa]*”FALSEGambas begins with G, which no A or a may follow, leading to the error. The * is ignored.
“Gambas” LIKE “?[Aa]*”TRUEAfter any character that must be followed by an a or A, there are any number of other characters.
sDevice NOT LIKE “dev/ttyUS{B0, B1}“TRUEAssumption: The variable sDevice has the value “dev/ttyUSB2”. No element from the pattern set fits.

Table 8.3.3.3.2: Comparison operators 1 for strings

Please note: LIKE is only valid for ASCII strings. If you are testing against UTF-8 strings, you must use the gb.pcre component.

8.3.4 BEGINS operator

bResult = String [NOT] BEGINS Muster

The boolean variable bResult gets the value TRUE when string begins with the pattern string. If NOT is used, the test is inverted. The BEGINS operator is case-sensitive.

exampletruthfulness valuedescription
“Gambas” BEGINS “Gam”TRUEThe string Gambas begins with the string Gam.
“Gambas” BEGINS “Ham”FALSEGambas does not begin with the character string Ham.
“Hans” NOT BEGINS “Ga”TRUETrue; Hans does NOT start with the string Ga.

Table 8.3.4.1: Examples for the BEGINS operator

8.3.5 ENDS operator

bResult = String [NOT] ENDS Muster

The boolean variable bResult receives the value TRUE if string ends with the pattern string. If NOT is used, the test is inverted. The ENDS operator is case-sensitive.

exampletruthfulness valuedescription
“Gambas” ENDS “bas”TRUEThe string Gambas ends with “bas”.
“Gambas” ENDS “BAS”FALSEThe string Gambas does NOT end on “BAS”.
“Hans” NOT ENDS “ins” TRUEVote; Hans does NOT end up “ins”.

Table 8.3.5.1: Examples for the operator ENDS

Download

8.3 Operatoren für Zeichenketten

Für Operationen mit Zeichenketten stellt Gambas Ihnen nur 2 Operatoren zur Verfügung. Für die Vergleiche von zwei Zeichenketten werden Sie vor allen die Vergleichsoperatoren in der Tabelle 8.3.2.1 verwenden.

8.3.1 Operatoren

Gambas kennt die folgenden Operatoren für Operanden vom Typ Zeichenkette (String):

OperatorBeschreibung
String & String Verbindet zwei Zeichenketten zu einer Zeichenkette
String &/ String Verbindet zwei Zeichenketten, die Dateinamen enthalten. Es wird ein Pfad-Trennzeichen zwischen die beiden Zeichenketten eingefügt, wenn das erforderlich ist

Tabelle 8.3.1.1: Operatoren für Zeichenketten

Message.Error("Fehler: " & Chr(10) & "Zeichen nicht im Eingabe-Alphabet!") 
If NOT Exist(User.Home &/ "V24T" &/ "v24T.conf") Then …
Path = SettingsP.DefaultDir &/ Application.Name & ".conf" 

Beachten Sie, dass im dritten Beispiel das letzte & zwei Zeichenketten zu einem vollständigen Dateinamen (Datei-Name und Extension wie zum Beispiel: udpserver.conf) verbindet.

8.3.2 Vergleich von Zeichenketten

Von den Vergleichsoperatoren in der folgenden Tabelle sind vor allem die letzten drei interessant, weil sie in vielen Fällen durch die Angabe von Mustern effektiv eingesetzt werden können.

VergleichsoperatorBeschreibung
String = String Der Vergleich ist wahr, wenn zwei exakt Zeichenkette gleich sind
String == String Der Vergleich ist wahr, wenn zwei Zeichenketten gleich sind, wobei beim Vergleich die Groß- und Kleinschreibung NICHT berücksichtigt wird
String <> String Der Vergleich ist wahr, wenn zwei Zeichenketten unterschiedlich sind
String LIKE MusterStringEs wird geprüft, ob eine Zeichenkette mit einem Muster übereinstimmt
String BEGINS MusterString Es wird geprüft, ob eine Zeichenkette mit dem Muster beginnt
String ENDS MusterString Es wird geprüft, ob eine Zeichenkette mit dem Muster endet

Tabelle 8.3.2.1: Vergleichsoperatoren 1 für Zeichenketten

[1] Dim sZeichenkette As String
[2]   
[3] sZeichenkette = "Gambas"
[4] 
[5] Message.Info(IIF(sZeichenkette = "gambas", "Vergleich wahr.", "Vergleich falsch."))
[6] Message.Info(IIF(sZeichenkette == "gaMBas", "Vergleich wahr.", "Vergleich falsch."))

Kommentare:

  • Das Gleichheitszeichen in der Zeile 1 ist ein Zuweisungs-Operator.
  • Im ersten Vergleich IF sZeichenkette = “gambas” in der 5. Zeile wird das Gleichheitszeichen als Vergleichsoperator eingesetzt. Der Vergleich liefert eine falsche Aussage.
  • In der 6. Zeile liefert der Vergleich IF sZeichenkette == “gaMBas” eine wahre Aussage, weil beim Vergleich die Groß- und Kleinschreibung NICHT berücksichtigt wird.

Während die Vergleichsoperatoren = und <> häufig eingesetzt werden, finden die folgenden Vergleichsoperatoren relativ selten Verwendung.

VergleichsoperatorBeschreibung
String1 < String2 Der Vergleich ist wahr, wenn Zeichenkette1 kleiner als Zeichenkette2 ist
String1 > String2 Der Vergleich ist wahr, wenn Zeichenkette1 größer als Zeichenkette2 ist
String1 <= String2 Der Vergleich ist wahr, wenn Zeichenkette1 kleiner oder gleich als Zeichenkette2 ist
String1 >= String2 Der Vergleich ist wahr, wenn Zeichenkette1 größer oder gleich als Zeichenkette2 ist

Tabelle 8.3.2.2: Vergleichsoperatoren für Zeichenketten

Die Vergleichsoperatoren ⇐ und >= gibt es zum Beispiel in der Klasse app/src/gambas3/.src/Component/CSymbolInfo.class und wird dort benutzt um festzustellen, ob ein einzelnes Zeichen, das in dem String sCar gespeichert ist, zu einem bestimmten Intervall A bis Z im ASCII-Zeichensatz gehört.

If (sCar >= "A" AND sCar <= "Z") OR sCar = "." Then ...

Wenn Sie zum Beispiel Zeichenketten mit eigenen Prozeduren sortieren wollen, führt das über die o.a. Vergleichsoperatoren für Zeichenketten, wie Sie dem folgenden Quelltext entnehmen können:

Public Sub Form_Open()
  FMain.Center
  FMain.Resizable = False
End ' Form_Open()
 
Public Sub btnSort_Click()
  Dim aStringArray As String[]
 
  aStringArray = Split(txaText.Text, "\n")
    SwapSortStrings(aStringArray)
  txaText.Text = aStringArray.Join("\n")
 
End ' btnSort_Click()
 
Private Sub SwapSortStrings(aMatrix As String[])
' Implementation SwapSort-Algorithmus nach http://de.wikipedia.org/wiki/Swap-Sort
  Dim i, j, m As Integer
  Dim sTemp As String
 
  i = 0
  While i < aMatrix.Count
    m = 0
    For j = 0 To aMatrix.Count - 1
      If aMatrix[j] < aMatrix[i] Then Inc m ' Vergleich von Zeichenketten
    Next ' j
    If i = m Then
       Inc i
    Else
       sTemp = aMatrix[m]
       aMatrix[m] = aMatrix[i]
       aMatrix[i] = sTemp
    Endif ' i = m?
  Wend
End ' SwapSortStrings(...)

OriginallisteSortierte String-Liste

Abbildungen 8.3.2.1 und 8.3.2.2: Sortierung von Zeichenketten

Ein Nachteil von SwapSort: Jedes Element in der zu sortierenden Liste darf nur einmal vorkommen. Die Methode String[].Sort() besitzt diesen Nachteil nicht und benutzt den QuickSort-Algorithmus.

8.3.3 Operator LIKE

bErgebnis = String [NOT] LIKE Muster

Die boolsche Variable bErgebnis erhält den Wert TRUE, wenn die Muster-Zeichenkette auf String passt. Wird NOT verwendet, dann wird der Test invertiert.

Der Operator ist nicht case-sensitive und es können die folgenden Muster verwendet werden:

MusterInterpretation
* Eine Anzahl von beliebigen Zeichen
? Ein einzelnes Zeichen
[abc] Ein Zeichen aus der Menge in den eckigen Klammern
[x-y] Ein Zeichen aus dem Intervall in den eckigen Klammern
[^x-y] Ein Zeichen nicht aus dem Intervall in den eckigen Klammern
space Jede Anzahl von Zeichen mit einem ASCII-Code kleiner als 32
{aaa,bbb,…} Eine der Zeichenketten aus der { Menge }, die durch Komma getrennt werden.
\x Spezielle Zeichen x haben für den Operator LIKE besondere Bedeutung und man nutzt \x, um solche speziellen Zeichen darzustellen.

Tabelle 8.3.3.1: Muster

BeispielWahrheitswertBeschreibung
“Gambas” LIKE “G*”TRUEDer String Gambas beginnt mit G, dem beliebig viele Zeichen folgen (können).
“Gambas” LIKE “G[^Aa]*”FALSEGambas beginnt mit G, dem kein A oder a folgen darf, was zum Fehler führt. Das * wird nicht weiter beachtet.
“Gambas” LIKE ”?[Aa]*”TRUENach einem beliebigen Zeichen, dem ein a oder A folgen muss, stehen beliebig viele andere Zeichen.
sDevice NOT LIKE “dev/ttyUS{B0,B1}“TRUEAnnahme: Die Variable sDevice hat den Wert “dev/ttyUSB2”. Kein Element aus der Muster-Menge passt.

Tabelle 8.3.3.2: Vergleichsoperatoren 1 für Zeichenketten

Bitte beachten Sie: LIKE gilt nur für ASCII-Strings. Wenn Sie gegen UTF-8-Strings testen, müssen Sie die gb.pcre Komponente verwenden.

8.3.4 Operator BEGINS

bResult = String [NOT] BEGINS Muster

Die boolsche Variable bResult erhält den Wert TRUE, wenn String mit der Muster-Zeichenkette beginnt. Wird NOT verwendet, dann wird der Test invertiert. Der Operator BEGINS ist case-sensitive.

BeispielWahrheitswertBeschreibung
“Gambas” BEGINS “Gam”TRUEDie Zeichenkette Gambas beginnt mit der Zeichenkette Gam.
“Gambas” BEGINS “Ham”FALSEGambas beginnt mit nicht mit der Zeichenkette Ham.
“Hans” NOT BEGINS “Ga”TRUEStimmt; Hans beginnt NICHT mit der Zeichenkette Ga.

Tabelle 8.3.4.1: Beispiele für den Operator BEGINS

8.3.5 Operator ENDS

bResult = String [NOT] ENDS Muster

Die boolsche Variable bResult erhält den Wert TRUE, wenn String mit der Muster-Zeichenkette endet. Wird NOT verwendet, dann wird der Test invertiert. Der Operator ENDS ist case-sensitive.

BeispielWahrheitswertBeschreibung
“Gambas” ENDS “bas”TRUEDie Zeichenkette Gambas endet auf bas.
“Gambas” ENDS “BAS”FALSEDie Zeichenkette Gambas endet NICHT auf BAS.
“Hans” NOT ENDS “ins”TRUEStimmt; Hans endet NICHT auf ins.

Tabelle 8.3.5.1: Beispiele für den Operator ENDS

Download

The website uses a temporary session cookie. This technically necessary cookie is deleted when the browser is closed. You can find information on cookies in our privacy policy.
k8/k8.3/start.txt · Last modified: 02.07.2018 (external edit)

Page Tools