Hallo Jörg,
auf deinen Hinweis hin, habe ich sophomorix-print gepatched, allerdings nur bei mir, kein Pull-Request.
Ich poste hier mal die relevanten Zeilen:
zu Beginn:
# modules
use strict;
use Encode qw(encode decode);
use POSIX qw(locale_h);
use utf8;
use locale;
setlocale(LC_COLLATE, "de_DE.utf8");
#setlocale(LC_COLLATE, "de_DE.iSO8859-15");
#my @letters = qw( A Ä B C Ö Ü O U o u ö ü e i Kübler Klinkott );
#printf "%-16s: %s\n", "de_DE.utf8", join $", sort @letters;
dann in der Funktion latex_datablock_from_list
:
@@ -633,36 +652,37 @@
sub latex_datablock_from_list {
my ($chead,$ref_printlist) = @_;
# always APPEND to datablock
- my @list = @{ $ref_printlist };
- @list = sort @list;
+ #my @list = @{ $ref_printlist };
+ # @list = sort @list; ## does not order correctly
+
+ my $enc = 'utf-8';
+ my @list = sort { decode($enc, $a) cmp decode($enc, $b) } @{ $ref_printlist };
Dann in der Funktion create_csv_files
@@ -700,18 +720,26 @@
sub create_csv_files {
- @{ $ref_printlist } = sort @{ $ref_printlist };
- foreach my $item ( @{ $ref_printlist } ){
+ my $enc = 'utf-8';
+ ## does not work, since bytes not decoded as UTF-8
+ # my @sorted_list = sort @{ $ref_printlist };
+ my @sorted_list = sort { decode($enc, $a) cmp decode($enc, $b) } @{ $ref_printlist };
+
+ foreach my $item ( @sorted_list ){
Dann kommt bei mir sowohl bei den CSV als auch in den PDF die „richtig“ a.k.a. die gleiche Sortierung wie im ASV-Export meines Chefs raus. Habe das für vier Klassen stichprobenartig gecheckt.
Besser wäre es wohl, wenn das decode("utf-8",...)
dort angewendet werden würde, wo LDAP abgefragt wird. Dann könnte man später auch wieder sort
unbeschwert anwenden - vorausgesetzt die Locale wurde entsprechend gesetzt.
Es wird weiter im Skript auch noch die Klassenliste sortiert, dort kann man vermutlich davon ausgehen, dass es keine Sonderzeichen ergibt und die Reihenfolge, in der die Klassen abgearbeitet werden, auch egal ist.
VG, Tobias