AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein Eigenes Zeichen für Zeilenende bei ReadLN
Thema durchsuchen
Ansicht
Themen-Optionen

Eigenes Zeichen für Zeilenende bei ReadLN

Ein Thema von Ginko · begonnen am 21. Mai 2013 · letzter Beitrag vom 23. Mai 2013
Antwort Antwort
Perlsau
(Gast)

n/a Beiträge
 
#1

AW: Eigenes Zeichen für Zeilenende bei ReadLN

  Alt 21. Mai 2013, 15:06
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.
  Mit Zitat antworten Zitat
Ginko

Registriert seit: 30. Aug 2008
208 Beiträge
 
FreePascal / Lazarus
 
#2

AW: Eigenes Zeichen für Zeilenende bei ReadLN

  Alt 21. Mai 2013, 15:16
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...

Geändert von Ginko (21. Mai 2013 um 15:18 Uhr)
  Mit Zitat antworten Zitat
Perlsau
(Gast)

n/a Beiträge
 
#3

AW: Eigenes Zeichen für Zeilenende bei ReadLN

  Alt 21. Mai 2013, 15:24
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.
Es soll also immer nur auf einer Seite gesucht werden? Wieso denn das? Möchtest du nicht im gesamten Textdokument nach deinem gesuchten Text fahnden?

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...
Na ist doch klar: Wenn du die Struktur eines Textes zerstörst, dann geht sie verloren. Wenn's regnet, wird man naß ...
  Mit Zitat antworten Zitat
Ginko

Registriert seit: 30. Aug 2008
208 Beiträge
 
FreePascal / Lazarus
 
#4

AW: Eigenes Zeichen für Zeilenende bei ReadLN

  Alt 21. Mai 2013, 15:29
Ja es soll im ganzen Text gesucht werden, Missverständnis.
Allerdings soll bei einem Fund, Informationen vom Ende der Seite (Seitenzahl etc.) an das Suchergebnis angehängt werden. Deshalb brauch ich bei ReadLn immer den Abschnitt bis zum Ende einer Seite... (Weil ich die Datei Zeilenweise durchsuche).

Meine obige Lösung mit Stringreplace ist nur ein Übergangslösung. Für die reine Suche reicht sie aber vollkommen.

Geändert von Ginko (21. Mai 2013 um 15:34 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#5

AW: Eigenes Zeichen für Zeilenende bei ReadLN

  Alt 21. Mai 2013, 15:34
Hast du dir mal meinen Vorschlag näher angeguckt? Dann pack die Seitenende-Zeile noch mit in die zweite StringListe. Durchsuche die zweite StringListe und die zusätzlichen Informationen findest du dann immer in der letzten Zeile der zweiten StringListe.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Ginko

Registriert seit: 30. Aug 2008
208 Beiträge
 
FreePascal / Lazarus
 
#6

AW: Eigenes Zeichen für Zeilenende bei ReadLN

  Alt 21. Mai 2013, 15:36
Ich schau mir das mal noch genauer an. Muss jetzt aber erstmal weg. Danke bis hier für die ANtworten.
  Mit Zitat antworten Zitat
Benutzerbild von jaenicke
jaenicke
Online

Registriert seit: 10. Jun 2003
Ort: Berlin
9.960 Beiträge
 
Delphi 12 Athens
 
#7

AW: Eigenes Zeichen für Zeilenende bei ReadLN

  Alt 21. Mai 2013, 15:42
Wie wäre es mit meinem entsprechenden Reader?
http://www.delphipraxis.net/151898-s...ei-reader.html
Eine .reg Datei dieser Größe habe ich damit inkl. Parsen in unter 5 Sekunden in einem Baum angezeigt bekommen.
Sebastian Jänicke
AppCentral
  Mit Zitat antworten Zitat
nahpets
(Gast)

n/a Beiträge
 
#8

AW: Eigenes Zeichen für Zeilenende bei ReadLN

  Alt 21. Mai 2013, 15:40
Hallo,

schau Dir bitte mal TFileStream genau an.

Dann liest Du damit "zeichenweise". Immer wenn Du auf #12 stößt, weißt Du, dass eine Seite zuende ist.

Ich versuche es mal mit Pseudocode:
Code:
erstelle eine Stringliste
erstelle einen Memorystream
erstelle einen Filestream
wiederhole
  lese ein Zeichen aus dem Filestream
  ist Zeichen = #12
    kopieren den memorystream in eine Stringliste
    // hier enthält die Stringliste nun genau eine Seite
      mache hier die erforderlichen Arbeiten für diese Seite
    leer Stringliste
    leere memeorystream
  ist Zeichen <> #12
    schreibe zeichen in memeorystream
wiederhole bis Dateiende
// Erforderlich für die letzte Seite, falls die nicht mit #12 enden sollte.
ist der Memorystream nicht leer
  kopieren den memorystream in eine Stringliste
  // hier enthält die Stringliste nun genau eine Seite
    mache hier die erforderlichen Arbeiten für diese Seite
Ende
  Mit Zitat antworten Zitat
Antwort Antwort


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 20:45 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