PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Perl: Sortieren einer Liste und anschließender Abgleich



Stefan Feeser
06-12-2002, 15:53
Hi all,

ich bin blutiger Anfänger in Sachen Perl soll aber folgendes Problem lösen:

Auf meinem System gibt es eine Referenzdatei (";"-getrennt) die in der ersten Spalte einen Usernamen und in der zweiten Spalte ein Abteilungskürzel enthält.

In einem ersten Schritt möchte ich nun eine Kopie der bestehenden Passwortdatei des Systems mit der Referenzdatei auf evtuelle neue Eintraege pruefen, diese dann im nächsten Schritt (gerne manuell) in der Referenzdatei nachpflegen lassen und zuletzt dann für die User den Plattenplatz feststellen lassen und diesen den Abteilungen zuordnen lassen.

Der letzte Schritt ist mir klar, am Anfang des Skripts bin ich dann wie folgt vorgegangen, komme aber nicht weiter, da mir auch nicht ganz klar ist wie ich den Abgleich am besten realisiere:

open (DATA, "${pfad ....
open (AUSGABE, ">${tmppfad.....

# erste Spalte der Ursprungsdatei auslesen und wegschreiben

while ($data = <DATA>) {
chomp ($data);
@convert = split(/$trenner/,$data);

if (($convert[......
print AUSGABE $convert[0]."\n";
....

Das gleiche mache ich dann mit der Referenzdatei. Anschließend dachte ich daran einfach über das Unixkommando "sort" die Datei sortieren zu lassen um dann via Unixkommando "diff" die Untererschiede rauszufiltern. Leider liefert "diff" das ganze nicht so wie ich mir das erhofft habe.

Daher wäre jetzt meine Idee die beiden "Listen" in ein Array zu schreiben, dieses irgendwie zu sortieren und dann das eine Array mit dem anderen zu vergleichen.

Könnte mir hier jemand erklären wie ich die Listenelemente sortiert in ein Array bekomme und wie ich die beiden Arrays anschließend am geschicktesten vergleichen kann?

Danke und Gruß

Stefan

tomes
07-12-2002, 11:44
open(OLD,"<old.txt") or die "kann die old.txt nicht oeffnen\n";
foreach(<OLD>) {
my $y = "0";
my $c = $_;
open(NEW,"<new.txt") or die "kann die new.txt nicht oeffnen\n";
foreach(<NEW>){
my $d = $_;
if($c eq $d) { $y = "1"; }
}
close(NEW);

# wenn $y 0 ist, ist etwas anders, also mach was
if($y == "0") {
hier dann der Code was passieren soll, wenn was neu
}
}
close(OLD);

Also jede Zeile aus der alten Datei einzeln abgleichen mit jeder Zeile der neuen Datei.

T;o)Mes