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:~$
Artikel