Sophomorix sortiert österreichich. Des mog i net

Hallo,

eigentlich gleich an Rüdiger gerichtet:
sophomorix-print --classlist …
sortiert mir einen
Hans de Klerk
Heinz El Harakiri
Klaus von Klitzing
Dings Aka Bums

völlig unterschiedlich, weil die Kleinbuchstaben nach den Großbuchstaben kommen!
In der schueler.txt steht jeweils:
…;de Klerk;Hans;… → „deKlerk, Hans“ → ganz unten in der Liste
…;El Harakiri;Heinz;… → ElHarakiri, Heinz → bei „E“
…;von Klitzing;Klaus;… → „vonKlitzing, Klaus“ → ganz unten in der Liste
…;Aka Bums;Dings;… → „AkaBums, Dings“ → bei „A“

Hatte ich so nicht erwartet, jetzt muss ich halt von Hand für Großschreibung am Nachnamensanfang sorgen.

Viele Grüße, Tobias

Hab nichts gegen österreich, aber ich mag die Sortierung von sophomorix(-print) nicht:
gibt es abhilfe, dass äüöß nicht als eigene Buchstaben am Ende des Alphabets einsortiert werden?

Das nervt seit Jahren die KuK, die weiterhin Listen ausgedruckt verwenden und am Ende des JAhres nicht die Sortierung vorfinden, wie in ASV, jetzt NEO, früher SVP zumindest in BW.

Ich dachte immer: das ist das Problem von ASV/NEO oder SVP, aber jetzt stelle ich fest, dass die Sortierung von Libreoffice auch eher die von ASV ist:

  • hier werden ä wie a behandelt, ö wie o und vermutlich so weiter. Wie Akzente etc. behandelt werden, weiß ich nicht.
  • sophomorix-print behandelt ä wie einen eigenen Buchstaben am Ende
  • auch noch eine Möglichkeit wäre, ä wie ae zu behandelt und entsprechend einzusortieren, aber das scheint kein Programm zu machen, das ich vor der Tastatur habe.

Obiges Problem mit der Groß- und Kleinschreibung bleibt bestehen.

Beispiel ASV:

Habibi
Hafner
Häusler
Heuser

Beispiel sophomorix-print

Habibi
Hafner
Heuser
Häusler

weiß jemand, wo man das ändert?

VG, Tobias

Hallo Tobias,

sophomorix-print (Perl) verwendet an mehreren Stellen „sort“ ohne „use
locale“ - deshalb kommen die äöüß nach dem z. Da sollte in der Tat die
deutsche Sortierung verwendet werden. Zulässig ist ä=a oder ä=ae -
welche Variante(n) Perl unterstützt, weiß ich aber nicht.

Beste Grüße

Jörg

1 „Gefällt mir“

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

Zuletzt: Ob die Sortierung von Kleinbuchstaben von „van DerHorst“ jetzt normal unter „V“ einsortiert wird statt nach dem Großbuchstaben-Alphabet, habe ich momentan nicht testen können.