Dubletten löschen

polocpp

Grünschnabel
Hallo Leute,

ich habe eine Textdatei, die sieht z.B. so aus:

11111
22222
33333
22222
55555
77777

Nun will ich diese Datei einlesen, und die Dubletten löschen, und dann wieder abspeichern:
11111
22222
33333
55555
77777

WIE KANN ICH DAS MACHEN?
Ich hatte mir mal in perl eine passende Routine geschrieben:
open(F1,"<$infile") || die "FEHLER EINGANGSDATEI!";
my @liste = <F1>;
close(F1);
%seen = ();
@listeneu = ();
$gesamt = 0;
$dups = 0;
foreach $item (@liste)
{ $gesamt++;
unless ($seen{$item})
{
$seen{$item} = 1;
push (@listeneu, $item);
}
else
{
$dups++;
}
}
open (OUTFILE, ">$outfile") || die "DATEIFEHLER ! DATEI PRÜFEN!";
print OUTFILE @listeneu;
close (OUTFILE);

NUR WIE MACHE ICH DAS IN C++

DANKE

polo
 
Hi.

Abgesehen davon, das das man das in Perl als Einzeiler schreiben kann (Aufruf mit perl -ne):
Code:
print if not @lines{$_}++;
geht das in C++ im Prinzip genauso. Du mußt irgendwo speichern wie oft (bzw. ob) du eine Zeile schon gesehen hast. Falls das noch nie der Fall war gibst du die Zeile aus, ansonsten nicht.

Dazu könntest du z.B. eine std::map<string, int> nehmen.
Code:
std::map<string, int> lines;
// zeile einlesen
if (getline (stream, str)) 
  if (! lines[str]++) fout << str << endl;

Gruß
 
Zuletzt bearbeitet:
Zurück