Buchempfehlung
Windows System Programming
Windows System Programming
Das Kompendium liefert viele interessante Informationen zur Windows-Programmierung auf Englisch. [Mehr Infos...]
FreeBASIC-Chat
Es sind Benutzer im FreeBASIC-Chat online.
(Stand:  )
FreeBASIC bei Twitter
Twitter FreeBASIC-Nachrichten jetzt auch über Twitter erhalten. Follow us!

Referenz - PUT (Datei)

Referenz-Navigation

 

Syntax: PUT #Dateinummer, [Position], Daten [, Menge]
Typ: Anweisung/Funktion
Kategorie: Dateien

PUT schreibt Daten in eine Datei, die im BefehlsreferenzeintragBINARY- oder BefehlsreferenzeintragRANDOM-Modus geöffnet wurde.

Der RANDOM-Modus wird nur noch selten verwendet; die Verwendung sequentieller Modi (BefehlsreferenzeintragINPUT, BefehlsreferenzeintragOUTPUT und BefehlsreferenzeintragAPPEND) bzw. des BINARY-Modus hat sich als sinnvoller herausgestellt.
Es wird nicht garantiert, das FreeBASIC RANDOM-Daten im selben Umfang wie QB unterstützt.

Im BINARY-Modus richtet sich die Anzahl der zu schreibenden Bytes nach dem Datentyp der Variable, die in die Datei geschrieben wird. Sie lässt sich - außer für Strings variabler Länge - über BefehlsreferenzeintragSIZEOF ermitteln:

Beispiel 1:

Dim buffer AS String
Dim f AS Integer = Freefile
Open "file.ext" For Binary As #f

buffer = "hello world within a file."
Put #f, , buffer
Close #f

Um ganze Arrays oder BefehlsreferenzeintragUDTs zu lesen, geben Sie einfach nur den Bezeichner ohne Index bzw. Verweis auf ein Attribut an.
Beispiel 2:

Type UDT
   a As Integer
   b As Single
   c As String * 5
END TYPE

Dim f AS Integer = Freefile
Open "file.ext" For Binary As #f

Dim outarray(5) As Integer
Dim outUDT As UDT

Put #f, , outarray()
Put #f, , outUDT

Close #f

Bei der Verwendung von Datenpuffern, deren BefehlsreferenzeintragPointer angegeben ist, verwenden Sie die BefehlsreferenzeintragPointer-Dereferenzierung

*Pointer

oder

Pointer[index]

Außerdem müssen Sie angeben, wie viele Bytes geschrieben werden sollen. Dazu dient der Parameter 'Menge'.

Beispiel 3:

Dim f AS INTEGER = Freefile
Open "file.ext" For Binary As #f

Dim x As Byte Ptr
x = Allocate(8)

Put #f, 1, *x  , 4  ' die ersten vier Speicherstellen schreiben
Put #f, 5, x[4], 4  ' die nächsten vier Speicherstellen schreiben

DeAllocate x
Close #f

Achten Sie bei der Verwendung von PUT sehr genau auf die Datentypen!
Beispiel 4:

Dim v1 As Byte, v2 As String * 2
Dim f As integer

v1 = 33
v2 = "33"
f = FreeFile

Open "file.ext" For Binary As #f
   Put #f, , v1
   Put #f, , v2
Close #f

Open "file.ext" For Binary As #f
   Get #f, , v2
   Get #f, , v1
Close #f

Print v1, v2
Sleep

Ausgabe:

51     !3

Wie Sie sehen, wird in die Datei beim ersten Zugriff zuerst ein BYTE-Wert und anschließend ein 2-Byte-STRING geschrieben. Beim zweiten Zugriff wird zuerst ein 2-Byte-STRING und anschließend ein BYTE-Wert eingelesen. Ergebnis ist, dass nicht - wie anzunehmen - wieder zweimal die Ausgabe '33' erfolgt, sondern nur Datenmüll auf dem Bildschirm erscheint. Obwohl die Informationen fehlerfrei gelesen wurden, kann mit den Informationen nicht gearbeitet werden, da sie nach dem Lesen auf die falsche Art und Weise behandelt werden.
Werden beim Lesezugriff die beiden GET-Zeilen vertauscht, so erfolgt die korrekte Ausgabe:

33     33

Die Ursache hierfür liegt darin, dass im BINARY- und RANDOM-Modus (mit denen GET und PUT ja arbeiten) die Daten nicht in einem für Menschen lesbaren Format abgelegt werden, sondern binär behandelt werden, d. h. so geschrieben werden, wie sie vom Prozessor behandelt werden. Hierbei existieren Unterschiede zwischen der Behandlungsweise von Zeichenketten (des STRINGs) und Zahlen (des BYTE-Werts).

Unterschiede zu QB:

Unterschiede zu früheren Versionen von FreeBASIC:

Siehe auch:
BefehlsreferenzeintragPUT (Grafik), BefehlsreferenzeintragOPEN, BefehlsreferenzeintragBINARY, BefehlsreferenzeintragRANDOM, BefehlsreferenzeintragGET #, BefehlsreferenzeintragDateien (Files)


Zusätzliche Informationen und Funktionen
  • Der Referenzeintrag wurde am 08.08.2007 von Redakteurnemored angelegt.
  • Die aktuellste Version wurde am 05.08.2020 von Redakteurnemored gespeichert.
  Versionen Versionen