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.