In den Gambas-Skripten können alle Sprachelemente von Gambas verwendet werden. Der Aufbau eines Gambas-Skripts als Textdatei ist bis auf den Header nicht formalisiert. Die Datei-Extension können Sie frei vergeben. Sie sollten dem Vorschlag folgen als Extension gbs3 zu verwenden. Das folgende Skript zeigt ein erprobtes Format:
#!/usr/bin/env gbs3
PUBLIC SUB Main()
PRINT
PRINT " Aktuelles Datum: " & SetDateToGerman(Now) & "."
PRINT " Es war genau " & Format$(Now, "hh:nn:ss") & " Uhr!"
PRINT
END ' Main()
PRIVATE FUNCTION SetDateToGerman(dDatum AS Date) AS String
DIM aMonatMatrix, aWochenTagMatrix AS NEW String[]
DIM sWochenTag, sTag, sMonat, sJahr AS String
aMonatMatrix.Clear
aMonatMatrix = ["Januar","Februar","März","April","Mai","Juni","Juli","August",
"September","Oktober","November","Dezember"]
aWochenTagMatrix.Clear
aWochenTagMatrix = Split("Sonntag Montag Dienstag Mittwoch Donnerstag Freitag Samstag", " ")
sWochenTag = aWochenTagMatrix[WeekDay(dDatum)]
sTag = Str(Day(dDatum))
sMonat = aMonatMatrix[Month(dDatum) - 1]
sJahr = Str(Year(dDatum))
RETURN sWochenTag & " - " & sTag & ". " & sMonat & " " & sJahr ' Formatierter String
END
Kommentare:
Der o.a. Inhalt wird in der Datei date_time2.gbs3 im Home-Verzeichnis gespeichert. Die Datei wird anschließend ausführbar gemacht:
hans@linux:~$ chmod u+x ./date_time2.gbs3 hans@linux:~$ ls -l # Kontrolle -rwxr-xr-x 1 hans hans 1041 Dez 30 15:24 date_time2.gbs3
So erfolgt der Aufruf der Gambas-Skript-Datei date_time2.gbs3 in einer Konsole. Es werden das aktuelle Datum und die (System-)Zeit angezeigt:
hans@linux:~$ gbs3 ./date_time2.gbs3 Aktuelles Datum: Dienstag - 1. Januar 2013. Es war genau 15:26:25 Uhr! hans@linux:~$
Die Funktion SetDateToGerman(..) hätte man auch durch diese Zeile ersetzen können:
PRINT " Aktuelles Datum: " & Format(Now, "dddd - dd. mmmm yyyy" ) & "."
Durch den Einsatz der Funktion SetDateToGerman(..) sollte hier nur gezeigt werden, wie Sie unterschiedliche Sprachelemente von Gambas im Skript-Quelltext einsetzen können. Ein Vorteil gegenüber herkömmlichen Skript-Sprachen, den Sie erst bei umfangreichen Skripten erkennen werden – eine Sprache für unterschiedliche Aufgabenbereiche!
Mit dem folgenden Skript werden die Umgebungsvariablen ausgelesen und angezeigt:
#!/usr/bin/env gbs3
PUBLIC SUB Main()
Print
Print "Anzeige Umgebungsvariablen"
Print "--------------------------------"
Print
GetEnviroment()
END ' Main()
Public Sub GetEnviroment()
DIM sElement as String
FOR EACH sElement IN Application.Env
Print sElement & " ---> " & Application.Env[sElement]
NEXT ' sElement
End
Der Aufruf in der Konsole erfolgt mit
hans@linux:~$ gbs3 ./enviroment.gbs3
und liefert die Umgebungsvariablen als Name-Wert-Paare, die jeweils durch das Symbol '—→' getrennt sind:
LC_PAPER ---> de_DE.UTF-8 LC_ADDRESS ---> de_DE.UTF-8 SSH_AGENT_PID ---> 1856 LC_MONETARY ---> de_DE.UTF-8 GPG_AGENT_INFO ---> /tmp/keyring-XpXASO/gpg:0:1 TERM ---> xterm SHELL ---> /bin/bash .. XAUTHORITY ---> /home/hans/.Xauthority LC_NAME ---> de_DE.UTF-8 _ ---> /usr/local/bin/gbs3
Mit diesem Gambas-Skript wird der aktuell benutzte Speicher ausgegeben, wobei einige Speichersegmente nicht beachtet werden:
#!/usr/bin/env gbs3
Public Sub Main()
Print "--> Der aktuell benutzte Speicher beträgt " & CStr(GetUsedMemory()) & " Byte."
End ' Main()
Private Function GetUsedMemory() As Integer
Dim sExecResult, sValue As String
Dim aResult As String[]
Dim cValue As New Collection
Exec ["cat", "/proc/meminfo"] To sExecResult
For Each sValue In Split(sExecResult, "\n", "", True)
aResult = Split(sValue, " ", "", True)
cValue[Left$(aResult[0], -1)] = aResult[1]
Next ' sValue
Return cValue!MemTotal - cValue!MemFree - cValue!Buffers - cValue!Cached +
cValue!SwapTotal - cValue!SwapFree - cValue!SwapCached
End
Das Skript kann dann in einem Terminal aufgerufen werden und gibt den benutzten Speicher aus:
hans@linux:~$ gbs3 ./speicher.gbs3 --> Der aktuell benutzte Speicher beträgt 649116 Byte. hans@linux:~$
Das Anzeigen der über 40 Speichersegmente ist auch direkt in einem Terminal möglich – jedoch ohne die Manipulationen in der Funktion GetUsedMemory(), die nur in einem Skript möglich sind und verwendet werden:
hans@linux:~$ cat /proc/meminfo MemTotal: 8093648 kB MemFree: 6519468 kB Buffers: 145764 kB .. DirectMap4k: 63104 kB DirectMap2M: 8241152 kB hans@linux:~$
Auch die Verbindung zu einer Datenbank und das Auslesen sowie Anzeigen ausgewählter Datenbank-Daten sind keine Hürde für ein Gambas-Skript. Hier der Quelltext für das Skript tb_sqlite3.gbs3:
#!/usr/bin/env gbs3
USE "gb.db"
USE "gb.db.sqlite3"
Public cDBVerbindung As New Connection
Public Sub Main()
Dim iDatensatzNummer, iSpaltenNummer As Integer
Dim sFehler, sFeldName, sSQL_Anweisung As String
Dim rDBResult As Result
' Syntax: goDBServer( TYP, HOST, USER,PASS, DATENBANK, PORT,TABELLE)
sFehler = goDBServer("sqlite3", User.Home &/ "Liste", "", "", "liste.sqlite", "", "liste")
If sFehler = "DBFehler" Then
Print " Eine DB-Verbindung zum DB-Server konnte nicht hergestellt werden!"
Return
Endif ' sFehler = "DBFehler" ?
sSQL_Anweisung = "SELECT * FROM liste"
rDBResult = cDBVerbindung.Exec(sSQL_Anweisung)
If rDBResult.Count = 0 Then
Print "Die Anzahl der selektierten Datensätze ist Null!"
Return
Endif
Print
Print "Report vom " & Format(Now, "dd. mmmm yyyy") & " - " & Format$(Now, "hh:nn") & " Uhr"
Print "-------------------------------------------------"
Print
IF rDBResult.Available THEN
For iDatensatzNummer = 0 To rDBResult.Count - 1
rDBResult.MoveTo(iDatensatzNummer)
For iSpaltenNummer = 0 To rDBResult.Fields.Count - 1
Print Upper(rDBResult.Fields[iSpaltenNummer].Name) & " ---> " & rDBResult[iSpaltenNummer]
Next ' Spalte
Print
Next ' Datensatz
Endif ' MDataBase.rDBResult.Available
Print "===== DB-Report-Ende ==========================="
Print
End ' Main()
Private Function goDBServer(DBType As String, DBHost As String, DBUserName As String,
DBUserPassword As String, DBName As String, DBPort As String,
DBTabellenName As String) As String
cDBVerbindung.Type = Lower(DBType) ' Der Typ muss klein geschrieben werden!
cDBVerbindung.Host = DBHost
cDBVerbindung.User = DBUserName ' ---> Nur bei MySQL und PostgreSQL
cDBVerbindung.Password = DBUserPassword ' ---> Nur bei MySQL und PostgreSQL
cDBVerbindung.Name = DBName
cDBVerbindung.Port = DBPort ' ---> Nur bei MySQL und PostgreSQL
Try cDBVerbindung.Open()
If Error Then Return "DBFehler" ' ERROR
End
Die Anzeige der Datensätze erfolgt mit dem o.a. Gambas-Skript nur block- und zeilenweise:
hans@linux:~$ gbs3 ./tb_sqlite3.gbs3 Datenbank-Report vom 30. Dezember 2012 - 16:22 Uhr ------------------------------------------------- ID ---> 1 NACHNAME ---> Adler VORNAME ---> Anne WOHNORT ---> Osterburg PLZ ---> 39606 STRASSE ---> Werbener Strasse 20 TELEFONFESTNETZ ---> 03937864322 TELEFONMOBIL ---> 0171232323456 EMAILADRESSE ---> adler.anne@web.de WEBADRESSE ---> GEBDATUM ---> 06/22/2005 HINWEISE ---> "Jugend forscht" - 2013
Auch Fehlermeldungen werden in der Konsole ausgegeben. Im ersten Fall wird der Fehler abgefangen und durch eine eigene Fehlermeldung angezeigt, während im 2. Fall nur die interne Fehler-Routine anspringt:
hans@linux:~$ gbs3 ./tb_sqlite3.gbs3 Eine DB-Verbindung zum DB-Server konnte nicht hergestellt werden! hans@linux:~$
hans@linux:~$ gbs3 ./tb_sqlite3.gbs3 MMain.Main.26: Query failed: SQL error or missing database 1: MMain.Main.26 hans@linux:~$