4.10.10 Text in Dateien speichernAlle Textobjekte können ihren Text direkt in eine Datei schreiben und direkt aus einer Datei lesen. Das ist insbesondere für LargeText-Objekte interessant. Dazu werden die folgenden Methoden unterstützt.
Die Methoden WriteToFile, ReplaceFromFile, InsertFromFile und FileTextSize arbeiten mit normalen DOS-Dateien bzw. gleichwertig mit GEOS-DATEN-Dateien. Dabei kann gleichzeitig der Zeichensatz konvertiert werden (z.B. GEOS nach Windows), da im Hintergrund die Convert$-Funktion aufgerufen wird. Die Methoden WriteToVMFile, ReplaceFromVMFile, InsertFromVMFile und VMFileTextSize arbeiten mit GEOS VM-Dateien. VM-Dateien sollten Sie verwenden, wenn Sie mehr als nur einen Text (z.B. mehrere unabhängige Texte oder Text und Bilder) in einer einzigen Datei speichern wollen. Alle "großen" Applikationen (z.B. GeoWrite, GeoDraw, R-BASIC) speichern ihre Dokumente in VM-Dateien. Um diese Methoden verwenden zu können, müssen Sie die Library "VMFiles" includen. Diese Library kann separat von der R-BASIC Webseite heruntergeladen werden.
WriteToFileWriteToFile schreibt den vom Textobjekt dargestellten Text in eine offene DOS- oder GEOS-Daten-Datei. Sie können auswählen, ob die Zeichen dabei in einen anderen Zeichensatz (z.B. DOS oder HTML) konvertiert werden sollen und ob der gesamte Text oder nur Teile davon in der Datei gespeichert werden sollen.WriteToFile schreibt immer ab der aktuellen Dateiposition, vorhandene Daten werden überschrieben. Bei Bedarf wird die Datei verlängert.
Syntax: <obj>.WriteToFile fh [, convertMode [, start [, end] ] ]
fh: Variable oder Ausdruck vom Typ FILE.
Die Datei muss offen sein.
convertMode: Bestimmt, zwischen welchen Zeichensätzen konvertiert
werden soll. Siehe unten.
Defaultwert: Null (keine Konvertierung)
start: Cursorposition, ab der geschrieben werden soll.
Die Zählung beginnt bei Null.
Defaultwert: Null (von Anfang an)
end: Cursorposition, bis zu der geschrieben werden soll.
Die Zählung beginnt bei Null.
End darf größer als die Textlänge sein.
Defaultwert: 4 294 967 294 (alles)
Hinweise:
Beispiele: | ||||||||||||||||||
' Kompletten Text in eine (offene) Datei schreiben. ' Zeichen in den Windows-Zeichensatz konvertieren ' GEOS-Zeilenumbrüche durch DOS-Zeilenumbrüche ersetzen MyTextObj.WriteToFile fh, GEOS_TO_WIN + CR_TO_CRLF | ||||||||||||||||||
' 200 Zeichen mit HTML Codierung schreiben ' "trw" öffnet evtl. vorhandene Dateien und schneidet sie ab. DIM fh as FILE fh = FileCreate "FILE.TXT", "trw" MyText.WriteToFile fh, GEOS_TO_HTML + CR_TO_CRLF, 0, 200 FileClose fh | ||||||||||||||||||
ReplaceFromFileReplaceFromFile ersetzt den aktuellen Text durch den in einer Datei (DOS-Datei oder GEOS-Daten-Datei) enthaltenen Text. Dabei wird der Text bis zum Dateiende oder bis zum Auftreten einer Ende-Null eingelesen. Eine Prüfung auf ungültige Zeichen erfolgt nicht.Sie können die zu Textmenge begrenzen und festlegen ob der Text in einen anderen Zeichensatz (z.B. von HTML nach GEOS) konvertiert werden soll. ReplaceFromFile liest immer ab der aktuellen Dateiposition und verschiebt den Dateizeiger hinter den gelesenen Text.
Syntax: <obj>.ReplaceFromFile fh [, convertMode [, maxLen ] ]
fh: Variable oder Ausdruck vom Typ FILE.
Die Datei muss offen sein.
convertMode: Bestimmt, zwischen welchen Zeichensätzen konvertiert
werden soll. Siehe unten.
Defaultwert: Null (keine Konvertierung)
maxLen: Maximale Anzahl zu lesender Zeichen. MaxLen bezieht
sich auf die Datei, die Anzahl der erzeugten
(d.h. an das Textobjekt übergebenen) Zeichen kann je
nach convertMode abweichen.
Defaultwert: 4 294 967 294 (alles)
Hinweise:
Für LargeText-Objekte existiert dieses Problem nicht. Beispiele: | ||||||||||||||||||
' Den kompletten Text aus einer (offenen) DOS-Datei ersetzen MyTextObj.ReplaceFromFile fh, DOS_TO_GEOS + CRLF_TO_CR | ||||||||||||||||||
' Den Text durch maximal 200 Zeichen aus einer (offenen) HTML- ' Datei ersetzen. Die 200 Zeichen beziehen sich auf die Datei. MyTextObj.ReplaceFromFile fh, HTML_TO_GEOS + CRLF_TO_CR, 200 | ||||||||||||||||||
InsertFromFileInsertFromFile fügt Text aus einer Datei an der aktuellen Cursorposition ein. Wenn etwas selektiert ist, wird der neue Text hinter dem selektierten Bereich eingefügt. Ansonsten gelten die bei ReplaceFromFile angegebenen Hinweise.Syntax: <obj>.InsertFromFile fh [, convertMode [, maxLen ] ] FileTextSizeFileTextSize ermittelt die Anzahl der Zeichen, die aus einer offenen DOS- oder GEOS-Daten-Datei mit ReplaceFromFile oder InsertFromFile maximal gelesen werden können. Dabei wird ab der aktuellen Dateiposition begonnen und am Dateiende bzw. der nächsten Ende-Null abgebrochen. Die Ende-Null wird (wenn vorhanden) nicht mitgezählt.Wird ein Parameter für convertMode angegeben, so wird die Anzahl der Zeichen nach der Konvertierung zurückgeliefert.
Syntax: <numVar> = <obj>.FileTextSize ( fh [, convertMode ] )
fh: Variable oder Ausdruck vom Typ FILE.
Die Datei muss offen sein.
convertMode: Bestimmt, zwischen welchen Zeichensätzen konvertiert
werden soll. Siehe ReplaceFromFile.
Defaultwert: Null (keine Konvertierung)
Anmerkung: FileTextSize ist zwar eine Textobjekt-Methode, verwendet aber die Eigenschaften des Textobjekts selbst nicht. Beispiel | ||||||||||||||||||
DIM size
size = DemoMemo.FileTextSize(fh, GEOS_TO_HTML)
IF size <= 4000 THEN
DemoMemo.ReplaceFromFile fh , GEOS_TO_HTML
ELSE
MsgBox "Der Text wäre" + Str$(size-4000) + " Zeichen zu lang."
End IF
| ||||||||||||||||||
WriteToVMFileWriteToVMFile schreibt den Text als VMArray in eine offene VM-Datei und liefert das VMBlock-Handle des VMArrays zurück. Um WriteToVMFile verwenden zu können, müssen Sie die Library "VMFiles" includen. Diese kann separat von der R-BASIC Webseite heruntergeladen werden.
Syntax: <hanVar> = <obj>.WriteToVMFile fh [, start [, end] ]
hanVar: Variable vom Typ Handle
fh: Variable oder Ausdruck vom Typ FILE.
Die Datei muss offen und eine VM-Datei sein.
start: Cursorposition, ab der geschrieben werden soll.
Die Zählung beginnt bei Null.
Defaultwert: Null (von Anfang an)
end: Cursorposition, bis zu der geschrieben werden soll.
Die Zählung beginnt bei Null.
End darf größer als die Textlänge sein.
Defaultwert: 4 294 967 294 (alles)
Hinweise:
ReplaceFromVMFileReplaceFromVMFile ersetzt den aktuellen Text durch den in einer VM-Datei enthaltenen Text. Um ReplaceFromVMFile verwenden zu können, müssen Sie die Library "VMFiles" includen.
Syntax: <obj>.ReplaceFromVMFile fh, block
fh: Variable oder Ausdruck vom Typ FILE.
Die Datei muss offen und eine VM-Datei sein.
block: Handle auf ein von WriteToVMFile geschriebenes VMArray.
Hinweise:
InsertFromVMFileInsertFromVMFile fügt den in einer VM-Datei enthaltenen Text an der aktuellen Cursorposition ein. Ist etwas selektiert, so wird der neue Text hinter dem selektierten Bereich eingefügt.Ansonsten gelten die bei ReplaceFromVMFile angegebenen Hinweise.
Syntax: <obj>.ReplaceFromVMFile fh, block
fh: Variable oder Ausdruck vom Typ FILE.
Die Datei muss offen und eine VM-Datei sein.
block: Handle auf ein von WriteToVMFile geschriebenes VMArray.
Beispiele Die Routine SaveToVMFile speichert den Text eines Textobjekts in einer Datei. Der Parameter "t" bei VMOpen sorgt dafür, dass die Datei nach dem Öffnen abgeschnitten wird, also leer ist. Das neue VMArray wird als "Mapblock" gesetzt, damit man später einfach darauf zugreifen kann. | ||||||||||||||||||
SUB SaveToVMFile()
DIM fh AS FILE
DIM blk AS HANDLE
fh = VMOpen("VMTextFile", "trw")
blk = DemoLargeText.WriteToVMFile(fh)
VMSetMapBlock(fh, blk)
VMClose(fh)
End SUB
| ||||||||||||||||||
|
Die Routine LoadFormVMFile liest den Text aus der von SaveToVMFile angelegten Datei. Bei VMOpen darf der Parameter "t" nicht angegeben werden, damit die Daten beim Öffnen der Datei erhalten bleiben.
Das VMArray mit dem Text wurde als "Mapblock" gesetzt, so kann man wieder darauf zugreifen. | ||||||||||||||||||
SUB LoadFromVMFile()
DIM fh AS FILE
DIM blk AS HANDLE
fh = VMOpen("VMTextFile", "rw")
blk = VMGetMapBlock(fh)
DemoLargeText.InsertFromVMFile(fh, blk)
VMClose(fh)
End SUB
| ||||||||||||||||||
| Da WriteToVMFile jeweils ein neues VMArray anlegt, ist das "Ersetzen" eines Texts in einem VMArray nicht möglich. Also muss man das "alte" VMArray manuell vernichten, und stattdessen das neue VMArray verwenden. | ||||||||||||||||||
FUNCTION ReplaceVMArray(fh AS FILE) AS HANDLE DIM oldArray, newArray AS HANDLE ' Neues VMArray anlegen und als MapBlock setzen ' danach altes Array vernichten (nur wenn existent!) oldArray = VMGetMapBlock(fh) newArray = DemoMemo.WriteToVMFile(fh) VMSetMapBlock(fh, newArray) IF oldArray <> NullHandle() THEN VMArrayDestroy (fh, oldArray) RETURN newArray End FUNCTION | ||||||||||||||||||
Ein Beispiel, wie man mehrere unabhängige Texte in einer einzigen VM-Datei speichert, finden Sie in der Beispieldatei "Text Speichern, komplex, VM-Datei" im Ordner "Beispiel\Objekte\Text". Dabei wird der Text nicht mehr direkt als Mapblock gesetzt.
VMFileTextSizeVMFileTextSize ermittelt die Anzahl der Zeichen eines in einer VM-Datei gespeicherten Textes. Die Ende-Null wird nicht mitgezählt.
Syntax: <numVar> = <obj>.VMFileTextSize ( fh, block )
fh: Variable oder Ausdruck vom Typ FILE.
Die Datei muss offen und eine VM-Datei sein.
block: Handle auf ein von WriteToVMFile geschriebenes VMArray.
Anmerkungen:
Beispiel | ||||||||||||||||||
DIM size DIM fh as FILE DIM block as HANDLE < fh und block belegen > size = DemoMemo.VMFileTextSize(fh, block) MsgBox "Die Datei enthält " + Str$(size) + " Zeichen." | ||||||||||||||||||
Tipps und Tricks: Wie kann man ...
| ||||||||||||||||||
obj.WriteToVMFile fh , obj.cursorPos , obj.selectionEnd | ||||||||||||||||||
^Konvertierfunktionen für macOS & Linux - Neue Funktionen in R-BASIC 1.02 |