AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Algorithmen, Datenstrukturen und Klassendesign FreePascal Eine sehr große textbasierte Datei durchsuchen?
Thema durchsuchen
Ansicht
Themen-Optionen

Eine sehr große textbasierte Datei durchsuchen?

Ein Thema von begin.delphi · begonnen am 5. Dez 2017 · letzter Beitrag vom 6. Dez 2017
Antwort Antwort
Seite 1 von 2  1 2      
begin.delphi

Registriert seit: 31. Mai 2014
10 Beiträge
 
FreePascal / Lazarus
 
#1

AW: Eine sehr große textbasierte Datei durchsuchen?

  Alt 6. Dez 2017, 09:52
Was bedeutet "arbeiten und vor allem schnell" konkret?
Ist es die "aktuelle" GEDCOM Version?
Gibt es irgendwo Beispieldaten?
Unter arbeiten meine ich die ged-Datei lesen. Aber auch nicht alles, sondern nur nach bestimmten Namen suchen. Und mit schnell meine ich irgendwelche Vorgehensweise (TFileStream oder ReadLn) die schneller als die restlichen ist. Aus diesen zwei wäre das z.B. TFileStream.

Die eigentliche Datei habe ich noch nicht, aber eine Test-Datei, die ich mir selber erstellt habe. Meine, aber auch die eigentliche die ich noch bekomme, sind in der 5.5.1 Version.
  Mit Zitat antworten Zitat
Benutzerbild von p80286
p80286

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

AW: Eine sehr große textbasierte Datei durchsuchen?

  Alt 6. Dez 2017, 10:18
Unter arbeiten meine ich die ged-Datei lesen. Aber auch nicht alles, sondern nur nach bestimmten Namen suchen.
Je nachdem was Du suchst, erstes Vorkommen/alle Vorkommen, wird Dir nichts anderes übrig bleiben als die Datei vollständig zu lesen.

Gruß
K-H
Programme gehorchen nicht Deinen Absichten sondern Deinen Anweisungen
R.E.D retired error detector
  Mit Zitat antworten Zitat
begin.delphi

Registriert seit: 31. Mai 2014
10 Beiträge
 
FreePascal / Lazarus
 
#3

AW: Eine sehr große textbasierte Datei durchsuchen?

  Alt 6. Dez 2017, 10:22
Unter arbeiten meine ich die ged-Datei lesen. Aber auch nicht alles, sondern nur nach bestimmten Namen suchen.
Je nachdem was Du suchst, erstes Vorkommen/alle Vorkommen, wird Dir nichts anderes übrig bleiben als die Datei vollständig zu lesen.

Gruß
K-H
So wie ich das verstehe kann ich in der *.ged nicht wie bei XML zwischen Tags springen, da muss ich wohl wirklich die *.ged komplet linear lesen.
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

AW: Eine sehr große textbasierte Datei durchsuchen?

  Alt 6. Dez 2017, 10:39
Wenn der Inhalt sortiert ist, also in deinem Fall nach Namen, wenn du nach Namen suchen willst, dann kann man die Datei schon sehr schnell "überfliegen" und muß nicht alles lesen.

Man könnte sich vorher auch einen Index aufbauen, wo der Anfang jedes Datensatzes in einer Namensliste steht, um schnell zum gewünschten Datensatz springen zu können.
Vorallem wenn man mehrmals nacheinander sucht und die Liste der zu suchenden Namen nicht vorrher bekannt ist und man die nicht einfach in einem Lesedurchgang gemeinsam suchen könnte.
Ein Therapeut entspricht 1024 Gigapeut.
  Mit Zitat antworten Zitat
Benutzerbild von p80286
p80286

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

AW: Eine sehr große textbasierte Datei durchsuchen?

  Alt 6. Dez 2017, 11:28
Wenn der Inhalt sortiert ist, also in deinem Fall nach Namen, wenn du nach Namen suchen willst, dann kann man die Datei schon sehr schnell "überfliegen" und muß nicht alles lesen.

Man könnte sich vorher auch einen Index aufbauen, wo der Anfang jedes Datensatzes in einer Namensliste steht, um schnell zum gewünschten Datensatz springen zu können.
Vorallem wenn man mehrmals nacheinander sucht und die Liste der zu suchenden Namen nicht vorrher bekannt ist und man die nicht einfach in einem Lesedurchgang gemeinsam suchen könnte.
Und der Index fällt vom Himmel?

Wenn die Datei vorhanden ist, kennt man vllt. die Struktur, aber nicht den Inhalt. Der erschließt sich erst beim Lesen. Und irgendwie werde ich das Gefühl nicht los, daß es nicht darum geht einen Namen zu finden, sondern einen Datensatz, der an Hand eines Namens identifiziert wird.

@begin.delphi
Auch XML Dateien wollen gelesen werden, da gibt es kein umherspringen zwischen den Knoten ohne daß Daten gelesen werden. Das ist manchmal nicht offensichtlich aber es geht wirklich nicht ohne.

Gruß
K-H
Programme gehorchen nicht Deinen Absichten sondern Deinen Anweisungen
R.E.D retired error detector
  Mit Zitat antworten Zitat
begin.delphi

Registriert seit: 31. Mai 2014
10 Beiträge
 
FreePascal / Lazarus
 
#6

AW: Eine sehr große textbasierte Datei durchsuchen?

  Alt 6. Dez 2017, 11:41

Wenn die Datei vorhanden ist, kennt man vllt. die Struktur, aber nicht den Inhalt. Der erschließt sich erst beim Lesen. Und irgendwie werde ich das Gefühl nicht los, daß es nicht darum geht einen Namen zu finden, sondern einen Datensatz, der an Hand eines Namens identifiziert wird.
Ja, das stimmt. Da muss der passende Nachname gefunden werden, und wenn das gefunden wird, muss das Jahr ausgelesen werden, wann es diesen Nachnamen gab. Mehr nicht.
  Mit Zitat antworten Zitat
bra

Registriert seit: 20. Jan 2015
711 Beiträge
 
Delphi 10.2 Tokyo Enterprise
 
#7

AW: Eine sehr große textbasierte Datei durchsuchen?

  Alt 6. Dez 2017, 11:47
Ich würde auch sagen dass die Daten in eine Datenbank überführt werden sollten. Alles andere ist doch ein Heidenaufwand mit vermutlich unterirdischer Geschwindigkeit.
  Mit Zitat antworten Zitat
TiGü

Registriert seit: 6. Apr 2011
Ort: Berlin
3.071 Beiträge
 
Delphi 10.4 Sydney
 
#8

AW: Eine sehr große textbasierte Datei durchsuchen?

  Alt 6. Dez 2017, 10:46
Wenn es nur darum geht, das du für dich persönlich Informationen rausfischst, dann kannst du auch das kostenlose Notepad++ versuchen. Sehr mächtiger Editor.

EDIT: Vergiss es, ab 1 GB macht der auch die Grätsche und sagt, dass die Datei zu groß ist.

Geändert von TiGü ( 6. Dez 2017 um 10:48 Uhr)
  Mit Zitat antworten Zitat
jobo

Registriert seit: 29. Nov 2010
3.072 Beiträge
 
Delphi 2010 Enterprise
 
#9

AW: Eine sehr große textbasierte Datei durchsuchen?

  Alt 6. Dez 2017, 11:49
Unter arbeiten meine ich die ged-Datei lesen. Aber auch nicht alles, sondern nur nach bestimmten Namen suchen. Und mit schnell meine ich irgendwelche Vorgehensweise (TFileStream oder ReadLn) die schneller als die restlichen ist. Aus diesen zwei wäre das z.B. TFileStream.
Arbeiten:
Gut, ich meinte eigentlich nur die funktionalen Seite. Was sind die "Arbeits"Szenarien/Anforderungen?
Einen(1) Namen suchen bedeutet idR in einer solchen Datei, dass man zunächst den ersten findet
-wenn die Codierung stimmt. Und:
Formatbedingt kommen solche Gemeinheiten dazu, das Werte in mehreren Zeilen verstreut stehen können, Steuerzeichen dazwischen. Das findet man ohne passende Algorithmen nie, wenn man die Rohdaten durchsucht.

Wie auch immer, findet man was, dann kann man weitersuchen, (über)springen, ausschließen, anzeigen usw.
Man kann auch alle Zeilen suchen, in denen dieser Name vorkommt
oder hier vielleicht besser alle Zeilengruppen, wo er vorkommt.

Schnell:
Auch hier interessiert mich eher, was schnell wäre in Sekunden, nicht welche Technik.
In einer 2 GB Logdatei Suche nach einem Wert der ziemlich am Ende steht dauert mit einem alten Ultraedit bei mir grad ca 30 Sekunden. Ein "gib mir alle Zeilen mit [einBestimmterWert]" hab ich noch nicht probiert, dauert vermutlich genauso lang, wenn es geht.

Worauf ich hinaus will:
Wenn Du nur 10 Namen suchen musst und dann fertig bist, nimm einfach einen geeigneten Editor.
Wenn du mehr "musst", dann wäre es bei dem Volumen nicht verkehrt, die Anforderungen genauer zu kennen und dann eine geeignete Technik zu suchen.

BTW
Es gibt Opensource Software, die GEDCOM kann. Hast Du die schon probiert? Versagen sie den Dienst?

P.S: Ich seh grad, das Thema Anforderungen und geeignete Technik ist eh schon im Gang.
Gruß, Jo
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

AW: Eine sehr große textbasierte Datei durchsuchen?

  Alt 6. Dez 2017, 12:33
...
Man könnte sich vorher auch einen Index aufbauen, wo der Anfang jedes Datensatzes in einer Namensliste steht, ...
Und der Index fällt vom Himmel?
aufbauen

Am Anfang einmal die Datei durchlaufen und in 'ner Liste das speichern (TStringList/TDictionary<>/...)

Es kommt vorallem darauf an wie oft er in dieser Datei was sucht.
Man kann den Inhalt auch in eine Datenbank schieben und dort weiterarbeiten.
Ein Therapeut entspricht 1024 Gigapeut.
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


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 00:04 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 by Thomas Breitkreuz