Delphi-PRAXiS
Seite 2 von 2     12   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Algorithmen, Datenstrukturen und Klassendesign (https://www.delphipraxis.net/78-algorithmen-datenstrukturen-und-klassendesign/)
-   -   EOF beendet das Einlesen einer Datei vorzeitig (https://www.delphipraxis.net/184380-eof-beendet-das-einlesen-einer-datei-vorzeitig.html)

himitsu 21. Mär 2015 08:34

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.

Mavarik 22. Mär 2015 23:29

AW: EOF beendet das Einlesen einer Datei vorzeitig
 
Zitat:

Zitat von Sir Rufo (Beitrag 1294302)
Es kann alles bedeuten: Angriff der Killerbienen, Invasion vom Mars, 42-42, wieviel Lust ich heute zum Aufräumen habe, ...

Die wirkliche Bedeutung kommt erst durch den Kontext. Einfach nur 0 sagt nur 0 aus

Nein das kann man so nicht stehen lassen... Da Du mit einer Null nur maximal einen Zustand beschreiben kannst, must Du dich bei der Interpretation auch auf maximal
einen Zustand festlegen...

Ich bin ja für die Killerbienen...

Sir Rufo 22. Mär 2015 23:59

AW: EOF beendet das Einlesen einer Datei vorzeitig
 
Zitat:

Zitat von Mavarik (Beitrag 1294440)
Zitat:

Zitat von Sir Rufo (Beitrag 1294302)
Es kann alles bedeuten: Angriff der Killerbienen, Invasion vom Mars, 42-42, wieviel Lust ich heute zum Aufräumen habe, ...

Die wirkliche Bedeutung kommt erst durch den Kontext. Einfach nur 0 sagt nur 0 aus

Nein das kann man so nicht stehen lassen... Da Du mit einer Null nur maximal einen Zustand beschreiben kannst, must Du dich bei der Interpretation auch auf maximal
einen Zustand festlegen...

Ich bin ja für die Killerbienen...

Ja 0 beschreibt nur einen Zustand innerhalb eines Kontexts. Da aber der Kontext unbekannt ist wo dieser Zustand definiert ist kann es sich eben um jeden beliebigen Kontext und somit um jeden beliebigen Zustand handeln.

Grayknife 24. Mär 2015 14:41

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:
 Bild1:=TBitmap.Create;    //Bild1 wird erstellt.
 Try
 Bild1.LoadfromFile(ExtractFilepath(ParamStr(0)) + 'Items\Bild1.bmp'); //Bild1 wird geladen.
 Finally
 Bild1.Free;
 End;
-> Warum denn diese Try Finally Schleife, und warum muss man das Bild am Ende wieder freigeben?

-> 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?

DeddyH 24. Mär 2015 14:43

AW: EOF beendet das Einlesen einer Datei vorzeitig
 
Zitat:

Zitat von Grayknife (Beitrag 1294643)
Nochmal eine andere sachen, wollte keinen neuen Thread dafür erstellen :)

Das solltest Du aber, denn die Frage hat ja mit dem Thread-Thema nichts mehr zu tun.

Mavarik 24. Mär 2015 14:52

AW: EOF beendet das Einlesen einer Datei vorzeitig
 
Zitat:

Zitat von dGeek (Beitrag 1294296)
Datei mit seltsamen Zeichen

Dann mach doch einfach so etwas:
Ausnahmsweise per Stream und nicht wie sonst per Blockread/Write :stupid:

Delphi-Quellcode:
  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;
oder halt klassisch

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

DeddyH 24. Mär 2015 14:56

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?

Mavarik 24. Mär 2015 15:02

AW: EOF beendet das Einlesen einer Datei vorzeitig
 
Zitat:

Zitat von DeddyH (Beitrag 1294646)
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?

Stimmt... War bei mir ein compressed Stream... daher... Copy Buffer...


Alle Zeitangaben in WEZ +1. Es ist jetzt 08:11 Uhr.
Seite 2 von 2     12   

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