Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Methode um große und schwere Txt Dateien zu lesen und bearbeiten (https://www.delphipraxis.net/170005-methode-um-grosse-und-schwere-txt-dateien-zu-lesen-und-bearbeiten.html)

TRUCKERmas 24. Aug 2012 23:25

Delphi-Version: 7

Methode um große und schwere Txt Dateien zu lesen und bearbeiten
 
Hallo!

Ich suche einen Weg Text dateien mit ca. 160.000 Zeilen
und mit unbekannten Zeichen wie diesen:
http://vvcap.net/db/iCoggSvFCCEplfOXbMol.htp (so sieht das in Notepad++ aus)
umzugehen.
Ich möchte in der Datei nach einem String suchen (Ganz normale
Buchstaben) und dann einige Linien unter dem String
etwas zu ersetzen.


Weiß jemand wie das geht?
Wenn ich in ein Memo die Datei reinlade dann wird nur die erste
linie "beladen"

himitsu 24. Aug 2012 23:29

AW: Methode um große und schwere Txt Dateien zu lesen und bearbeiten
 
Ist nur Text in der Datei?

Bei Antreffen des Zeichens #0 hört das Memo mit dem Laden auf. (Probleme mit den C-Strings, auch 0-terminierte Strings genannt :roll: und in Delphi als PChar anzutreffen )

TStringList, TFileStream, TTextStream uvm.

[edit]
Pech gehabt ... #0 (NUL)
Dann fallen TStringList und Memo definitiv aus.


PS: Man darf Bilder auch direkt hier anhängen. :zwinker:

TRUCKERmas 24. Aug 2012 23:35

AW: Methode um große und schwere Txt Dateien zu lesen und bearbeiten
 
Werd ich mal probieren, danke!

Sir Rufo 25. Aug 2012 00:28

AW: Methode um große und schwere Txt Dateien zu lesen und bearbeiten
 
Zitat:

Zitat von himitsu (Beitrag 1179802)
Pech gehabt ... #0 (NUL)
Dann fallen TStringList und Memo definitiv aus.

Wieso sollten die rausfallen? Ok, direkt dort reinladen geht nicht (Grund #0), aber mit einem passenden Wrapper/Adapter wäre das durchaus möglich.

Allerdings gehe ich auch davon aus, dass die Programmierung eines solchen den TE noch überfordern würde :)

Popov 25. Aug 2012 01:23

AW: Methode um große und schwere Txt Dateien zu lesen und bearbeiten
 
@TRUCKERmas

Also ich weiß nicht ob es evtl. mit Tricks gehen würde, aber normalerweise kann man es so (wie deine Grafik) es mit dem Memo nicht machen.

TRichEdit bietet da mehr Möglichkeiten. Die Datei darf nicht direkt in die Komponente geladen werden, Grund siehe vorherige Beiträge, sondern müsste beim Laden konvertiert werden. Nullen und andere Sonderzeichen müßten durch dies Kürzel (Steuerzeichen) ersetzt werden. Aber ich bin mal ehrlich, das Ganze würde einen gewissen Programmieraufwand bedeuten.

Machen könnte man es so wie es früher der Windows Write gemachte hat (das war ein einfaches Textverarbeitungsprogramm). Es las alles zwar ein, aber alle nicht darstellbaren Zeichen wurden durch ein Rechteck ersetzt. Im Hintergrund existierte aber das Zeichen weiter, so dass nach dem Speichern alles wieder beim alten war. Damit konnte man also sogar Programme laden, Manipulieren und wieder speichern. Das wäre schon einfacher in der Darstellung, aber immer noch etwas Programmieraufwand.

Wenn es nur um Darstellung, aber nicht um Änderung geht, ginge in einem gewissen Rahmen TListBox. Da kann man auf DrawItem zugreifen. Das bietet Möglichkeiten.

Aber wie auch immer, mit den Standardkomponente ist die Darstellung oben kaum möglich. Evtl. eine andere Komponente?

sx2008 25. Aug 2012 03:17

AW: Methode um große und schwere Txt Dateien zu lesen und bearbeiten
 
Also für mich ist das keine "grosse und schwere Txt Datei" sondern eine binäre Datei.
Und ich würde wetten, dass die Datei mit den Zeichen MZ beginnt und als Endung .exe oder .dll hat.
Vielleicht ist es auch eine Datei aus einem Spiel, aber egal, für binäre Dateien gelten ganz bestimmte Regeln:
1.) es gibt keine Zeilen
2.) beim Ändern von Inhalten darf die Dateilänge nicht verändert werden

Wenn es also um das Patchen von binären Dateien geht sollte man daran denken, dass andere Leute das Problem schon längst gelöst haben.
z.B. Swiss file knife und man findet bestimmt ein Dutzend weiterer Tools.

Wenn man es unbedingt selber programmieren will, dann nimmt man einen TFileStream und liest die Daten in Blöcken von 64kB ein.
Sollte das gesuchte Muster zufällig auf einer Blockgrenze liegen, wird es etwas knifflig, aber das sollte sich lösen lassen.

TRUCKERmas 6. Sep 2012 17:54

AW: Methode um große und schwere Txt Dateien zu lesen und bearbeiten
 
Zitat:

Zitat von Popov (Beitrag 1179811)
@TRUCKERmas

Also ich weiß nicht ob es evtl. mit Tricks gehen würde, aber normalerweise kann man es so (wie deine Grafik) es mit dem Memo nicht machen.

TRichEdit bietet da mehr Möglichkeiten. Die Datei darf nicht direkt in die Komponente geladen werden, Grund siehe vorherige Beiträge, sondern müsste beim Laden konvertiert werden. Nullen und andere Sonderzeichen müßten durch dies Kürzel (Steuerzeichen) ersetzt werden. Aber ich bin mal ehrlich, das Ganze würde einen gewissen Programmieraufwand bedeuten.

Machen könnte man es so wie es früher der Windows Write gemachte hat (das war ein einfaches Textverarbeitungsprogramm). Es las alles zwar ein, aber alle nicht darstellbaren Zeichen wurden durch ein Rechteck ersetzt. Im Hintergrund existierte aber das Zeichen weiter, so dass nach dem Speichern alles wieder beim alten war. Damit konnte man also sogar Programme laden, Manipulieren und wieder speichern. Das wäre schon einfacher in der Darstellung, aber immer noch etwas Programmieraufwand.

Wenn es nur um Darstellung, aber nicht um Änderung geht, ginge in einem gewissen Rahmen TListBox. Da kann man auf DrawItem zugreifen. Das bietet Möglichkeiten.

Aber wie auch immer, mit den Standardkomponente ist die Darstellung oben kaum möglich. Evtl. eine andere Komponente?

Wie es scheint passen in den Richedit nur 120 Zeilen, bei meinen min. 40k ist das viel zu wenig. Ich sehe
auch keine Methode wie ich ihm sage, dass er ab Zeile 120 reinladen soll.

Leider funktioniert die Methode wohl nicht.

p80286 6. Sep 2012 20:53

AW: Methode um große und schwere Txt Dateien zu lesen und bearbeiten
 
Zitat:

Zitat von sx2008 (Beitrag 1179815)
Also für mich ist das keine "grosse und schwere Txt Datei" sondern eine binäre Datei.

Dem ist eigentlich nichts hinzu zu fügen.
Nur weil da ein paar darstellbare Zeichen zu erkennen sind, handelt es sich noch längst nicht um eine Textdatei.
(und 4,6 Mb waren zu DOS-Zeiten vllt. groß und schwer)

Und statt eine fertige Komponente zu nutzen, ist selber programmieren vllt. eine Alternative.
Für die Datenanalyse würde sich ein HexEditor anbieten. Da sieht man alle in einer Datei enthaltenen Werte.

Gruß
K-H

DeddyH 7. Sep 2012 07:03

AW: Methode um große und schwere Txt Dateien zu lesen und bearbeiten
 
Und je nach Format der Datei kann man da nicht einfach mal so ein paar Zeichen ersetzen, zumindest nicht bei unterschiedlichen Stringlängen.


Alle Zeitangaben in WEZ +1. Es ist jetzt 13:06 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