[C++] vorgehen: große textdatei analysieren?

Svartr

Grünschnabel
hallo,

ich bin gerade dabei, mich näher mit c++ zu befassen (ich wage mich mal als fortgeschritten zu bezeichnen) - ich bräuchte also keine fertige lösung, sondern nur einen hinweis oder tip wie man möglichst effizient an soetwas rangeht.

folgendes problem:
ich möchte eine relativ große textdatei analysieren. diese umfaßt mehrere 1000 zeilen.
im ersten schritt sollen doppelte einträge herausgefiltert werden, und eine liste der vorkommenden variablen erstellt werden.
anschließend möchte ich ermitteln, wie oft welche variable vorkommt.

ein stark vereinfachtes beispiel:
inhalt der textdatei:
a
b
a
a
c
d
a
b

ergebnis nach der analyse:
a - 4x
b - 2x
c - 1x
d - 1x

filtern und zählen bekomme ich schon hin.
das problem ist, wie gehe ich mit der großen datenmenge um? wie/wo speichere ich die gefundenen muster?

ich bin für alle tips/anregungen dankbar.


ps: nach möglichkeit soll das resultat eine konsolenanwendung sein...
 
Zuletzt bearbeitet:
Hi,

in einer verketteten Liste, schneller wird es kaum gehen. Probier das mal aus, ich habe gerade eine Anwendung fertig, die genau dein Problem beschreibt. Ich analysiere 2000 Zeilen in jeweils 20 Analyseschritten und brauche auf einem 700 P3 gerade einmal 0,25 Sekunden.

Gruß
Sebezahn
 
hallo,

danke. werde ich machen.

ich denke, mit 4-5 analyseschritte dürfte ich hinkommen. bin mal gespannt, ob das dann so funktioniert wie ich möchte ...


nachtrag: habe eben mal meine stl-lektüre bemüht (meine selbstverfaßte listenklasse aus meiner anfangszeit war mir doch etwas zu riskant ;)) ... es klappt jedenfalls ausgezeichnet.
 
Zuletzt bearbeitet:
Ich würde für das Problem auf jeden Fall keine verkettete Liste nehmen, sondern eine Hash-Tabelle. Das ist wesentlich effizienter und für Deine Problemstellung ideal geeignet. Falls Du mit der MFC codest, gibt es auch schon eine Template-Klasse dafür (CMap). Wie effizient die arbeitet weiß ich nicht, aber ich nehme mal an die MS-Programmierer sind nicht unbedingt Anfänger in ihrem Job... :)
 
Hi,

hmm... kommt drauf an, was man machen will. Unter Umständen sind die Listen schneller, bei Suchen allerdings im Regelfall deutlich unterlegen.

In meinem Fall wären HASHs auf jeden Fall fehl am Platz, ich muss sowieso alle Datensätz durchgehen und immer wieder analysieren.

Aber im Regelfall hast du recht ;-)

Gruß
Sebezahn
 
Hmm...ich erspar Dir den Vortrag über Komplexitätsmaße, Effizienz von Algorithmen und effiziente Suchstrukturen. Am Ende des Vortrags würde auf jeden Fall stehen: Listen sind so ziemlich das langsamste, uneffizienteste und deshalb auch einfachste Mittel, eine geeignete Struktur zur Datenspeicherung zu realisieren.

Vaethischist, dem der Informatiker durchgegangen ist... ;)
 
hi,

MFC nutze ich nicht, und die hash-tabelle ist ja leider kein bestandteil der STL geworden.
(nebenbei bemerkt ist diese datenstruktur bislang unbemerkt an mir vorübergegangen...).

jedenfalls danke für den hinweis. ich werde mich mal in die materie einlesen und ein wenig damit experimentieren (ist ja auf den _ersten_ blick nicht ganz so simpel wie eine liste - verspricht aber interessant zu werden).
 
ahhh ... tut mir leid, du hast recht.

das hash-kapitel in meinem buch beträgt nur 13 zeilen, und der erste satz lautet "One important data structure for collections is not part of the C++ standart library: the hash table." da habe ich den rest wohl nur noch überflogen ...

danke für den hinweis ;)
 
Wenn Hash-Tabellen in Deinem Buch bloß 13 Zeilen abbekommen, haste aber 'n schlechtes Buch erwischt... ;-)
 
Zurück