Gambas: Dateien

Aus Wikibooks


Zurück zu Gambas


Datei speichern[Bearbeiten]

Im folgenden Beispielprogramm wird der Text einer Textarea in einer Datei auf der Festplatte gespeichert. Das Ganze erfolgt über den Standarddialog. Sie brauchen eine Textarea und einen Commandbutton um das Programm in Gang zu bringen.

Beispiel:

PUBLIC SUB Form_Open()
 Textarea1.Text = "Dies ist ein Test"
END
PUBLIC SUB Button1_Click()
 Dialog.SaveFile() 
 File.Save(Dialog.Path, TextArea1.Text)
 CATCH 
 IF ERROR THEN RETURN
END

Datei speichern ohne Dialog[Bearbeiten]

Sie können eine Datei auch ohne Standarddialog speichern. Dann müssen Sie allerdings den Pfad und den Dateinamen im Programm angeben. Wie das geht, zeigt folgendes Beispiel. Sie brauchen eine Textarea und einen Commandbutton um es in Gang zu bringen.

Programm:


PUBLIC SUB Form_Open()
Textarea1.Text = "Dies ist ein Test"
END
PUBLIC SUB Button1_Click()
File.Save(system.Home & "/test.txt",TextArea1.Text)
File.Save(User.Home & "/test.txt",TextAreal1.Text) ' Gambas 3.8.4
CATCH 
IF ERROR THEN RETURN
END

Mit dem Befehl system.home wird das aktuelle Benutzerverzeichnis gewählt zb /home/ihrname.

Überprüfen Sie - am besten mit dem Konqueror oder mit der Konsole- , ob die Datei auch wirklich gespeichert wurde. Probieren Sie aus, was passiert wenn Sie die Fehlerroutine mit Catch weglassen. ( Das macht solange nichts, solange die Pfadangabe korrekt ist. Ist die Pfadangabe falsch, dann gibt es eine Fehlermeldung: File or directory does not exist.) Probieren Sie aus, was passiert wenn die Datei, in die gespeichert werden soll, schon existiert. ( Die existierende Datei wird ohne Rücksicht auf Verluste überschrieben.) Probieren Sie aus, was passiert, wenn die Pfadangabe falsch ist. ( Es kommt zu keiner Fehlermeldung, solange die Fehlerroutine mit Catch eingebaut ist !!)

Programmvariante: Nur ein Commandbutton ist nötig.

PUBLIC SUB Button1_Click()
File.Save(system.Home & "/test.txt","Dies ist ihr Text")
File.Save(User.Home & "/test.txt","Dies ist ihr Text") ' Gambas 3.8.4
CATCH 
IF ERROR THEN RETURN
END

Datei laden 1[Bearbeiten]

Auf den meisten Linuxsystemen findet sich die Datei passwd. Diese wollen wir in eine Textarea laden

Dazu muß man wissen, wo die Datei steht: Sie steht im Verzeichnis: /etc

Für das Programm brauchen Sie:

  • eine Form
  • eine Textarea

Code:

PUBLIC SUB Form_Open()
s AS String
s = File.Load("/etc/passwd")
'Die Datei muss existieren, 
'sonst kann sie nicht geladen werden. 
textarea1.Text = s
END

Wie Sie sehen stehen in der Datei die Passwörter aller angemeldeten Benutzer Ihres Linuxsystems. Diese Datei ist lesbar aber schreibgeschützt.

Datei laden 2[Bearbeiten]

Wenn Sie im Abschnitt Datei speichern die Datei test.txt in ihrem Homeverzeichnis gespeichert haben, können Sie sich diese wieder problemlos laden:

PUBLIC SUB Button1_Click()
DIM sLine AS String
sLine = File.Load(system.home & "/test.txt")
sLine = File.Load(User.Home & "/test.txt") ' Gambas 3.8.4
PRINT sLine
END

Weiteres Beispiel:

Sie haben eine Datei Datei.text in Ihrem Verzeichnis und wollen diese Datei in Gambas laden:

Wie das geht zeigt das folgende Beispiel:


PUBLIC SUB Button1_Click()
DIM sLine AS String
sLine = File.Load("Datei.text")
'Die Datei muss existieren, 
'sonst kann sie nicht geladen werden. 
PRINT sLine
END

Sie brauchen eine Form mit einem Commandbutton. Die Ausgabe erfolgt im Direktfenster. Um das Programm in Gang zubringen, müssen Sie erst mit einem Editor die Datei Datei.text erstellen. Dann speichern Sie die Datei in ihrem Gambas Projektverzeichnis ab. Bei mir steht die Datei zb in dem Verzeichnis :

file:/home/rhoff/gambas-1.0/laden2/

Datei laden mit Standarddialog[Bearbeiten]

Mit dem Standarddialog kann man Pfad und Dateiname beim Laden wählen.

Für das Beispiel brauchen Sie eine Form , einen Commandbutton, ein Labelfeld und eine Textarea.

PUBLIC SUB Button1_Click()
 IF Dialog.OpenFile() THEN RETURN
 Label1.Text = Dialog.Path
 TextArea1.Text = File.Load(Dialog.Path)
END

Datei laden und speichern mit Addyplus[Bearbeiten]

In einem kleinen Anwendungsprogramm soll gezeigt werden wie man eine Zahlenkolonne laden und speichern kann. Dazu wird das kleine Summierprogramm Addy erweitert und zu Addyplus umfunktioniert.

Siehe auch http://de.wikibooks.org/wiki/Gambas:_Rechnen#Addy_der_Summierer

So schaut die Form jetzt aus:

Sie brauchen also

  • eine Textarea
  • eine Textbox
  • und 5 Befehlsknöpfe auf Ihrer Form, um das Programm zu starten.

So schaut der Code aus:

PUBLIC SUB Form_Open()
 ME.Text = "Addy, der Summierer"
 Textarea1.Text = ""
 Textbox1.Text = ""
END
PUBLIC SUB Button1_Click()
 DIM text AS String
 DIM summe AS Float
 DIM liste AS String[]
 DIM posten AS String
 text = textarea1.Text
 liste = Split(text,Chr(10))
 FOR EACH posten IN liste
  summe = summe + Val(posten)
 NEXT
 textbox1.Text = summe
 CATCH 
 Message.Info("Bitte in der letzten Zeile kein Return eingeben ! Drücken Sie die Rücktaste!")
END
PUBLIC SUB Button3_Click()
 Dialog.SaveFile() 
 File.Save(Dialog.Path, TextArea1.Text)
CATCH  
IF ERROR THEN RETURN
END
PUBLIC SUB Button2_Click()
IF Dialog.OpenFile() THEN RETURN
TextArea1.Text = File.Load(Dialog.Path)
END
PUBLIC SUB Button4_Click()
SELECT Message.Question("Vorsicht! Das Textfeld wird gelöscht.","Abbrechen","Löschen")
   CASE 1
     RETURN
   CASE 2
     Textarea1.Text =""
 END SELECT
END
PUBLIC SUB Button5_Click()
ME.CLose 
END

Geben Sie in die Textarea irgendeine Zahlenreihe ein, beispielsweise

1
2
3

Dann drücken Sie auf Speichern. Geben Sie einen Dateiname ein zb s1 und speichern sie die erste Zahlenreihe ab.

Dir Befehl[Bearbeiten]

File name array = Dir ( Directory [ , File pattern ] )

Dieser Befehl gibt einen String Array zurück, der die Namen der Dateien des Verzeichnisses enthält, welches mit File pattern übereinstimmt. Falls kein File pattern spezifiziert wurde , dann werden alle Dateien ins Array geladen. File pattern kann dieselben allgemeinen Zeichen enthalten wie der LIKE Befehl.

Beispiel:

PUBLIC SUB Form_Open()
DIM File AS String
FOR EACH File IN Dir(system.home, "*")
FOR EACH File IN Dir(User.Home,"*") ' Gambas 3.8.4
  PRINT File
NEXT  
END

In diesem Beispiel werden alle Dateien im Home Verzeichnis des aktuellen Benutzers im Direktfenster ausgegeben. Dabei werden allerdings auch die Unterverzeichnisse als Dateien gehandhabt.


Beispiel

' Print a directory
SUB PrintDirectory(Directory AS String)
  File AS String
  FOR EACH File IN Dir(Directory, "*.*")
   PRINT File
 NEXT  
END

Beispielvariante : Sie brauchen eine Form mit einem Button auf der Form. Fügen Sie in das Programm statt /home/rho/gambastext/ ein existierendes Verzeichnis auf Ihrem PC ein.

' Gambas class file
PUBLIC SUB Button1_Click()
 PrintDirectory ("/home/rho/gambastext/")
END
SUB PrintDirectory(Directory AS String)
  DIM File AS String
 FOR EACH File IN Dir(Directory, "*.*")
   PRINT File
 NEXT  
END

Neues Verzeichnis anlegen[Bearbeiten]

Mit dem Befehl MakeDir kann man ein neues Verzeichnis anlegen. Vorsicht: Es klappt nur,

  • wenn Sie einen korrekten Pfad eingegeben haben,
  • wenn Sie die Schreibberechtigung für diesen Pfad haben
  • wenn Sie nicht in das Verzeichnis des offenen Gambasprojektes ein neues Verzeichnis schreiben wollen. ( siehe Application.Name)
  • keine Datei gleichen Namens in diesem Pfad existiert.

Beispiel:

Sie brauchen einen Befehlsbutton, um das Programm in Gang zu bringen:

PUBLIC SUB Button1_Click()
 MKDIR system.home & "/test"
 MKDIR User.Home & "/test" ' Gambas 3.8.4
END

system.home gibt dabei das aktuelle Nutzerverzeichnis /home/zbihrname an.

Schauen Sie mit dem Konqueror nach, ob das Verzeichnis wirklich angelegt wurde.

Am besten fügt man eine Fehlerroutine ein, für den Fall das der Pfad schon existiert oder kein Schreibzugriff besteht.

Datei kopieren[Bearbeiten]

Der COPY Befehl kopiert eine Datei von einem Verzeichnis in ein anderes.

COPY Quellverzeichnis/Datei TO Zielverzeichnis/Datei

Obiger Befehl kopiert eine Datei aus dem Quellverzeichnis in das Zielverzeichnis. Dabei braucht die Datei nicht unbedingt denselben Namen zu haben, wie die Zieldatei. Unterverzeichnisse werden dabei allerdings nicht kopiert. (Note that you cannot copy directories recursively with this function. )

Beispiel:

' Sichert die versteckte Gambaskonfigurationsdatei 
' Das Verzeichnis muß vorhanden sein
' und man muß den Zugriff darauf haben 
COPY system.name & "/.gambas/gambas.conf" TO system.name & "/gambas.conf.save"

System.name entspricht dabei ihrem Homeverzeichnis.

Das Beispiel ergibt eine Fehlermeldung, wenn :

  • Das Verzeichnis nicht vorhanden ist
  • Kein Schreibzugriff auf das Verzeichnis existiert
  • Die Zieldatei schon vorhanden ist.

Beispiel2:

Sie brauchen einen Befehlsbutton auf Ihrer Form, um das Beispiel zu starten.

PUBLIC SUB Button1_Click()
 COPY "/home/ihrname/.gambas/gambas.conf" TO "/home/ihrname/test/gambas.conf.save"
END

Wenn man mehrere Dateien auf einmal kopieren will, hilft einem der Dir Befehl. Siehe http://de.wikibooks.org/wiki/Gambas:_Datei

Wie Verzeichnisse kopiert oder verschoben werden können ist hier [[1]] beschrieben

Wie kann man das Home Verzeichnis des aktuellen Benutzers abfragen ?[Bearbeiten]

Der Befehl Application.home funktioniert dazu nicht mehr. Der Befehl Application.Name ergibt den Pfad des Programmes , welches gerade läuft, aber nicht das Homeverzeichnis.

Das Homeverzeichnis des aktuellen Benutzers erhält man mit dem Befehl system.home in Gambas 2 funktioniert auch dieser Befehl nicht mehr. Hiefür muss nun die 'User' Klasse hergenommen werden. Also lautet der Befehl: user.home

Beispiel1

PUBLIC SUB Form_Open()
PRINT system.Home
END

Beispiel2:

PUBLIC SUB Form_Open()
ME.Text = "Systeminfo"
 textarea1.text = "Charset = " & system.Charset & Chr(13) & Chr(10)
 textarea1.text = textarea1.text & "Domain = " & system.Domain & Chr(13) & Chr(10)
 textarea1.text = textarea1.text & "Homeverzeichnis = " & system.Home & Chr(13) & Chr(10)
 textarea1.text = textarea1.text & "Host = " & system.Host & Chr(13) & Chr(10)
 textarea1.text = textarea1.text & "Sprache = " & system.Language & Chr(13) & Chr(10)
 textarea1.text = textarea1.text & "Pfad = " & system.path & Chr(13) & Chr(10)
 textarea1.text = textarea1.text & "Benutzer = " & system.User 
' PRINT system.Charset
' PRINT system.Domain
' PRINT system.Home
' PRINT system.Host
' PRINT system.Language
' PRINT system.Path
' PRINT system.User
END
PUBLIC SUB Button1_Click()
  ME.Close
END

Man braucht eine Textarea und einen Befehlsbutton, um das Programm zu starten.

Beispiel3

PUBLIC SUB Form_Open()
PRINT user.Home
END

Existiert eine Datei ?[Bearbeiten]

Im folgenden Beispiel wird überprüft, ob die Bash vorhanden ist oder nicht.

Beispiel:

PUBLIC SUB Button1_Click()
 IF Exist("/bin/bash") = TRUE THEN
 Label1.Text="Bash ist vorhanden"
END IF
IF Exist("/bin/bash") = FALSE THEN
 Label1.Text="Fehler: Bash ist nicht vorhanden"
END IF
END

Sie brauchen einen Befehlsbutton und ein Labelfeld, um das Programm in Gang zu bringen.

Ähnlich funktioniert:

GB.ExistFile(file_name)

Datei laden und speichern in einem kleinen kombinierten Programm[Bearbeiten]

Im folgenden Programm wird eine Datei test.txt geladen und gespeichert.

So schaut das fertige Programm aus:

Sie brauchen also:

  • Eine Form
  • Eine Textbox
  • 5 Befehlsbuttons

Der Code schaut so aus:

PUBLIC SUB Form_Open()
  Textbox1.Text = "Dies ist ein Test"
END
PUBLIC SUB Button1_Click()
'Gespeichert wird im Dialog d.h es sind auch andere Dateinamen möglich
Dialog.SaveFile() 
File.Save(Dialog.Path, TextBox1.Text)
'File.Save("test.txt",TextBox1.Text)
'test.txt muss schon vorhanden sein
'sonst gibt es eine Fehlermeldung.
END
PUBLIC SUB Button2_Click()
'Geladen wird ohne Dialog
IF Exist("test.txt") THEN Textbox1.Text = File.Load("test.txt")
'test.txt muss vorhanden sein! 
END
PUBLIC SUB Button3_Click()
'Textbox wird gelöscht
  Textbox1.Text =""
END
PUBLIC SUB Button4_Click()
'Programmende
  ME.Close
END
PUBLIC SUB Button5_Click()
'Zufallstext erzeugen
DIM Z AS Integer
DIM Buchstabe AS String
Randomize()
Textbox1.Text = ""
FOR Z = 1 TO 10 
 Buchstabe = Chr$(Int(Rnd(65,91))) 
 TextBox1.Text = TextBox1.Text & Buchstabe
NEXT 
END

Datei schreiben mit WRITE[Bearbeiten]

Man schreibt in einer Datei wie auch in Basic Sprache üblich ist:

  Dim hFile As File
    hFile = Open application.path & "/blabla.txt " For Write Append 
     Write #hFile, "Hallo Welt"
    Close #hFile 

Wird "For Write" mit "Append" angegeben muss eine Datei "blabla.txt vorhanden sein. Wird "For Write" ohne "Append" angegeben wird eine neue Datei "blabla.txt erzeugt.

Daten einlesen mit READ[Bearbeiten]

Der READ befehl liest Daten aus den verschiedensten Quellen in den Computer ein. Am einfachsten läßt er sich erklären, wenn man eine Datei von der Festplatte in die Anzeige lädt. Wie das geht zeigt folgendes Programm.

Sie brauchen dazu:

  • eine Form
  • einen Befehlsbutton

Der Code dazu lautet folgendermaßen:

PUBLIC SUB Form_Open()
 Button1.Text = "Read test.txt"
'Der Befehlsbutton1 wird umbenannt
File.Save(application.path & "/test.txt","Dies ist ein Test")
'Es wird eine Testdatei im aktuellen Verzeichnis angelegt und gespeichert
CATCH 
'Mögliche Fehler abfangen
IF ERROR THEN RETURN
END
PUBLIC SUB Button1_Click()
'Die Testdatei wird bitweise eingelesen und wieder zusammengeklebt
 hFile AS File
 s AS String
 OPEN "test.txt" FOR READ AS #hFile
 WHILE NOT Eof(hFile)
   LINE INPUT #hFile, s
   PRINT s
   'Ausgabe im Direktfenster
 WEND
FINALLY ' Immer ausführen, auch bei einem Fehler
CLOSE #hFile
CATCH 
' Nur bei einem Fehler ausführen
 PRINT "Die Datei test.txt kann nicht ausgegeben werden.."
END