Anfängerfragen zum Programmieren mit PureBasic.
stevie1401
Beiträge: 700 Registriert: 19.10.2014 15:51
Kontaktdaten:
Beitrag
von stevie1401 » 30.06.2015 18:37
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
jojo1541
Beiträge: 431 Registriert: 15.09.2007 17:12
Wohnort: Irgendwo im Nirgendwo
Beitrag
von jojo1541 » 30.06.2015 18:59
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.
7x7
Beiträge: 591 Registriert: 14.08.2007 15:41
Computerausstattung: ganz toll
Wohnort: Lelbach
Beitrag
von 7x7 » 30.06.2015 20:00
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:
Beitrag
von stevie1401 » 30.06.2015 20:33
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
Beitrag
von Andreas21 » 30.06.2015 20:38
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
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
Beitrag
von NicTheQuick » 30.06.2015 20:41
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.
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
Beitrag
von ts-soft » 30.06.2015 20:43
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.
stevie1401
Beiträge: 700 Registriert: 19.10.2014 15:51
Kontaktdaten:
Beitrag
von stevie1401 » 30.06.2015 21:46
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
Kiffi
Beiträge: 10711 Registriert: 08.09.2004 08:21
Wohnort: Amphibios 9
Beitrag
von Kiffi » 30.06.2015 21:53
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²
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
Beitrag
von NicTheQuick » 30.06.2015 21:54
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.