|
Bugfixes am Forum
Subdomains aktiviert
Counterscript entfernt
|
| |
|
|
Referenzhandbuch |
|
|
Referenzhandbuch
|
Kapitel 17
|
File-Handhabung
AB2 unterstützt die Nutzung von sequentiellem und direktem (Random-)Filezugriff.
Das Kapitel 7 befaßt sich mit den Anweisungen zum Öffnen, Schließen und Benutzen dieser Files.
Anmerkung:
Bei sequentiellen Files werden die gesamten Daten hintereinander geschrieben und auch wieder
hintereinander ausgelesen. Bei einer Datenänderung müssen alle Daten neu geschrieben werden.
Bei Random-Files können einzelne Daten geschrieben und gelesen werden. Bei einer Datenänderung
brauchen nur die geänderten Daten neu geschrieben zu werden. Ebenfalls ist ein Zugriff auf
einzelne Daten einer umfangreichen Datei möglich, ohne hierfür die gesamte Datei vorher einzulesen.
Daher müssen bei Random-Files bestimmte Regeln beachtet werden.
Funktion: OpenFile
Syntax: OpenFile(File#,Filename$)
Modus: Amiga
OpenFile öffnet ein mit File#-Nummer und
Filename$ näher bezeichnetes File. Es kann gelesen und geschrieben werden. Konnte das File
fehlerfrei geöffnet werden, wird "richtig" (-1) zurückgegeben, anderenfalls
"falsch" (0). Existiert ein File mit dem Namen Filename$
noch nicht, wenn es mit OpenFile angesprochen wird, so richtet OpenFile ein
entsprechendes File ein. OpenFile ist für Random-Files vorgesehen.
Beispiel:
If OpenFile(0,"ram:test") ;Random-File öffnen
MaxLen c$=32 ;maximale Länge von c$ setzen
Fields 0,a,b,c$ ;Felder in einem Eintrag setzen
a=10:b=16:c$="Hallo Ihr!"
Put 0,0 ;Eintrag 0 schreiben
CloseFile 0 ;File schließen
If OpenFile(0,"ram:test") ;File wieder öffnen
Fields 0,a,b,c$ ;wieder Felder setzen
a=0:b=0:c$="" ;Variablen löschen
Get 0,0 ;Eintrag 0 lesen
NPrint "a=",a,"b=",b,"c$=",c$
CloseFile 0 ;File schließen
MouseWait
End
EndIf
EndIf
NPrint "Datei 'ram:test' konnte nicht geöffnet werden."
siehe auch: CloseFile, Fields, Get, Put, MaxLen
Funktion: ReadFile
Syntax: ReadFile(File#,Filename$)
Modus: Amiga
ReadFile öffnet ein mit Filename$ näher bezeichnetes, schon
existierendes, sequentielles File zum Lesen. Konnte das ausgewählte File fehlerfrei geöffnet werden, wird "richtig"
(-1), anderenfalls "falsch" (0) übergeben. Der
FileInput-Befehl wird benutzt, um die Daten einzulesen.
Beispiel:
If WriteFile(0,"ram:test") ;Versuch, File zu schreiben
FileOutput 0 ;Print-Anweisungen in File 0
Print "Hallo!" ;'Hallo' in das File schreiben
CloseFile 0 ;File schließen
DefaultOutput ;voreingestellten Ausgabekanal nutzen
If ReadFile(0,"ram:test") ;Versuch, File zu lesen
FileInput 0 ;Eingabe aus File 0 holen
NPrint Edit$(80) ;aus dem File lesen und ausgeben
CloseFile 0 ;File schließen
DefaultInput ;normaler Eingabekanal
MouseWait
End
EndIf
EndIf
NPrint "'ram:test' konnte nicht geöffnet werden."
MouseWait
siehe auch: CloseFile, WriteFile, FileInput, FileOutput
Funktion: WriteFile
Syntax: WriteFile(File#,Filename$)
Modus: Amiga
WriteFile fertigt ein neues, sequentielles File mit Filename$ an und
erlaubt das sequentielle Schreiben. Tauchte kein Fehler auf wird "richtig" (-1), anderenfalls
"falsch" (0) übergeben. Verwenden Sie zum Datenschreiben die
FileOutput-Anweisung.
siehe auch: CloseFile, FileOutput, ReadFile, FileInput
Befehl: CloseFile
Syntax: CloseFile(File#)
Modus: Amiga
CloseFile schließt ein zuvor mit OpenFile,
ReadFile oder WriteFile geöffnetes File.
CloseFile sollte immer angewendet werden, wenn Files nicht mehr benutzt werden.
siehe auch: OpenFile, ReadFile, WriteFile
Befehl: Fields
Syntax: Fields File#,Var[,Var...]
Modus: Amiga/Blitz
Setzt die Datenfelder eines Datenabschnittes (Record) im Randomfile. Die Übergabe der Variablen erfolgt mit
Get (lesen) und Put (schreiben). Die Zeichenanzahl der Stringvariablen muß
mit MaxLen festgelegt sein und darf niemals überschritten werden.
Beispiel:
If OpenFile(0,"ram:test") ;öffne ein Randomfile
MaxLen c$=32 ;maximale Länge von c$ setzen
Fields 0,a.f,c$,b.w ;Felder im Record setzen
a=Sqr(Pi) ;einige Variablen initialisieren
b=16
c$="RANDOM ACCESS!"
Put 0,0 ;Record 0 schreiben
CloseFile 0 ;File schließen
If OpenFile(0,"ram:test") ;und wieder öffnen
Fields 0,a,b,c$ ;Felder neu setzen
a=0 ;Variablen löschen
b=0
c$=""
Get 0,0 ;Record 0 lesen
NPrint "a=",a,"b=",b,"c$=",c$
CloseFile 0 ;File schließen
MouseWait
End
EndIf
EndIf
NPrint "Datei 'ram:test' konnte nicht geöffnet werden."
MouseWait
siehe auch: OpenFile, CloseFile, Get, Put, MaxLen
Befehl: Put
Syntax: Put File#,Record
Modus: Amiga
Put wird benutzt, um Werte in einer Fields-Variablenliste in einen einzelnen
Datenabschnitt (Record) eines Randomfiles zu übertragen. Wird Put benutzt, um das Direktzugriffsfile
zu vergrößern, darf der nächste Datenabschnitt nur an das Ende des Files angehängt werden. Es ist zum Beispiel
nicht erlaubt, in einem File mit 5 Datenabschnitten den 7. Datenabschnitt zu übertragen, bevor der 6. Datenabschnitt erzeugt wurde.
siehe auch: OpenFile, CloseFile, Fields, Get
Befehl: Get
Syntax: Get File#,Record
Modus: Amiga
Get wird benutzt, um die Informationen eines einzelnen Datenabschnitts eines Direktzugriffsfiles in eine
Variablenliste zu übertragen, die mit dem Fields-Kommando festgelegt wurde. Es können nur existierende
Datenabschnitte übertragen werden.
siehe auch: OpenFile, CloseFile, Fields, Put
Befehl: FileOutput
Syntax: FileOutput File#
Modus: Amiga
Leitet alle Print- und NPrint-Anweisungen auf das ausgewählte sequentielle
File um. Nach dem Schließen des Files sollte der Printbefehl wieder auf einen aktuellen Ausgabekanal gelegt werden (z.B.
DefaultOutput oder WindowOutput).
siehe auch: WriteFile, CloseFile
Befehl: FileInput
Syntax: FileInput File#
Modus: Amiga
Als Eingabequelle für Edit, Edit$ und Inkey$
wird das ausgewählte sequentielle File benutzt. Nach dem Schließen des Files sollte die Eingabe wieder auf einen aktuellen
Eingabekanal gelegt werden (z.B. DefaultInput oder WindowInput).
siehe auch: ReadFile, CloseFile
Befehl: FileSeek
Syntax: FileSeek File#, Position
Modus: Amiga
Erlaubt das Bewegen bis zu einem bestimmten Punkt im File. Das erste Dataelement liegt an Position 0,
das zweite an Position 1 usw. Position darf nicht größer
sein als die Länge des Files. In Verbindung mit OpenFile und Lof kann
FileSeek dazu benutzt werden, um das komplette File bis zum Ende einzulesen.
Beispiel:
If WriteFile(0,"ram:test") ;Neues File erzeugen
FileOutput 0 ;und Ausgabe umlenken
NPrint "Hallo" ;etwas schreiben
CloseFile 0 ;und das File schließen
If OpenFile(0,"ram:test") ;File wieder öffnen
FileSeek 0,Lof(0) ;suchen bis zum Fileende
NPrint " There! " ;etwas hinzufügen
CloseFile 0 ;File schließen
DefaultOutput ;Ausgabe wieder zurücksetzen
If ReadFile(0,"ram:test") ;File zum Lesen öffnen
FileInput 0 ;Eingabe aus dem File
NPrint Edit$(80) ;File lesen und ausgeben
NPrint Edit$(80) ;dito
EndIf
EndIf
EndIf
NPrint "'ram:test' konnte nicht geöffnet werden."
MouseWait
siehe auch: OpenFile, CloseFile, Lof, Eof, Loc
Funktion: Lof
Syntax: Lof (File#)
Modus: Amiga
Übergibt die Länge eines gewählten Files in Bytes.
siehe auch: OpenFile, CloseFile, Eof, Loc
Funktion: Eof
Syntax: Eof (File#)
Modus: Amiga
Meldet das Ende eines Files. Rückgabe -1: Fileende erreicht, Rückgabe 0: Fileende noch nicht erreicht.
Beispiel:
If WriteFile(0,"ram:test") ;Neues File erzeugen
FileOutput 0 ;Ausgabe in das File
For k=1 to Rnd(50)+50 ;eine zufällige Anzahl
Print Chr$(Rnd(26)+65) ;zufälliger Zeichen schreiben
Next
CloseFile 0 ;File schließen
DefaultOutput
If ReadFile(0,"ram:test") ;File zum Lesen öffnen
FileInput 0 ;Eingabe aus dem File
While NOT Eof(0) ;Solange Fileende nicht erreicht
Print Inkey$ ;nächstes Zeichen ausdrucken
Wend ;und weiter
MouseWait
End
EndIf
EndIf
NPrint "'ram:test' konnte nicht geöffnet werden."
End
siehe auch: Lof, Loc
Funktion: Loc
Syntax: Loc (File#)
Modus: Amiga
Loc gibt die aktuelle Position im File an. Beim ersten Öffnen eines Files befinden Sie sich auf Position
0.
siehe auch: Lof, Eof
Befehl: DosBuffLen
Syntax: DosBuffLen Bytes
Modus: Amiga
Alle AmBlitz2-Filezugriffe erfolgen über eine spezielle Pufferroutine. Dies erhöht die Geschwindigkeit des Filezugriffs,
besonders bei sequentiellen Files. DosBuffLen ändert die Größe des Puffers; die Größenangabe erfolgt in Bytes.
Voreingestellt ist eine Größe von 2048 Bytes. Bei zu wenig Speicher kann der Puffer verkleinert werden.
Befehl: KillFile
Syntax: KillFile Filename$
Modus: Amiga
KillFile löscht das mit Filename$ gewählte File. Konnte das
File nicht gelöscht werden, wird keine Fehlermeldung zurückgegeben.
Befehl: CatchDosErrs
Syntax: CatchDosErrs
Modus: Amiga/Blitz
Normalerweise werden AmigaDos I/O Fehlermeldungen in einem Workbench- Window ausgegeben (z.B.: Beim Lesen und Schreiben eines Files, wenn
sich keine Disk im Laufwerk befindet). Mit CatchDosErrs können Sie diese Fehlermeldungen auf ein AB2-Window
umleiten. Benutzt wird das Window, das vor Ausführung von CatchDosErrs als zu benutzen angegeben wurde.
Beispiel:
Screen 0,3
Window 0,0,12,320,DispHeight-12,$1008,"My Window",1,2
CatchDosErrs ;Dos-Fehler auf unserem Bildschirm finden!
If ReadFile(0,"dummydev:dummyfile") ;Nonsensdevice
Else
Print "Can't open file!"
EndIf
Repeat ;warte...
Until WaitEvent=$200 ;bis das Fenster geschlossen wird
Befehl: ReadMem
Syntax: ReadMem File#,Adresse,Länge
Modus: Amiga
Erlaubt das Einlesen einer mit Länge festgelegten Anzahl von Bytes aus einem geöffneten
File an eine absolute Speicheradresse, die mit Adresse festgelegt wird.
Vorsicht! Sie sollten genau wissen, was Sie tun. Nur für fortgeschrittene User.
siehe auch: WriteMem
Befehl: WriteMem
Syntax: WriteMem File#,Adresse,Länge
Modus: Amiga
Wie ReadMem, hier wird allerdings ein Speicherbereich als anzugebenes File#
abgespeichert.
siehe auch: ReadMem
|
|
|
|
|
|