![]() |
EOF beendet das Einlesen einer Datei vorzeitig
Ich habe eine sehr große Textdatei, welche mehrfach ein EOF, also enthält.
Ein Einlesen per Stream oder TStringList ist also nicht möglich. Wie kann ich diese Datei konvertieren bzw alle unnötigen EOF entfernen? |
AW: EOF beendet das Einlesen einer Datei vorzeitig
Wieso sollte da kein Stream gehen? Mit einem
Delphi-Quellcode:
kannst du die gesamte Datei rauf und runter ackern ... wie du lustig bist
TFileStream
|
AW: EOF beendet das Einlesen einer Datei vorzeitig
Habe das schon alles durch.
In Notepad++ wird mir das verdächtige Zeichen als NUL angezeigt, es kann aber nur ein #26, also EOF sein. Denn selbst ein Stream hört dort auf zu lesen. Edit: was ich noch dazu sagen sollte ist, dass die Datei kein BOM hat! |
AW: EOF beendet das Einlesen einer Datei vorzeitig
Dann hast du da eine Zauberdatei, die eine Aversion gegen Delphi hat :roll:
Ein
Delphi-Quellcode:
kann die Datei rauf und runter lesen und zwar jedes einzelne Byte (und ich sage Byte und nicht String)
TFileStream
|
AW: EOF beendet das Einlesen einer Datei vorzeitig
Ich kann die Datei extrem gekürzt mit genau diesem Zeichen mal hier rein stellen wenn du möchtest.
|
AW: EOF beendet das Einlesen einer Datei vorzeitig
Liste der Anhänge anzeigen (Anzahl: 1)
Datei mit seltsamen Zeichen in Zeile 4. Mit Notepad++ öffnen oder in Delphi einlesen.
Siehe Anhang.
Delphi-Quellcode:
sl := TStringList.Create;
try sl.LoadFromFile(aFile); showmessage(IntToStr(sl.Count - 1)); for i := 0 to sl.Count - 1 do begin showmessage(sl.Strings[i]); end; finally sl.Free; end; |
AW: EOF beendet das Einlesen einer Datei vorzeitig
Zitat:
Wenn du keinen Hex-Editor hast, dann kannst du dir ganz schnell selber einen bauen. Mit
Delphi-Quellcode:
die Datei öffnen und jedes Byte in Hex-Darstellung anzeigen lassen.
TFileStream
|
AW: EOF beendet das Einlesen einer Datei vorzeitig
Zitat:
MfG Dalai |
AW: EOF beendet das Einlesen einer Datei vorzeitig
Ok 00 sehe ich. Dann ist es doch nicht wie vermutet ein #26.
Was bedeutet dieses 00 denn nun? EOF ja wohl nicht, nehme ich an. Edit: Frage hat sich gerade geklärt. |
AW: EOF beendet das Einlesen einer Datei vorzeitig
Zitat:
Die wirkliche Bedeutung kommt erst durch den Kontext. Einfach nur 0 sagt nur 0 aus |
AW: EOF beendet das Einlesen einer Datei vorzeitig
TStrings/TStringList hält sich an die Speicherbedingungen für PChar (0-terminitere Strings aus WinAPI/C++).
Eine "normale" Textdatei enthält eigentlich keine #0, aber ob und wie ein(e) Programm/Komponente die "Daten" in einer Datei interpretiert kann unterschiedlich sein. TStrings/TStringList reagiert "standardmäßig" nunmal auf gewisse Zeichen, wie eben #0, #10 und #13, denn es verhält sie wie TMemo, dessen interne Windows-Komponente nunmal mit PChar arbeitet. |
AW: EOF beendet das Einlesen einer Datei vorzeitig
Zitat:
einen Zustand festlegen... Ich bin ja für die Killerbienen... |
AW: EOF beendet das Einlesen einer Datei vorzeitig
Zitat:
|
AW: EOF beendet das Einlesen einer Datei vorzeitig
Nochmal eine andere sachen, wollte keinen neuen Thread dafür erstellen :)
Immer lese ich, wenn man irgendwas extern lädt, oder auch intern:
Delphi-Quellcode:
-> Warum denn diese Try Finally Schleife, und warum muss man das Bild am Ende wieder freigeben?
Bild1:=TBitmap.Create; //Bild1 wird erstellt.
Try Bild1.LoadfromFile(ExtractFilepath(ParamStr(0)) + 'Items\Bild1.bmp'); //Bild1 wird geladen. Finally Bild1.Free; End; -> Als ich heute mein Programm öffnen wollte, hat mir Delphi gesagt: RLINK32: Out of memory! Hat/Kann das was damit zu tun haben, dass ich Bilder nicht freigebe? -> Als ich gestern gesehen habe, das man Icons dem Programm hinzufügen kann, habe ich das gleich gemacht, jeder Form über dem Objektinspektor. Später habe ich gesehen, das man über Projekt->Optionen->Anwendung->Symbol->Symbol laden , das ebenfalls machen kann, und sicherheitshalber auch nochmal da das Symbol hinzugefügt habe. Aber ich glaube das war nicht so gut :pale::pale: Denn es kommt auch der Fehler: Doppelte Ressource (...,...) -> Man muss doch sicher alles freigeben, auch Textfiles und und und, oder? |
AW: EOF beendet das Einlesen einer Datei vorzeitig
Zitat:
|
AW: EOF beendet das Einlesen einer Datei vorzeitig
Zitat:
Ausnahmsweise per Stream und nicht wie sonst per Blockread/Write :stupid:
Delphi-Quellcode:
oder halt klassisch
Procedure CorrectFile(F:String);
var MS : TMemoryStream; I : Integer; P : PByte; begin MS := TMemoryStream.Create; try MS.LoadFromFile(F); // geändert MS.Position := 0; P := MS.Memory; For i:=0 to MS.Size-1 do begin if P^ = $1A then // Dateiende P^ := $20; inc(p); end; MS.SaveToFile(F); // geändert finally MS.Free; end; end;
Delphi-Quellcode:
Procedure CorrectFile(F:String);
var FD : File; Buffer : Array of byte; Size,I : Integer; begin AssignFile(FD,F); Reset(FD,1); try Size := FileSize(FD); Setlength(Buffer,Size); Blockread(fd,Buffer[0],Size); Seek(FD,0); For i:=0 to Size-1 do if Buffer[i] = $1A then Buffer[i] := $20; Blockwrite(FD,Buffer[0],Size); finally Closefile(FD); end; end; Mavarik |
AW: EOF beendet das Einlesen einer Datei vorzeitig
Ein paar Ressourcenschutzblöcke wären nicht schlecht, und kann man sich die erste FileStream-Instanz nicht sparen und stattdessen LoadFromFile des MemoryStream nehmen, oder überseh ich da etwas?
|
AW: EOF beendet das Einlesen einer Datei vorzeitig
Zitat:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 22:35 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz