Entfernen von doppelten "zeilen" in Textdatein

Moin moin,
ich versuche mein Problem das kurz und bündig zu erklären...:

IST Zustand:
es sind um die 100 Textdatein, in jeder Textdatei sind zwischen 100 und 2000 Zeilen mit einem Wort (nein keine wordlist ;) )

SOLL Zustand:
eine Textdatei die aus allen Textdatein gebildet wurde und keine doppelten Einträge enthält.


Meine Frage ist es, gibt es schon etwas fertiges, was mir die Aufgabe abnimmt? oder komm ich nicht drumherum das selbst zu Programmieren, und wenn ja wie würdet ihr das machen vom Programmablauf her?

gruss
 
Jede Textdatei Zeile für Zeile durchgehen.
Schauen ob Zeile schon da ist ( am besten einen vektor o.ä. zum speichern nehmen)
wenn nein: zeile /wort hinzufügen.
wenn ja: weiter mit nächster zeile.
Danach Inhalt des Vektors/ der Liste/wasauchimmer Element für Element in Datei schreiben.
 
Programmieren: Baumstruktur mit dem Text als "Key" - ok, relativ "Zeitaufwändig" aber was solls - solange es keine GB an Daten sind. Z.B in Java lassen sich Bäume einfach realisieren (oder sind gar schon vorhanden ;) - k.A - musste ich selber umsetzen) ) und dann braucht man eben nur noch die Vergleichsroutine für Strings zu "schreiben" (auch in den meisten Programmiersprachen drin). Jetzt geht man einfach hin und erstellt einen Baum, den füllt man in einer Schleife mit allen Textzeilen. Falls die Zeile schon vorhanden ist (also gleich), wird sie einfach nicht mehr mitgespeichert. dann Speichert man den Baum in die Textdatei ab - wenn man dabei Inorder hat man die schon gleich sortiert abgespeichert.

also in etwa:
Code:
erstelle baum

while Ordner nicht leer do
    öffne Datei
     while Datei nicht leer do
          Baum.Hinzufügen(lese_zeile);
      od
od
Speichere_baum_als_text;

Hinzufügen:
  *wie bei normalen Bäumen eben*
  *nur dass man die Vergleichsfunktion anpasst*

http://www.faqts.com/knowledge_base/view.phtml/aid/26106/fid/165
http://www.bearcave.com/software/java/misl/BinaryTree/jdoc/BinaryTree.html

Liste als Datenstruktur müsste auch gehen - ist wahrscheinlich nicht mal viel unperfomanter (in der Praxis) und einfacher zu handhaben.
 
am einfachsten gehts wenn du ne collections klasse benutzt, die keine doppelten einträge erlaubt. so kannst du dir die eigenen vergleichsoperationen für doppelte einträge sparen. brauchst also nur alles in diese liste hinzufügen und kannst den inhalt danach direkt wieder in ne datei schreiben.

bei java gibt es dafür die klasse java.util.Set
 
Doch nich immer gleich mit anonen auf Spatzen schießen ;)

Einfach an ner Linux shell Dateien aneinanderhängen:

cat datei1 >> datei2

Und dann mit uniq doppelte Zeilen entfernen.

uniq quelle ziel

Is ne schöne Übung zur shellprogrammierung :o)
 
@schmidtl_dd: du solltest aber vorher sortieren wenn du uniq verwendest, denn:

Lösche alle hintereinanderstehenden identischen Zeilen von EINGABE
(oder Standardeingabe) bis auf eine, und schreibe auf AUSGABE (oder
Standardausgabe).

auf das "hintereinanderstehende" kommt es an.
Oder täusche ich mich da jetzt ?(

odigo
 
ich habe mcih für die lösung von ivegotmail entschieden:

Original von ivegotmail
am einfachsten gehts wenn du ne collections klasse benutzt, die keine doppelten einträge erlaubt. so kannst du dir die eigenen vergleichsoperationen für doppelte einträge sparen. brauchst also nur alles in diese liste hinzufügen und kannst den inhalt danach direkt wieder in ne datei schreiben.

bei java gibt es dafür die klasse java.util.Set

war das einfachste und simpelste (das ich da nicht drauf gekommen bin...) und hat war für meine anwendung genau richtig (habs mit c# gemacht (SortedList))

und sortieren wäre egal gewesen obs sortiert ist oder nicht... *anmerk*

danke für die hilfe @all
 
Zurück
Oben