Discussion:
Sortierreihenfolge
(zu alt für eine Antwort)
Michael Ottenbruch
2020-04-29 14:37:11 UTC
Permalink
Hallo, Leute!

Irgendwie bin ich zu doof zum googlen. :-(

Ich bin, was den umgang mit der Shell angeht, ein bißchen aus der Übung
und versuche mich gerade daran, die Wikipedia-Artikel über Kommunen in
Dänemark zu aktualisieren. Dazu braucht es unter anderem Tabellen mit
Gemeinden, die ich per sed und Konsorten zusammenstelle. Diese haben
logischerweise dänische Namen. Das dänische Alphabet hat drei Buchstaben
mehr als das Deutsche, nämlich "Æ", "Ø" und "Å", die genau in dieser
Reihenfolge am Ende des Alphabets einsortiert werden.

Ich war nun der Meinung, dazu einfach nur "LC_COLLATE=da_DK.utf8" setzen
zu müssen, und schon geht alles wie von selbst. Das ist nicht der Fall:

O /
---X---
O \

***@Lenovo-MO /cygdrive/c/Users/Michael/Documents
$ echo $LC_COLLATE
da_DK.utf8

***@Lenovo-MO /cygdrive/c/Users/Michael/Documents
$ head -30 Sogn.txt
| [[Støvring Sogn]] || align = 'right' | {{EWZL|DK|730-8133}} || ||
|-
| [[Mellerup Sogn]] || align = 'right' | {{EWZL|DK|730-8134}} || ||
|-
| [[Haslund Sogn]] || align = 'right' | {{EWZL|DK|730-8135}} || ||
|-
| [[Ølst Sogn]] || align = 'right' | {{EWZL|DK|730-8136}} || ||
|-
| [[Værum Sogn]] || align = 'right' | {{EWZL|DK|730-8137}} || ||
|-
| [[Ørum Sogn]] || align = 'right' | {{EWZL|DK|730-8138}} || ||
|-
| [[Årslev Sogn]] || align = 'right' | {{EWZL|DK|730-8145}} || ||
|-
| [[Vorup Sogn]] || align = 'right' | {{EWZL|DK|730-8146}} || ||
|-
| [[Asferg Sogn]] || align = 'right' | {{EWZL|DK|730-8151}} || ||
|-
| [[Fårup Sogn]] || align = 'right' | {{EWZL|DK|730-8152}} || ||
|-
| [[Kousted Sogn]] || align = 'right' | {{EWZL|DK|730-8153}} || ||
|-
| [[Råsted Sogn]] || align = 'right' | {{EWZL|DK|730-8154}} || ||
|-
| [[Spentrup Sogn]] || align = 'right' | {{EWZL|DK|730-8155}} || ||
|-
| [[Gassum Sogn]] || align = 'right' | {{EWZL|DK|730-8156}} || ||
|-
| [[Hald Sogn]] || align = 'right' | {{EWZL|DK|730-8157}} || ||
|-

***@Lenovo-MO /cygdrive/c/Users/Michael/Documents
$ head -30 Sogn.txt | sort
| [[Ølst Sogn]] || align = 'right' | {{EWZL|DK|730-8136}} || ||
| [[Årslev Sogn]] || align = 'right' | {{EWZL|DK|730-8145}} || ||
| [[Ørum Sogn]] || align = 'right' | {{EWZL|DK|730-8138}} || ||
| [[Asferg Sogn]] || align = 'right' | {{EWZL|DK|730-8151}} || ||
| [[Fårup Sogn]] || align = 'right' | {{EWZL|DK|730-8152}} || ||
| [[Gassum Sogn]] || align = 'right' | {{EWZL|DK|730-8156}} || ||
| [[Hald Sogn]] || align = 'right' | {{EWZL|DK|730-8157}} || ||
| [[Haslund Sogn]] || align = 'right' | {{EWZL|DK|730-8135}} || ||
| [[Kousted Sogn]] || align = 'right' | {{EWZL|DK|730-8153}} || ||
| [[Mellerup Sogn]] || align = 'right' | {{EWZL|DK|730-8134}} || ||
| [[Råsted Sogn]] || align = 'right' | {{EWZL|DK|730-8154}} || ||
| [[Spentrup Sogn]] || align = 'right' | {{EWZL|DK|730-8155}} || ||
| [[Støvring Sogn]] || align = 'right' | {{EWZL|DK|730-8133}} || ||
| [[Værum Sogn]] || align = 'right' | {{EWZL|DK|730-8137}} || ||
| [[Vorup Sogn]] || align = 'right' | {{EWZL|DK|730-8146}} || ||

O /
---X---
O \

Insbesondere die ersten drei Zeilen irritieren mich. Es sieht so aus,
als würde sort da gar nichts sortieren. Aber warum stehen die Zeilen
dann vorne? Bei regexps habe ich das Problem, daß Buchstabenfolgen, in
denen dänische Sonderbuchstaben vorkommen, gar nicht als Buchstaben
erkannt werden, nicht als "[[:alpha:]]*" und nicht einmal in der Form
"\([^ ]*\)". Aber das hat vermutlich die gleiche Ursache.

Was übersehe ich?

Das System ist ein Cygwin.
--
...und tschuess!

Michael
E-mail: ***@sailor.ping.de
Juergen Ilse
2020-04-29 14:50:42 UTC
Permalink
Hallo,
Post by Michael Ottenbruch
Irgendwie bin ich zu doof zum googlen. :-(
Ich bin, was den umgang mit der Shell angeht, ein bißchen aus der Übung
und versuche mich gerade daran, die Wikipedia-Artikel über Kommunen in
Dänemark zu aktualisieren. Dazu braucht es unter anderem Tabellen mit
Gemeinden, die ich per sed und Konsorten zusammenstelle. Diese haben
logischerweise dänische Namen. Das dänische Alphabet hat drei Buchstaben
mehr als das Deutsche, nämlich "Æ", "Ø" und "Å", die genau in dieser
Reihenfolge am Ende des Alphabets einsortiert werden.
Ich war nun der Meinung, dazu einfach nur "LC_COLLATE=da_DK.utf8" setzen
LC_COLLATE legt die "Sortierreihenfolge" der Bytes bei "alphabetischer
Sortierung" fest. Der Zeichensatz zum anzeigen wird dagegen durch die
Environment-Variable "LC_CTYPE" festgelegt. Was fuer Fehler stellst du
denn fest?

Tschuess,
Juergen Ilse (***@usenet-verwaltung.de)
Michael Ottenbruch
2020-04-29 15:58:12 UTC
Permalink
Post by Michael Ottenbruch
Hallo,
Post by Michael Ottenbruch
Irgendwie bin ich zu doof zum googlen. :-(
Ich bin, was den umgang mit der Shell angeht, ein bißchen aus der Übung
und versuche mich gerade daran, die Wikipedia-Artikel über Kommunen in
Dänemark zu aktualisieren. Dazu braucht es unter anderem Tabellen mit
Gemeinden, die ich per sed und Konsorten zusammenstelle. Diese haben
logischerweise dänische Namen. Das dänische Alphabet hat drei Buchstaben
mehr als das Deutsche, nämlich "Æ", "Ø" und "Å", die genau in dieser
Reihenfolge am Ende des Alphabets einsortiert werden.
Ich war nun der Meinung, dazu einfach nur "LC_COLLATE=da_DK.utf8" setzen
LC_COLLATE legt die "Sortierreihenfolge" der Bytes bei "alphabetischer
Sortierung" fest. Der Zeichensatz zum anzeigen wird dagegen durch die
Environment-Variable "LC_CTYPE" festgelegt. Was fuer Fehler stellst du
denn fest?
Das dänische Alphabet hat drei Buchstaben
mehr als das Deutsche, nämlich "Æ", "Ø" und "Å", die genau in dieser
Reihenfolge am Ende des Alphabets einsortiert werden.
[...]
| [[Ølst Sogn]] || align = 'right' | {{EWZL|DK|730-8136}} || ||
| [[Årslev Sogn]] || align = 'right' | {{EWZL|DK|730-8145}} || ||
| [[Ørum Sogn]] || align = 'right' | {{EWZL|DK|730-8138}} || ||
| [[Asferg Sogn]] || align = 'right' | {{EWZL|DK|730-8151}} || ||
| [[Fårup Sogn]] || align = 'right' | {{EWZL|DK|730-8152}} || ||
| [[Gassum Sogn]] || align = 'right' | {{EWZL|DK|730-8156}} || ||
| [[Hald Sogn]] || align = 'right' | {{EWZL|DK|730-8157}} || ||
| [[Haslund Sogn]] || align = 'right' | {{EWZL|DK|730-8135}} || ||
| [[Kousted Sogn]] || align = 'right' | {{EWZL|DK|730-8153}} || ||
| [[Mellerup Sogn]] || align = 'right' | {{EWZL|DK|730-8134}} || ||
| [[Råsted Sogn]] || align = 'right' | {{EWZL|DK|730-8154}} || ||
| [[Spentrup Sogn]] || align = 'right' | {{EWZL|DK|730-8155}} || ||
| [[Støvring Sogn]] || align = 'right' | {{EWZL|DK|730-8133}} || ||
| [[Værum Sogn]] || align = 'right' | {{EWZL|DK|730-8137}} || ||
| [[Vorup Sogn]] || align = 'right' | {{EWZL|DK|730-8146}} || ||
Die ersten drei Zeilen müßten in der Reihenfolge
Post by Michael Ottenbruch
| [[Ølst Sogn]] || align = 'right' | {{EWZL|DK|730-8136}} || ||
| [[Ørum Sogn]] || align = 'right' | {{EWZL|DK|730-8138}} || ||
| [[Årslev Sogn]] || align = 'right' | {{EWZL|DK|730-8145}} || ||
als letzte stehen.

Die letzten beiden Zeilen der oberen Liste müßten vertauscht sein, da
"æ" nach "o" kommt, also auch "Væ" nach "Vo".
--
...und tschuess!

Michael
E-mail: ***@sailor.ping.de
Urs Janßen
2020-04-29 15:08:42 UTC
Permalink
Post by Michael Ottenbruch
Ich war nun der Meinung, dazu einfach nur "LC_COLLATE=da_DK.utf8" setzen
zu müssen,
sofern das nicht durch gesetztes $LC_ALL uebergebuegelt wird.
[<https://pubs.opengroup.org/onlinepubs/9699919799/basedefs/V1_chap08.html>]
| LC_ALL
| This variable shall determine the values for all locale
| categories. The value of the LC_ALL environment variable has
| precedence over any of the other environment variables starting with
| LC_ ( LC_COLLATE , LC_CTYPE , LC_MESSAGES , LC_MONETARY , LC_NUMERIC ,
| LC_TIME ) and the LANG environment variable.
Michael Ottenbruch
2020-04-29 15:52:01 UTC
Permalink
Post by Urs Janßen
Post by Michael Ottenbruch
Ich war nun der Meinung, dazu einfach nur "LC_COLLATE=da_DK.utf8" setzen
zu müssen,
sofern das nicht durch gesetztes $LC_ALL uebergebuegelt wird.
[<https://pubs.opengroup.org/onlinepubs/9699919799/basedefs/V1_chap08.html>]
| LC_ALL
| This variable shall determine the values for all locale
| categories. The value of the LC_ALL environment variable has
| precedence over any of the other environment variables starting with
| LC_ ( LC_COLLATE , LC_CTYPE , LC_MESSAGES , LC_MONETARY , LC_NUMERIC ,
| LC_TIME ) and the LANG environment variable.
$LC_ALL ist nicht gesetzt.
--
...und tschuess!

Michael
E-mail: ***@sailor.ping.de
Juergen Ilse
2020-04-29 17:36:31 UTC
Permalink
Hallo,
Post by Urs Janßen
Post by Michael Ottenbruch
Ich war nun der Meinung, dazu einfach nur "LC_COLLATE=da_DK.utf8" setzen
zu müssen,
sofern das nicht durch gesetztes $LC_ALL uebergebuegelt wird.
[<https://pubs.opengroup.org/onlinepubs/9699919799/basedefs/V1_chap08.html>]
| LC_ALL
| This variable shall determine the values for all locale
| categories. The value of the LC_ALL environment variable has
| precedence over any of the other environment variables starting with
| LC_ ( LC_COLLATE , LC_CTYPE , LC_MESSAGES , LC_MONETARY , LC_NUMERIC ,
| LC_TIME ) and the LANG environment variable.
Stimmt auffallend. Ich denke da immer nicht dran, weil fuer mich (aus sehr
gutemGrund) ein per default gesetztes LC_ALL ein absolutes "no go" ist.
Eigentlich ist es so: Jede nicht explizit gesetzte locale-Einstellung ist
implizit auf den Wert von $LANG gesetzt, also ist es sinnvoll LANG auf den
gewuenschten default zu setzen. Ein gesetztes LC_ALL *uebersteuert* jedoch
*ALLE* anderen locale-Einstellungen, deswegen sollte LC_ALL i.d.R. nur fuer
Testzwecke fuer begrenzte Zeit gesetzt werden, aber *niemals* als Default.
Leider gibt es immer wieder Linux-Distributionen, die anscheinend von
Leuten zusammengestellt werden, die das nicht wissen und deswegen per
Default LC_ALL setzen (obwohl das eigentlich Unfug ist und viel mehr
Aerger als Nutzen bringt).

Tschuess,
Juergen Ilse (***@usenet-verwaltung.de)
Helmut Waitzmann
2020-04-29 18:11:55 UTC
Permalink
Post by Michael Ottenbruch
Ich bin, was den umgang mit der Shell angeht, ein bißchen aus der
Übung und versuche mich gerade daran, die Wikipedia-Artikel über
Kommunen in Dänemark zu aktualisieren. Dazu braucht es unter
anderem Tabellen mit Gemeinden, die ich per sed und Konsorten
zusammenstelle. Diese haben logischerweise dänische Namen. Das
dänische Alphabet hat drei Buchstaben mehr als das Deutsche,
nämlich "Æ", "Ø" und "Å", die genau in dieser Reihenfolge am Ende
des Alphabets einsortiert werden.
Ich war nun der Meinung, dazu einfach nur "LC_COLLATE=da_DK.utf8"
setzen zu müssen, und schon geht alles wie von selbst. Das ist
Zwei Punkte fallen mir dazu ein: 


Shell‐Variablen zur Wahl des Locales genügen nicht; es müssen
schon Umgebungsvariable sein. 

Zumindest, um Zeichenklassen, beispielsweise «[[:alpha:]]», nutzen
zu können, sollte die Umgebungsvariable «LC_CTYPE» ebenfalls auf
Dänisch eingestellt sein. 
Post by Michael Ottenbruch
$ echo $LC_COLLATE
da_DK.utf8
Das «echo»‐Kommando zeigt die Shell‐Variable «LC_COLLATE» an.  Das
hat mit der Umgebungsvariablen «LC_COLLATE» nicht unbedingt etwas
zu tun. 

Verlässliche Angaben über das augenblicklich eingestellte Locale
zeigt das Kommando «locale».  Wie sieht es da bei dir aus? 
Michael Ottenbruch
2020-04-29 18:58:22 UTC
Permalink
Post by Michael Ottenbruch
$ echo $LC_COLLATE
da_DK.utf8
Das «echo»?Kommando zeigt die Shell?Variable «LC_COLLATE» an.  Das
hat mit der Umgebungsvariablen «LC_COLLATE» nicht unbedingt etwas
zu tun. 
Verlässliche Angaben über das augenblicklich eingestellte Locale
zeigt das Kommando «locale».  Wie sieht es da bei dir aus? 
Ich wußte doch, daß ich ein Brett vor dem Kopf habe:

O /
---X---
O \

***@Lenovo-MO /cygdrive/c/Users/Michael/Documents
$ locale
LANG=de_DE
LC_CTYPE="de_DE"
LC_NUMERIC="de_DE"
LC_TIME="de_DE"
LC_COLLATE="de_DE"
LC_MONETARY="de_DE"
LC_MESSAGES="de_DE"
LC_ALL=

***@Lenovo-MO /cygdrive/c/Users/Michael/Documents
$ export LC_COLLATE=da_DK.utf8

***@Lenovo-MO /cygdrive/c/Users/Michael/Documents
$ export LC_CTYPE=da_DK.utf8

***@Lenovo-MO /cygdrive/c/Users/Michael/Documents
$ locale
LANG=de_DE
LC_CTYPE="da_DK.utf8"
LC_NUMERIC="de_DE"
LC_TIME="de_DE"
LC_COLLATE="da_DK.utf8"
LC_MONETARY="de_DE"
LC_MESSAGES="de_DE"
LC_ALL=

***@Lenovo-MO /cygdrive/c/Users/Michael/Documents
$ head -30 Sogn.txt | sort
| [[Alderslyst Sogn]] || align = 'right' | {{EWZL|DK|740-8019}} |
| [[Balle Sogn]] || align = 'right' | {{EWZL|DK|740-8496}} |
| [[Bryrup Sogn]] || align = 'right' | {{EWZL|DK|740-7993}} || [[Bryrup]] || align='right' | {{EWZ|DK|740-10368}}
| [[Dallerup Sogn]] || align = 'right' | {{EWZL|DK|740-8031}} || [[Sorring]] || align='right' | {{EWZ|DK|740-10378}}
| [[Funder Sogn]] || align = 'right' | {{EWZL|DK|740-8611}} || [[Funder Kirkeby]] || align='right' | {{EWZ|DK|740-18254}}
| [[Gjern Sogn]] || align = 'right' | {{EWZL|DK|740-8027}} || [[Gjern]] || align='right' | {{EWZ|DK|740-10820}}
| [[Grathe Sogn]] || align = 'right' | {{EWZL|DK|740-9213}} |
| [[Grønbæk Sogn]] || align = 'right' | {{EWZL|DK|740-8596}} || [[Ans (Dänemark)|Ans]] || align='right' | {{EWZ|DK|740-10797}}
| [[Gødvad Sogn]] || align = 'right' | {{EWZL|DK|740-8606}} |
| [[Hinge Sogn]] || align = 'right' | {{EWZL|DK|740-8599}} || [[Nørskovlund]]<sup>A</sup> || align='right' | {{EWZ0|DK|740-13150|LISTE}}
| [[Hørup Sogn]] || align = 'right' | {{EWZL|DK|740-8598}} || [[Kjellerup]] || align='right' | {{EWZ|DK|740-10971}}
| [[Kragelund Sogn]] || align = 'right' | {{EWZL|DK|740-8610}} || [[Kragelund (Silkeborg Kommune)|Kragelund]] || align='right' | {{EWZ|DK|740-18255}}
| [[Lemming Sogn]] || align = 'right' | {{EWZL|DK|740-8605}} || [[Lemming (Dänemark)|Lemming]] || align='right' | {{EWZ|DK|740-10737}}
| [[Levring Sogn]] || align = 'right' | {{EWZL|DK|740-8597}} || [[Levring (Silkeborg Kommune)|Levring]]<sup>A</sup> || align='right' | {{EWZ0|DK|740-18293|LISTE}}
| [[Linå Sogn]] || align = 'right' | {{EWZL|DK|740-8020}} || [[Laven (Dänemark)|Laven]] (Teil mehrerer Kommunen)<br /> [[Linå]]|| align='right' | {{EWZ|DK|740-10375}} <br /> {{EWZ|DK|740-10374}}

O /
---X---
O \

Die vier, die mit "G" anfangen, zeigen, daß es jetzt stimmt.

Kaum macht man es richtig, schon funktioniert es. :-) Vielen Dank!
--
...und tschuess!

Michael
E-mail: ***@sailor.ping.de
Loading...