Delphi-PRAXiS
Seite 2 von 5     12 34     Letzte »    

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Eigenes Zeichen für Zeilenende bei ReadLN (https://www.delphipraxis.net/174953-eigenes-zeichen-fuer-zeilenende-bei-readln.html)

Ginko 21. Mai 2013 14:33

AW: Eigenes Zeichen für Zeilenende bei ReadLN
 
Also wenn sie fertig ist sollte sie so an die 200Mb sein. Vielleicht eher nur groß ...
Stringliste sollte dann rausfallen...

Bernhard Geyer 21. Mai 2013 14:45

AW: Eigenes Zeichen für Zeilenende bei ReadLN
 
ReadLn dürft doch schon auf der Liste der gefährdeten Funktionen stehen.
Sie sind eh eingeschränkt (Kein Unicode-Support), Verursachen teilweise komische Fehler (umstellung auf TFileStream und Co-Methoden haben die Fehler verschwinden lassen) und könnten im Rahmen des zukünftigen LLV-Compilerprojektes entfernt werden.

Ginko 21. Mai 2013 14:51

AW: Eigenes Zeichen für Zeilenende bei ReadLN
 
Ist es bei TFileStream und Co-Methoden auch möglich mit Textdateien so zu arbeiten, dass nicht die ganze Datei in den Speicher geladen wird ?

Sir Rufo 21. Mai 2013 14:54

AW: Eigenes Zeichen für Zeilenende bei ReadLN
 
Zitat:

Zitat von Ginko (Beitrag 1215941)
Ist es bei TFileStream und Co-Methoden auch möglich mit Textdateien so zu arbeiten, dass nicht die ganze Datei in den Speicher geladen wird ?

Ein Delphi-Referenz durchsuchenTStream ist erst einmal nur eine Ansammlung von zusammenhängenden Bytes, die z.B. in einer Datei Delphi-Referenz durchsuchenTFileStream liegen oder im Speicher Delphi-Referenz durchsuchenTMemoryStream.

Ginko 21. Mai 2013 15:05

AW: Eigenes Zeichen für Zeilenende bei ReadLN
 
Delphi-Quellcode:
var
  FileStrm1: TFileStream;
  tmpStr1, SuchWort: String;
  len: Cardinal;
  startpos: Integer ;
begin
  FileStrm1:= TFileStream.Create(Dateiname,fmOpenRead or fmShareCompat);
  try
    SuchWort:= Edit2.Text
    SetLength(tmpStr1, Length(SuchWort));
    startpos:= StrToInt(Edit3.Text);

    FileStrm1.Seek(startpos,soFromBeginning);
    FileStrm1.ReadBuffer(tmpStr1[1], Length(tmpStr1));

    ShowMessage('Wort: ' + tmpStr1 +' || Position: ' +IntToStr(FileStrm1.Position));
  finally
    FreeAndNil(FileStrm1);
  end;
Also bei diesem Vorgang würde der Speicher nur um ca. die größe von tmpStr1 anwachsen ?

Perlsau 21. Mai 2013 15:06

AW: Eigenes Zeichen für Zeilenende bei ReadLN
 
Zitat:

Zitat von Ginko (Beitrag 1215935)
Die Textdatei resultiert aus der Umwandlung einer PDF-Datei in Text und sieht wie folgt aus.
Code:
Zeilentext #13#10
Zeilentext #13#10
...
§Zeilentext #13#10
Zeilentext #13#10
...
§Zeilentext #13#10
Zeilentext #13#10
...
Wobei hier § (in wirklichkeit ist es #12) einen neuen Seitenanfang kennzeichnet (der urspr. PDF-Datei).
Ich glaube baumina hat es auch richtig verstanden, allerdings gibt es bei mir (mit obiger Lösung) noch das Problem das hinter dem § Zeichen noch der Rest mitübernommen wird (§Zeilentext #13#10).

Mir ist noch immer nicht so recht klar, was du eigentlich mit dem Text zu tun beabsichtigst. Nehmen wir einmal an, du liest deine Textdatei via Stringliste ein:
Delphi-Quellcode:
procedure TForm1.TextEinlesen(Datei: String; Liste: TStrings);
begin
   if FileExists(Datei) then
   Liste.LoadFromFile(Datei) else
   ShowMessage('Die Datei existiert nicht.');
end;
Danach hast du in der zurückgelieferten Stringliste die ganze Textdatei. Nun kannst du die bearbeiten: z.B. Nach Seiten-Ende-Zeichen suchen und gegebenenfalls einen leeren Absatz in deine Darstellungskomponente (Memo, RichEdit) einfügen. Ein Zeilen-Ende-Zeichen benötigst du nicht extra, das ist ja schon in der Textdatei enthalten. Wenn du eigentlich Seiten-Ende statt Zeilen-Ende gemeint hattest, solltest du das auch mitteilen. Aber auch Seiten-Ende-Zeichen scheinen in deiner Datei bereits vorhanden zu sein. Ehrlich gesagt, ich verstehe dein Problem nicht. Oder besser: Schreib doch einmal genau, was dir Probleme macht.

Ginko 21. Mai 2013 15:16

AW: Eigenes Zeichen für Zeilenende bei ReadLN
 
Es soll auf der Seite im Text gesucht werden, allerdings benötige ich zum Suchergebnis zusätzlich Informationen, die am Ende einer Seite stehen, dehalb soll immer eine ganze Seite eingelesen werden.

Ich habe es jetzt erstmal so gelöst das ich einfach mal alle Linebreaks mit StringReplace gelöscht habe und nur das § Zeichen (bzw #12) durch einen Linebreak ersetzt habe. Allerdings geht mir dann die ursprüngliche Strukur verloren...

Perlsau 21. Mai 2013 15:16

AW: Eigenes Zeichen für Zeilenende bei ReadLN
 
Zitat:

Zitat von Ginko (Beitrag 1215937)
Also wenn sie fertig ist sollte sie so an die 200Mb sein. Vielleicht eher nur groß ...
Stringliste sollte dann rausfallen...

Auch das verstehe ich nicht: Was meinst du mit "Stringliste rausfallen"?

Luckie 21. Mai 2013 15:18

AW: Eigenes Zeichen für Zeilenende bei ReadLN
 
Er ist wohl der Meinung, dass eine StringListe für so große Dateien nicht geeignet wäre.

Ginko 21. Mai 2013 15:20

AW: Eigenes Zeichen für Zeilenende bei ReadLN
 
Dann hätte ich 200MB Speicherverbrauch wenn ich die ganze Datei in eine Stringlist laden würde...


Alle Zeitangaben in WEZ +1. Es ist jetzt 06:45 Uhr.
Seite 2 von 5     12 34     Letzte »    

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