AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Datei mit "#0" schreiben?

Ein Thema von xZise · begonnen am 3. Apr 2007 · letzter Beitrag vom 3. Apr 2007
Antwort Antwort
Seite 2 von 2     12   
grizzly

Registriert seit: 10. Dez 2004
150 Beiträge
 
Delphi XE4 Professional
 
#11

Re: Datei mit "#0" schreiben?

  Alt 3. Apr 2007, 11:34
Bei meinem UnitUsage Projekt bin ich auch mal über Text-Dateien gestolpert, welche ein #0 beinhalteten (stand tatsächlich mal in einem Kommentar in einem Pascal-Sourcecode). Ärgerlich war, daß die TStringList beim Einlesen bei dem #0 aufgehört hat. Als ob Pascal C wäre!
Da ich sowieso eine Klasse von TStringList ableiten mußte, habe ich deshalb gleich deren Routine LoadFromStream(..) ersetzt. Diese Routine rief eine andere namens SetTextStr(..) auf, welche auf #0 prüfte. Den Teil hab' ich geändert (Minimaler Eingriff in den Original Code), danach hat die abgeleitete stringlist brav bis zum Ende gelesen. Vielleicht reicht ja so ein Eingriff bei Deinem Problem auch - zumindest für's Lesen?
(Siehe Source von UnitUsage, Datei DelDirective.pas)
Ansonsten hat ja TStringList mit #0 keine Probleme - Beim Schreiben wird's halt wieder klemmen

Gruß
Michael
  Mit Zitat antworten Zitat
Benutzerbild von xZise
xZise

Registriert seit: 3. Mär 2006
Ort: Waldbronn
4.303 Beiträge
 
Delphi 2009 Professional
 
#12

Re: Datei mit "#0" schreiben?

  Alt 3. Apr 2007, 11:38
Und genau mit dem schreiben hab ich das Problem ^^ Weil solange ich nirgens eine Datei mit #0 schreiben kann, kann ich auch nicht testen, ob er auch richtig liest (obwohl bisher es brav aussieht ^^)
Fabian
Eigentlich hat MS Windows ab Vista den Hang zur Selbstzerstörung abgewöhnt – mkinzler
  Mit Zitat antworten Zitat
Benutzerbild von 3_of_8
3_of_8

Registriert seit: 22. Mär 2005
Ort: Dingolfing
4.129 Beiträge
 
Turbo Delphi für Win32
 
#13

Re: Datei mit "#0" schreiben?

  Alt 3. Apr 2007, 12:41
Pointer(#0)^? Ein Pointer auf ein Literal? Aua.

Delphi-Quellcode:
var fs: TFileStream;
    buf: Char;
begin
  //...
  fs.Write(buf, 1);
  //...
end;
Manuel Eberl
„The trouble with having an open mind, of course, is that people will insist on coming along and trying to put things in it.“
- Terry Pratchett
  Mit Zitat antworten Zitat
grizzly

Registriert seit: 10. Dez 2004
150 Beiträge
 
Delphi XE4 Professional
 
#14

Re: Datei mit "#0" schreiben?

  Alt 3. Apr 2007, 12:49
[Editiert, um den größten Krampf meiner letzten Antwort loszuwerden. Hab' irgendwie das Thema verfehlt... ]

TStringList schreibt zumindest den Null Charakter brav raus (SaveToFile, welches intern einen TFileStream verwendet), lediglich das ReadFromFile fängt unnötigerweise mit dem Interpretieren an. Mit TStringList sollte es also wenig Probleme geben, solche Dateien zu erzeugen (Delphi 6).
Allerdings wird #0 als Zeilenumbruch interpretiert (Siehe z.B. Classes.pas procedure TStrings.SetTextStr(..); Das könnte einem beim Arbeiten mit der StringListe dann doch mal was verhageln...

Gruß
Michael
  Mit Zitat antworten Zitat
bigg
(Gast)

n/a Beiträge
 
#15

Re: Datei mit "#0" schreiben?

  Alt 3. Apr 2007, 13:12
@xZise: Leg ein Array of Byte an, das die Länge der Dateigröße besitzt. Anschließend liest du die Datei über FileOpen(), FileRead() in dein Array ein. Mit einer For-Schleife durchsuchst du nun Zeichen für Zeichen dein Array of Byte und kopierst dir die Segmente heraus die du benötigt. (zum Bleistift mit Copy() sofern es sich um ANSI-Dateien handelt) Den Dateiaufbau sollte man möglichst genau kennen... Abschließend noch ein FileClose ausführen. Fertig.
  Mit Zitat antworten Zitat
matashen

Registriert seit: 29. Jan 2007
Ort: daheim
471 Beiträge
 
Delphi 10.2 Tokyo Enterprise
 
#16

Re: Datei mit "#0" schreiben?

  Alt 3. Apr 2007, 13:27
Hallo,

warum nicht nach dieser Methode:

Seek(eof)
Zusatzdaten anhängen

und zum einlesen:
Seek(eof)
zurücklesen bis #0


Wär jetzt nur mal so eine grobe Idee ohne dass ich den Code grad im Kopf hab, aber dass müsste doch funktionieren.

Gruß Matthias
Matthias
Das Leben ist eines der härtesten.
  Mit Zitat antworten Zitat
Benutzerbild von 3_of_8
3_of_8

Registriert seit: 22. Mär 2005
Ort: Dingolfing
4.129 Beiträge
 
Turbo Delphi für Win32
 
#17

Re: Datei mit "#0" schreiben?

  Alt 3. Apr 2007, 14:42
Weil file of <typ> veraltet ist und es dafür FileStreams gibt?
Manuel Eberl
„The trouble with having an open mind, of course, is that people will insist on coming along and trying to put things in it.“
- Terry Pratchett
  Mit Zitat antworten Zitat
Benutzerbild von xZise
xZise

Registriert seit: 3. Mär 2006
Ort: Waldbronn
4.303 Beiträge
 
Delphi 2009 Professional
 
#18

Re: Datei mit "#0" schreiben?

  Alt 3. Apr 2007, 14:46
Also... Danke an den Borg (^^)... Jetzt funktioniert es wunderbar... Er trennt korrekt, und schreibt auch so wie ich das will thx ^^

PS: Wie kann man den im Notepad ein #0 einfügen?
Fabian
Eigentlich hat MS Windows ab Vista den Hang zur Selbstzerstörung abgewöhnt – mkinzler
  Mit Zitat antworten Zitat
brechi

Registriert seit: 30. Jan 2004
823 Beiträge
 
#19

Re: Datei mit "#0" schreiben?

  Alt 3. Apr 2007, 14:53
In Notepad geht das nicht.

Delphi-Quellcode:
var s: String;
begin
  fm := TfileStream.create(...);
  SetLength(s, fm.size);
  Read(s[1], fm.size);
  fm.free;
end;
und dann einfach mit dem String arbeiten, die ganze datei ist da drin

ein String endet immer mit #0, aber er wird nicht bei einer #0 abgeschnitten sondern die Länge wird mitgespeichert

bla := 'blub'#0'hallo' ist ein gültiger String
length(bla) = 10
PChar(bla) = 'blub'
bla[length(bla)+1] = #0
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 2     12   


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 08:57 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz