AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Object-Pascal / Delphi-Language Methode um große und schwere Txt Dateien zu lesen und bearbeiten
Thema durchsuchen
Ansicht
Themen-Optionen

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

Ein Thema von TRUCKERmas · begonnen am 25. Aug 2012 · letzter Beitrag vom 7. Sep 2012
Antwort Antwort
TRUCKERmas

Registriert seit: 30. Apr 2009
16 Beiträge
 
Delphi 7 Enterprise
 
#1

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

  Alt 25. Aug 2012, 00:25
Delphi-Version: 7
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"
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.184 Beiträge
 
Delphi 12 Athens
 
#2

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

  Alt 25. Aug 2012, 00:29
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 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.
$2B or not $2B

Geändert von himitsu (25. Aug 2012 um 00:33 Uhr)
  Mit Zitat antworten Zitat
TRUCKERmas

Registriert seit: 30. Apr 2009
16 Beiträge
 
Delphi 7 Enterprise
 
#3

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

  Alt 25. Aug 2012, 00:35
Werd ich mal probieren, danke!
  Mit Zitat antworten Zitat
Benutzerbild von Sir Rufo
Sir Rufo

Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
 
Delphi 10 Seattle Enterprise
 
#4

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

  Alt 25. Aug 2012, 01:28
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
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ‎ea 0a 4c 14 0d b6 3a a4 c1 c5 b9 dc 90 9d f0 e9 de 13 da 60)
  Mit Zitat antworten Zitat
Popov
(Gast)

n/a Beiträge
 
#5

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

  Alt 25. Aug 2012, 02:23
@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?
  Mit Zitat antworten Zitat
Benutzerbild von sx2008
sx2008

Registriert seit: 16. Feb 2008
Ort: Baden-Württemberg
2.332 Beiträge
 
Delphi 2007 Professional
 
#6

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

  Alt 25. Aug 2012, 04:17
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.
  Mit Zitat antworten Zitat
TRUCKERmas

Registriert seit: 30. Apr 2009
16 Beiträge
 
Delphi 7 Enterprise
 
#7

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

  Alt 6. Sep 2012, 18:54
@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.
  Mit Zitat antworten Zitat
Benutzerbild von p80286
p80286

Registriert seit: 28. Apr 2008
Ort: Stolberg (Rhl)
6.659 Beiträge
 
FreePascal / Lazarus
 
#8

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

  Alt 6. Sep 2012, 21:53
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
Programme gehorchen nicht Deinen Absichten sondern Deinen Anweisungen
R.E.D retired error detector
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.625 Beiträge
 
Delphi 12 Athens
 
#9

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

  Alt 7. Sep 2012, 08:03
Und je nach Format der Datei kann man da nicht einfach mal so ein paar Zeichen ersetzen, zumindest nicht bei unterschiedlichen Stringlängen.
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  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 08:37 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