Seite 1 von 3
Übersetzung von GFA Basic nach Purebasic
Verfasst: 30.06.2015 18:37
von stevie1401
Wie übersetze ich folgenden GFA-Code nach Purebasic?
Code: Alles auswählen
ff=freefile
Open file for Input As # ff
s$ = Input$(LOF(# ff), # ff)
Close # ff
Ich möchte eine Datei in einen String laden.
Re: Übersetzung von GFA Basic nach Purebasic
Verfasst: 30.06.2015 18:59
von jojo1541
Schau dir am besten einmal die File-Bibliothek an.
Stichwörter: ReadFile/OpenFile, ReadString und Eof.
LG. JoJo
Re: Übersetzung von GFA Basic nach Purebasic
Verfasst: 30.06.2015 20:00
von 7x7
GfA-Basic für den PC kenne ich nur vom Namen her. Unter PureBasic kannst du keine Datei in EINEN(!) String einlesen, weil Strings bestimmten Bedingungen unterliegen (Null-Terminiert, Länge).
Aber du kannst eine Datei in den Speicher einlesen und dann damit machen was du willst.
Code: Alles auswählen
DateiName$="wasweissich" ; <-- !
DateiGroesse=FileSize(DateiName$)
*Buffer=AllocateMemory(DateiGroesse) ;Grenzen bei 32/64-Bit PB beachten
ff=ReadFile(#PB_Any, DateiName$)
ReadData(ff,*Buffer,DateiGroesse)
CloseFile(ff)
Re: Übersetzung von GFA Basic nach Purebasic
Verfasst: 30.06.2015 20:33
von stevie1401
Aber du kannst eine Datei in den Speicher einlesen und dann damit machen was du willst.
Das ist genau meine Frage.
Wie bekomme ich die eingelesene Datei in einen String?
Re: Übersetzung von GFA Basic nach Purebasic
Verfasst: 30.06.2015 20:38
von Andreas21
In der Hilfe mal unter Memory->PeekS() schauen.
Text$ = PeekS(*MemoryBuffer [, Length [, Format]])
Code: Alles auswählen
DateiName$="wasweissich" ; <-- !
DateiGroesse=FileSize(DateiName$)
*Buffer=AllocateMemory(DateiGroesse) ;Grenzen bei 32/64-Bit PB beachten
ff=ReadFile(#PB_Any, DateiName$)
ReadData(ff,*Buffer,DateiGroesse)
CloseFile(ff)
Text$ = PeekS(*Buffer,DateiGroesse)
FreeMemory(*Buffer)
Re: Übersetzung von GFA Basic nach Purebasic
Verfasst: 30.06.2015 20:41
von NicTheQuick
Wenn die Datei keine Nullbytes enthält, dann kannst du die gesamte Datei theoretisch in einem String speichern.
Code: Alles auswählen
Procedure.s getFileContent(file.s, type.i = #PB_Ascii)
Protected fileId.i, size.q, *buffer, string.s = ""
fileId = ReadFile(#PB_Any, file)
If (fileId)
size = Lof(fileId)
*buffer = AllocateMemory(size)
If (*buffer)
ReadData(fileId, *buffer, size)
string = PeekS(*buffer, size, type)
FreeMemory(*buffer)
EndIf
CloseFile(fileId)
EndIf
ProcedureReturn string
EndProcedure
Debug getFileContent("/home/nicolas/.bashrc")
@ Andreas21
Du überprüfst keinerlei Rückgabewerte. Das ist nicht besonders vorbildlich für einen Anfänger.
Re: Übersetzung von GFA Basic nach Purebasic
Verfasst: 30.06.2015 20:43
von ts-soft
stevie1401 hat geschrieben:Das ist genau meine Frage.
Wie bekomme ich die eingelesene Datei in einen String?
Garnicht, weil PB-Strings dies nicht unterstützen! Du kannst die Daten aber Base64 kodieren,
übertragen, und Base64 enkodieren! Also so, wie auch E-Mails funktionieren.
Base64 ist dann im Endeffekt ein String.
Re: Übersetzung von GFA Basic nach Purebasic
Verfasst: 30.06.2015 21:46
von stevie1401
Genau Base64 will ich verhindern, da das nicht richtig auf einem Linux-vServer läuft.
Deshalb wollte ich mir eine eigene Routine basteln, mit der dich Images per String übertragen kann....
Re: Übersetzung von GFA Basic nach Purebasic
Verfasst: 30.06.2015 21:53
von Kiffi
stevie1401 hat geschrieben:da das nicht richtig auf einem Linux-vServer läuft.
kann ich mir eigentlich nicht vorstellen. Kann das ein 'Linuxer' bestätigen? Thomas? Nic?
Grüße ... Peter
Re: Übersetzung von GFA Basic nach Purebasic
Verfasst: 30.06.2015 21:54
von NicTheQuick
Du kannst doch keine Bilder als String übertragen ohne sie als Base64 zu kodieren. Vergiss deine Idee ganz schnell wieder.
Entweder du überträgst binär oder Base64-kodiert. Für letzteres kannst du auch Strings verwenden.
Ich weiß auch nicht, was das mit einem vServer zu haben soll.