Gambas: Umwandlung von Variablen


Zurück zu Gambas


Im folgenden werden einige Befehle beschrieben, mit denen man Variablen von einer Formatierung in eine andere umwandeln kann. Wichtig sind vor allem die Befehle Val,Str,Chr,Asc und Int.

val Bearbeiten

Wie man Strings (Textfolgen) mit Val() umwandelt.

Der Befehl Val() wandelt einen String ( = Folge von Asciizeichen) in einen Datentyp um, der dem Inhalt des Strings entspricht.

Wenn der String ausschaut wie eine Fließkommazahl, dann macht Val() eine Fließkommazahl daraus. Val() benutzt die lokale Sprache ihrer Maschine ( hier also deutsch ), die in "locales" festgelegt wurde. Sie können Ihre Einstellung mit folgendem Konsolenbefehl überprüfen:

"locales" oder "echo $LANG".

Auf einer deutschen Maschine erhält man : de_DE@euro Vorsicht: Mit Kommazahlen und der Ländereinstellung !! Steht in einer Textbox1 6,6 mit deutscher Ländereinstellung, dann liefert

val(textbox1.text) 

eine Floatvariable mit dem Wert 6.6

Steht in der Textbox 6.6 dann liefert val(textbox1.text) ein Datum 06.06.04 Wollen Sie die Zahl wieder in einen deutschen Text verwandeln, dann nutzen Sie str(zahl) zum umwandeln.

Das Programm

Wenn Sie einen string eingeben dann wandelt das Programm den String mit val um und die Art der umgewandelten Variable wird überprüft.

Das Ergebnis wird ausgegeben.

Um das Programm in Gang zu bringen brauchen Sie auf Ihrer Form:

  • 1 Command Button
  • 1 Textlabelfeld
  • 1 Textbox
  • 1 Labelfeld

Holen Sie sich diese mit F6 aus dem Werkzeugkasten und platzieren Sie diese auf der Form.

Der Code:

PUBLIC SUB _new()
TextLabel1.Text="Tippen Sie etwas ein das wie eine Zahl oder eine Kommazahl oder eine Boolesche Variable  
ausschaut"
END
PUBLIC SUB Button1_Click()
x AS Variant
x = Val(TextBox1.Text)
IF IsBoolean(x) THEN
 Label1.Text="Das ist eine Boolesche Variable!"
ENDIF
IF IsInteger(x) THEN
 Label1.Text="Das ist eine Zahl!"
ENDIF
IF IsFloat(x) THEN
 Label1.Text="Das ist eine Kommazahl!"
ENDIF
IF IsString(x) THEN
 Label1.Text="Das ist ein String!"
ENDIF
END

Theorie Expression = Val ( String ) Converts a string into a boolean, a number or a date, according to the content of the string. The current localization is used to convert numbers and dates. The conversion algorithm is the following : If the string can be interpreted as a date & time (with date or time separators), then the date & time is returned. Else, if the string can be interpreted as a floating point number, then this floating point number is returned. Else, if the string can be interpreted as a integer number, then this integer number is returned. Else, if the string is TRUE or FALSE , then the matching boolean value is returned. Otherwise, NULL is returned.

Beispiel

PRINT Val("09/06/72 01:00")

=> 09/06/72 01:00:00

PRINT Val("3.1415")

=> 3.1415 oder 31415 je nach Ländereinstellung

PRINT Val("6.6")

=> 6.6 oder 06.06.04 je nach Ländereinstellung !!

PRINT Val("-25")

=> -25

PRINT Val("True")

=> True

PRINT IsNull(Val("Gambas"))

=> True

str$ Bearbeiten

Str ist das genaue Gegenteil des Val Befehles. Str wandelt also alles in einen String um. Wenn Sie zb eine Zahl errechnet haben zb die Wurzel aus 3 und sie möchten diese in einer Textbox ausgeben , dann können Sie den Str Befehl nutzen:

Textbox1.text = str$(sqr(3))

Vorsicht: Auch der Str Befehl nutzt wieder die lokalen Einstellungen ihres PCs , was Anlass für Fehler sein kann.

Schauen Sie sich das folgende einfache Beispiel an. Sie brauchen eine Textbox und einen Commandbutton auf Ihrer Form um es in Gang zu bringen:

PUBLIC SUB Button1_Click()
 textbox1.Text = Str(Sqr(3))
END 

Der Befehl sqr zieht die Wurzel aus einer Zahl. Statt der 3 in der Klammer nach Sqr können Sie jede andere positive Zahl oder 0 eingeben. Wenn Sie eine negative Zahl eingeben , dann erscheint eine Fehlermeldung: Mathematic Error

Ein weiteres Beispiel:

PUBLIC SUB Button1_Click()
 textbox1.Text = Str( 8 * 37)
END 

Das Sternchen entspricht dem deutschen Zeichen für Malnehmen ( Multiplikation)

Oder probieren Sie einmal folgenden Code:

PUBLIC SUB Button1_Click()
 textbox1.Text = Str(Pi)
END 

In den Beispielen mit den Rechentrainern wird der Val und der Str Befehl mehrfach genutzt.

Siehe Gambas: Rechentrainer

Das Beispiel aus der Hilfefunktion von Gambas ist für Anfänger ziemlich unverständlich:

' Ausgabe in der Standard Ausgabe oder als Meldung 
PUBLIC CONST ON_STDOUT AS Integer = 1
PUBLIC CONST ON_MESSAGE AS Integer = 2
SUB PrintOn(Where AS Integer, What AS Variant)
  IF Where = ON_STDOUT THEN
   PRINT What
 ELSE IF Where = ON_MESSAGE THEN
   Message(Str$(What))
 ENDIF
END

asc Bearbeiten

Asc gibt den ASCII code eines Buchstabens oder Zeichens zurück. Wenn die Position nicht angegeben wird, dann wird der ASCII code des ersten Zeichens zurückgegeben.

Syntax = Asc ( String [ , Position ] )

Beispiel:

PRINT Asc("Gambas")

=> Ausgabe 71

PRINT Asc("Gambas", 3)

=> Ausgabe 109

Beispiel 2 Sie brauchen einen Befehlsbutton um es in Gang zu bringen. Die Ausgabe erfolgt mit Print im Direktfenster.

PUBLIC SUB Button1_Click()
 x as integer 
 For x = 1 to 6 
  PRINT Asc("Messer", x)
 next 
END

Ein Beispiel im Terminalmodus :

STATIC PUBLIC SUB Main()
test AS String
x AS Integer
test = "1234567 Dies ist ein Test"
FOR x = 0 TO Len(test)
 PRINT Asc(test,x)
NEXT
END

chr$ Bearbeiten

Dieser Befehl gibt das Ascii Zeichen zurück, welches der Zahl in Klammern entspricht.

Zeichen  = Chr$ ( Zahl ) 

Vorsicht ! Gambas nutzt intern das UTF-8 charset, so daß Zahlen > 128 andere Zeichen zurückgeben wie mit dem ISO8859-1 charset zu erwarten sind.

Beispiel:

PRINT Chr$(65)

==> A

Weiteres Beispiel, Sie brauchen einen Befehlsbutton um es in gang zu bringen. Die Ausgabe erfolgt mit Print im Direktfenster.

PUBLIC SUB Button1_Click()
 X AS Integer
 FOR X = 32 TO 127
   PRINT Chr$(X);
 NEXT
END

Mit einer Schleife werden alle Zeichen zwischen 32 und 127 hintereinander in einer Zeile ausgegeben. Siehe http://www.madeasy.de/7/prgansi.htm

Im reinen Terminalmodus können Sie folgendes Programm als Beispiel ausprobieren:

STATIC PUBLIC SUB Main()
x AS Integer
FOR x = 30 TO 133
 PRINT x,Chr(x)
NEXT
PRINT
PRINT "Zeilenumbruch CHR(10)", Chr$(10)
PRINT "Return CHR(13)", Chr$(13)
PRINT "Leerzeichen Chr$(32)", "a";Chr$(32);"a"
PRINT "0 CHR48", Chr$(48), Str(0)
PRINT "9 CHR57", Chr$(57), Str(9)
PRINT "@ CHR64", Chr$(64), Str("@")
PRINT "A CHR65", Chr$(65), Str("A")
PRINT "Z CHR90", Chr$(90), Str("Z")
PRINT "a CHR97", Chr$(97), Str("a")
PRINT "z CHR122", Chr$(122), Str("z")
PRINT "A" + "A"
PRINT "A" & "A"
END

int Bearbeiten

Der Befehl Int ( Integer = ganze Zahl) gibt die ganze Zahl zurück, die unterhalb einer Kommazahl steht.

3,1 ==> 3 

Vergleiche auch den Befehl Fix Der Befehl wird gerne beim Runden benutzt.


Beispiel

PRINT Int(Pi)

=> 3

PRINT Int(-Pi)

=> -4

Beispiel: Sie brauchen einen Commandbutton. Die Ausgabe erfolgt im Direktfenster

PUBLIC SUB Button1_Click()
x AS Integer 
a AS Float
a = -3.456
FOR x = 1 TO 10
 a = a + 1
 PRINT a, Int(a)
NEXT
END

Beachten Sie, daß die Kommazahl hier im Code in der englischen Notation mit einem Punkt eingegeben werden muß !

 a = -3.456

Ergebnis :

-2,456 -3
-1,456 -2
-0,456 -1
0,544 0
1,544 1
2,544 2
3,544 3
4,544 4
5,544 5
6,544 6

fix Bearbeiten

Der Befehl fix liefert den Ganzezahlteil einer Kommazahl. Alles was vor dem Komma steht bleibt erhalten, was hinter dem Komma steht wird weggeschnitten. Vergleichen Sie auch den Befehl Int.

Syntax:

Value = Fix ( Number ) 

Einfache Beispiele :

PRINT Fix(Pi)

=> 3

PRINT Fix(-Pi)

=> -3

Programmbeispiel: Sie brauchen einen Commandbutton um es in Gang zu setzen.

PUBLIC SUB Button1_Click()
x AS Integer 
a AS Float
a = -3.456
FOR x = 1 TO 10
 a = a + 1
 PRINT a, Fix(a)
NEXT
END

Ergebnisausgabe im Direktfenster:

-2,456 -2
-1,456 -1
-0,456 0
0,544 0
1,544 1
2,544 2
3,544 3
4,544 4
5,544 5
6,544 6

sgn Bearbeiten

Die Signum Funktion liefert einen Wert, der für das Vorzeichen einer Zahl steht.

Syntax Sgn(Zahl)

Anmerkungen Das Argument Zahl kann ein beliebiger zulässiger numerischer Ausdruck sein. Dessen Vorzeichen bestimmt den von der Sgn-Funktion ausgegebenen Wert:

  • Ist die Zahl > 0 liefert Sgn(Zahl) den Wert 1.
  • Ist die Zahl = 0 liefert Sgn(Zahl) den Wert 0.
  • Ist die Zahl < 0 liefert Sgn(Zahl) den Wert -1.

Beispiel: Sie brauchen dafür nur eine leere Form. Die Ergebnisausgabe erfolgt im Direktfenster.

PUBLIC SUB Form_Open()
x AS Integer
y AS Float
FOR x = 1 TO 100
 y = Rnd(-5, 5) 
 SELECT CASE Sgn(y) ' ...auswerten. 
  CASE 0 ' Wenn Zahl null. 
   PRINT y &" " & Sgn(y) & " Signum = Null." 
  CASE 1 ' Wenn Zahl positiv. 
   PRINT y &" " & Sgn(y) & "Signum = positive Zahl." 
  CASE -1 ' Wenn Zahl negativ. 
   PRINT y & " " & Sgn(y) & "Signum = negative Zahl." 
 END SELECT 
NEXT 
END

Beispiel 2

bst Bearbeiten

cbool Bearbeiten

Dieser Befehl wandelt einen Ausdruck in eine Boolesche Variabel ( wahr,falsch) um.

Syntax;

Boolean = CBool (Ausdruck)

Das Ergebnis wird falsch, falls der Ausdruck:

  • eine Boolesche Variable mit dem Wert falsch ist.
  • eine Null ist.
  • ein Textstring mit Länge Null ist zb a = ""
  • ein Null Objekt ist.

In allen anderen Fällen ist der Ausdruck wahr. Auch ein Leerzeichen als Textstring ergibt mit CBool umgewandelt den Wert True !

Beispiel :

PRINT CBool(0);" "; CBool(1)

=> False True " " funktioniert hier nur als Abstandshalter bei der Ergebnisausgabe.

PRINT CBool("Gambas"); " "; CBool("")," "; CBool(" ")

=> True False True

PRINT CBool(NULL)

=> False

cbyte Bearbeiten

cdate Bearbeiten

cfloat Bearbeiten

cstr Bearbeiten

cint Bearbeiten