Die Webseiten der Fachschaft Informatik am ERG Saalfeld


sort (3. Teil)

Es sollen hier die Datensätze einer csv-Datei (CSV = Comma-separated values), in der in jeder Zeile die ID, der Nachname, der Vorname und die Klasse (in dieser Reihenfolge) angegeben sind, so sortiert werden, dass sie nach Klassen und innerhalb der Klassen nach dem Nachnamen sortiert sind.
 

CSV-Datei

1821;Mustermann;Manfred;10c
1822;Musterfrau;Maxi;08c
1823;Goethe;Johann;10a
1824;Bach;Johann;10a


Da der Vergleich der Datensätze zuerst nach dem letzten und dann nach dem zweiten Element erfolgen soll, muss genau dass in einer Vergleichsfunktion angegeben werden. Die Vergleichsfunktion wird in diesem Beispiel in der Subroutine vergleich implementiert. Diese Funktion wird dem Befehl "sort" übergeben.

Programm

use strict;
use warnings;

open FILE, '<', 'schueler.csv' or die "konnte schueler.csv nicht zum Lesen oeffnen. $!\n";
my @feld = <FILE>;        # wir lesen die Datei ein
close FILE;
chomp @feld;                # wir löschen am Zeilenende die Zeilenumbrüche


foreach my $element (@feld) {
    print $element, "\n";
}
print "\n\n";

@feld = sort {&vergleich($a,$b)} @feld;

foreach my $element (@feld) {
    print $element, "\n";
}
print "\n\n";

### Ende des Hauptprogramms ###

# ein Datensatz hat das Format: ID;Name;Vorname;Klasse
# Beispiel: 1821;Mustermann;Manfred;07c
sub vergleich   # sortieren nach Klasse und dann nach Name
{
  my $datensatz1 = shift;      # Datensatz 1
  my $datensatz2 = shift;      # Datensatz 2

  my @temp1 = split ';', $datensatz1;
  my @temp2 = split ';', $datensatz2;

  return  ($temp1[3] cmp $temp2[3]  or  $temp1[1] cmp $temp2[1]);
}

__END__

 

Der Aufruf sah bei mir so aus:

 

Aufgaben

  1. Bringen Sie das Programm zum Laufen. Die csv-Datei heißt schueler.csv und liegt im gleichen Verzeichnis.
  2. Ergänzen Sie weitere Datensätze und rufen Sie das Programm damit auf.
  3. Ändern Sie den Aufruf von "sort" im Hauptprogramm so ab, dass die Variablen $a und $b vertauscht werden. Testen Sie das.
  4. Ändern Sie das gegebene Programm so, dass die Klassen in absteigender Reihenfolge und die Namen in aufsteigender Reihenfolge sortiert werden.
  5. Ändern Sie das Programm so, dass zuerst nach Klassen und innerhalb der Klassen nach der ID sortiert wird. Testen Sie das!

 

zurück


© ERG Saalfeld   -   Hans-Dietrich Kirmse   18.08.2017