Übersetzung von GFA Basic nach Purebasic

Anfängerfragen zum Programmieren mit PureBasic.
stevie1401
Beiträge: 700
Registriert: 19.10.2014 15:51
Kontaktdaten:

Übersetzung von GFA Basic nach Purebasic

Beitrag 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.
Ich programmiere nur noch mit Linux.
Linux Mint 21.x
Benutzeravatar
jojo1541
Beiträge: 431
Registriert: 15.09.2007 17:12
Wohnort: Irgendwo im Nirgendwo

Re: Übersetzung von GFA Basic nach Purebasic

Beitrag von jojo1541 »

Schau dir am besten einmal die File-Bibliothek an.

Stichwörter: ReadFile/OpenFile, ReadString und Eof.

LG. JoJo
Ich verkaufe Rechtschreibfehler und jede menge GROßBUCHSTABEN. Alles unbegrenzt zu haben.
Benutzeravatar
7x7
Beiträge: 591
Registriert: 14.08.2007 15:41
Computerausstattung: ganz toll
Wohnort: Lelbach

Re: Übersetzung von GFA Basic nach Purebasic

Beitrag 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)
- alles was ich hier im Forum sage/schreibe ist lediglich meine Meinung und keine Tatsachenbehauptung
- unkommentierter Quellcode = unqualifizierter Müll
stevie1401
Beiträge: 700
Registriert: 19.10.2014 15:51
Kontaktdaten:

Re: Übersetzung von GFA Basic nach Purebasic

Beitrag 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?
Ich programmiere nur noch mit Linux.
Linux Mint 21.x
Andreas21
Beiträge: 390
Registriert: 30.08.2004 09:05
Computerausstattung: Desktop
Windows 10 Pro x64
CPU: AMD Ryzen 5 2600 3.40 GHz
Ram: 16GB RAM
Grafik: NVIDA Geforce 1060
PB: 5.72 X86/X64
Wohnort: Heidelberg

Re: Übersetzung von GFA Basic nach Purebasic

Beitrag 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)
Windows 10 x64 Pro - PB 5.61 X64 / x32 - PB 4.6 x32
Benutzeravatar
NicTheQuick
Ein Admin
Beiträge: 8807
Registriert: 29.08.2004 20:20
Computerausstattung: Ryzen 7 5800X, 64 GB DDR4-3200
Ubuntu 24.04.2 LTS
GeForce RTX 3080 Ti
Wohnort: Saarbrücken

Re: Übersetzung von GFA Basic nach Purebasic

Beitrag 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.
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Re: Übersetzung von GFA Basic nach Purebasic

Beitrag 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.
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild
stevie1401
Beiträge: 700
Registriert: 19.10.2014 15:51
Kontaktdaten:

Re: Übersetzung von GFA Basic nach Purebasic

Beitrag 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....
Ich programmiere nur noch mit Linux.
Linux Mint 21.x
Benutzeravatar
Kiffi
Beiträge: 10711
Registriert: 08.09.2004 08:21
Wohnort: Amphibios 9

Re: Übersetzung von GFA Basic nach Purebasic

Beitrag 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
a²+b²=mc²
Benutzeravatar
NicTheQuick
Ein Admin
Beiträge: 8807
Registriert: 29.08.2004 20:20
Computerausstattung: Ryzen 7 5800X, 64 GB DDR4-3200
Ubuntu 24.04.2 LTS
GeForce RTX 3080 Ti
Wohnort: Saarbrücken

Re: Übersetzung von GFA Basic nach Purebasic

Beitrag 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.
Antworten