Binäre Datei einlesen, String anhängen, wieder abspeichern

Anfängerfragen zum Programmieren mit PureBasic.
Benutzeravatar
Delle
Beiträge: 1130
Registriert: 10.05.2005 22:48

Binäre Datei einlesen, String anhängen, wieder abspeichern

Beitrag von Delle »

Okay das macht man sicher mit OpenFile() ... und wie weiter?

Eine Schleife mit Read...(), aber welches genau für binäre Daten?

Vermisse so eine einfache Funktion wie in PHP:

$inhalt = implode("",file($datei));
Icke
Beiträge: 143
Registriert: 08.09.2004 13:19

Beitrag von Icke »

Ein kleines Beispiel. Ich hab eine JPG mal erweitert, das Ergebnis bleibt weiterhin ohne irgendwelche Symptome ausführbar...

Code: Alles auswählen

ReadFile(0,"d:\1.jpg")
CreateFile(1,"d:\2.jpg")

Repeat
  
  UseFile(0)
  a=ReadByte()
  
  UseFile(1)
  WriteByte(a)
  
Until Eof(0)


a$="--- Das hängen wir dran ---"

Repeat
  
  zaehler+1
  
  a=Asc(Mid(a$,zaehler,1))
  
  WriteByte(a)
  
Until a=0

CloseFile(0)

CloseFile(1)
Danach die Ergebnisdatei einfach mal mit Hex oder Texteditor öffnen und ans Ende schaun.

.
Benutzeravatar
Batze
Beiträge: 1492
Registriert: 03.06.2005 21:58
Wohnort: Berlin
Kontaktdaten:

Beitrag von Batze »

Es gibt doch FileSeek() !
Warum so umständlich? :?

Code: Alles auswählen

OpenFile(0,"d:\1.jpg")
FileSeek(Lof())

a$="--- Das hängen wir dran ---"
WriteString(a$)

CloseFile(0) 
Edit: Wie bin ich nur auf Lof()-1 gekommen? :oops:
Zuletzt geändert von Batze am 19.07.2005 19:44, insgesamt 1-mal geändert.
Hier sind meine Codes (aber die Seite geht gerade nicht):
http://www.basicpure.de.vu
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

Beitrag von ts-soft »

>> FileSeek(Lof()-1)

Warum -1, Sicher ??
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
Benutzeravatar
Deeem2031
Beiträge: 1232
Registriert: 29.08.2004 00:16
Wohnort: Vorm Computer
Kontaktdaten:

Beitrag von Deeem2031 »

Also ich hab auch immer FileSeek(Lof()) benutzt (also ohne -1).
Ist meiner Meinung nach auch richtig. Wenn eine Datei 1 Byte groß ist und man ans Ende springen will, springt man an Stelle 1 und nicht 1-1 (0 ;) ), das wär ja das eine Byte was am Anfang steht.
Bild
[url=irc://irc.freenode.org/##purebasic.de]irc://irc.freenode.org/##purebasic.de[/url]
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

Beitrag von ts-soft »

Deeem2031 hat geschrieben:Also ich hab auch immer FileSeek(Lof()) benutzt (also ohne -1).
Ist meiner Meinung nach auch richtig. Wenn eine Datei 1 Byte groß ist und man ans Ende springen will, springt man an Stelle 1 und nicht 1-1 (0 ;) ), das wär ja das eine Byte was am Anfang steht.
Danke, so mach ich es auch :allright: , wollte mich nur vergewissern
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
Benutzeravatar
redacid
Beiträge: 581
Registriert: 29.08.2004 17:06

Beitrag von redacid »

Es gibt doch auch eof() (End of file), oder irre ich mich da? Wäre noch etwas eleganter, wie ich finde :)
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

Beitrag von ts-soft »

redacid hat geschrieben:Es gibt doch auch eof() (End of file), oder irre ich mich da? Wäre noch etwas eleganter, wie ich finde :)
EOF ist doch nur ein Flag, das #True ergibt wenn du das ende erreicht hast, du muß also durch die ganze Datei iterieren, was natürlich dauert. Zum anhängen von Daten wäre das umständlich und langsam :)

Nachtrag: ts-soft wahr 60 sekunden schneller als der düstere Drachen :D
Zuletzt geändert von ts-soft am 19.07.2005 16:06, insgesamt 1-mal geändert.
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
DarkDragon
Beiträge: 6291
Registriert: 29.08.2004 08:37
Computerausstattung: Hoffentlich bald keine mehr
Kontaktdaten:

Beitrag von DarkDragon »

redacid hat geschrieben:Es gibt doch auch eof() (End of file), oder irre ich mich da? Wäre noch etwas eleganter, wie ich finde :)
Das ist aber nur zum rausfinden, ob die aktuelle Position dem End of File entspricht. Deswegen hat ja die Diskussion angefangen ;) . FileSeek(Lof()) so mach ich das auch immer, wenn ich ans Ende will.
Angenommen es gäbe einen Algorithmus mit imaginärer Laufzeit O(i * n), dann gilt O((i * n)^2) = O(-1 * n^2) d.h. wenn man diesen Algorithmus verschachtelt ist er fertig, bevor er angefangen hat.
Benutzeravatar
redacid
Beiträge: 581
Registriert: 29.08.2004 17:06

Beitrag von redacid »

oh Mist, ich dachte, ich hätte im Hinterkopf, dass EOF() ein normaler Befehl ist, um eben an das Ende einer Datei zu hüpfen. Das kommt davon, wenn man seit Ewigkeiten nichts mehr programmiert hat... /:->
Antworten