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