Sonntag, August 06, 2006

Ich suche ein Perl-Skript mit dem ich zwei Text-Dateien voneinander subtrahieren kann. Der Inhalt der Dateien ist ähnlich im Sinnes davon, dass die Zeilen gleich formatiert sind. Kann ich die Dateien evtl. auch mit diff subtrahieren?

Da ich in kurzer Zeit nichts passendes finden konnte habe ich ein eigenes Skript subtractOptimized.pl geschrieben:
open(FILE0, $ARGV[0]);
@lines0 = <FILE0>;
@lines0 = sort @lines0;
open(FILE1, $ARGV[1]);
@lines1 = <FILE1>;
@lines1 = sort @lines1;
for (@lines0) {
  $left = $_;
  $left =~ s/\r|\n//g;
  &find();
}
close(FILE0);
close(FILE1);


sub find() {
  my $remove = 0;
  my $retry = 0;
  if (scalar @lines1 > 0) {
    $right = $lines1[0];
    $right =~ s/\r|\n//g;
    if ($left lt $right) {
      print $left."\n";
    }
    if ($left eq $right) {
      $remove = 1;
    }
    if ($left gt $right) {
      $remove = 1;
      $retry = 1;
    }
    if ($remove > 0) {
      shift @lines1;
    }
    if ($retry > 0) {
      &find();
    }
  } else {
    print $left."\n";
  }
}

Das Skript subtrahiert Datei2 von Datei1, mit der Randbedingung, dass die Dateien sortiert werden. Diese Randbedingung ist für meine Zwecke ok und verbessert die Laufzeit. Wen die Randbedingung (Sortierung) stört, der darf selbst noch Hand anlegen.

Sonntag, März 26, 2006

Lieblingszitate

Lieblingszitate


Ja, mach nur einen Plan
Sei nur ein großes Licht!
Und mach dann noch 'nen zweiten Plan
Gehn tun sie beide nicht.
- Bertolt Brecht, Dreigroschenoper

singt Jonathan Jeremias Peachum, der Bettlerkönig, in der Dreigroschenoper in seinem Lied von der Unzulänglichkeit menschlichen Strebens.