AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Sortieren nach DIN bei TStringList;

Ein Thema von Willie1 · begonnen am 18. Mai 2020 · letzter Beitrag vom 21. Mai 2020
Antwort Antwort
Willie1

Registriert seit: 28. Mai 2008
657 Beiträge
 
Delphi 10.1 Berlin Starter
 
#1

Sortieren nach DIN bei TStringList;

  Alt 18. Mai 2020, 18:22
Hallo Delphi-Freunde*innen,
ich habe u.a. bei Wikipedia gelesen, dass sortieren beim deutschen Alphabet(mit Umlauten) nach DIN 5007 erfolgt. Es gibt 2 Varianten:
1. ä entspricht a, ö = o ü = u, ß = s
2. ä entspricht ae, ö = oe ü = ue, ß = ss.
Bei Windows (und TStringList) wird nach Methode 1 sortiert.

Ich hatte nun den Ehrgeiz, Methode 2 bei TStringList hinzu zu fügen. Das ist mir gelungen aber nur mit der Methode Sort. Sorted=true und Add('') ist nicht praktikabel.

Könnt ihr euch meinen Ansatz mal ansehen, vielleicht gibt es eine einfachere Lösung. Bei Wikipedia gibt es eine Beispiel-Liste.
https://de.wikipedia.org/wiki/Alphabetische_Sortierung
Zu beachten ist, Goethe muss Goethe bleiben und darf nicht zu Göthe mutieren.

Danke und Gruß Willie.
Angehängte Dateien
Dateityp: pas AddObject1_h.pas (3,9 KB, 4x aufgerufen)
Gut hören kann ich schlecht, schlecht sehen kann ich gut - Ersteres stimmt nicht, das zweite schon.
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.063 Beiträge
 
Delphi 12 Athens
 
#2

AW: Sortieren nach DIN bei TStringList;

  Alt 18. Mai 2020, 18:31
Bei Windows (und TStringList) wird nach Methode 1 sortiert.
Nein.

Aber es wird mit der Sprache des System sortiert.
Im Deutschen also Ä nach A,
im Englischen Ä nach dem Alphabet
man kann auch ganz stupide nach Index der Unicode-Chars sortieren, ohne irgendwelche sprachliche Eigenheiten
und es gibt sogar Untrschiede zwischen dem Deutsch der Deutschen, Schweizer, Österreicher und Lichtensteiner.


Delphi nimmt standardmäßig MSDN-Library durchsuchenCompareString(LOCALE_USER_DEFAULT) und eventuell auch noch inkl. NORM_IGNORECASE.

Du kannst aber via TStringList.CustomSort auch eine beliebige andere Art der Sortierung benutzen.
z.B. siehe MSDN-Library durchsuchenCompareString oder MSDN-Library durchsuchenCompareStringEx
sogar https://www.delphipraxis.net/29910-n...n-strings.html

z.B. MAKELANGID oder MAKESORTLCID : LANG_GERMAN + SUBLANG_GERMAN + SORT_GERMAN_PHONE_BOOK
siehe Windows.pas : LANG_*, SUBLANG_*, SORT_*, LOCALE_*, ...


PS: https://docs.microsoft.com/en-us/win...r-applications
https://docs.microsoft.com/en-us/win...resent-strings
Neuste Erkenntnis:
Seit Pos einen dritten Parameter hat,
wird PoSex im Delphi viel seltener praktiziert.

Geändert von himitsu (18. Mai 2020 um 19:00 Uhr)
  Mit Zitat antworten Zitat
Willie1

Registriert seit: 28. Mai 2008
657 Beiträge
 
Delphi 10.1 Berlin Starter
 
#3

AW: Sortieren nach DIN bei TStringList;

  Alt 18. Mai 2020, 19:05
Zitat:
Du kannst aber via TStringList.CustomSort auch eine beliebige andere Art der Sortierung benutzen.
CustomSort hatte ich übersehen, muss ich mir ansehen.

"Im Deutschen also Ä nach A" nein Ä = A - nicht unbedingt, sieh dir die Beispielliste in Wikipedia an. Wikipedia ist nicht meine einzige Referenz.

Ich kann darauf hinweisen, dass auch in einem analogen Büro das Sortieren wichtig ist. Ich weiß aus eigener Erfahrung, eine falsch abgelegte Akte ist so, als ob man sie verloren hätte
Willie.
Gut hören kann ich schlecht, schlecht sehen kann ich gut - Ersteres stimmt nicht, das zweite schon.

Geändert von Willie1 (18. Mai 2020 um 19:11 Uhr)
  Mit Zitat antworten Zitat
Willie1

Registriert seit: 28. Mai 2008
657 Beiträge
 
Delphi 10.1 Berlin Starter
 
#4

AW: Sortieren nach DIN bei TStringList;

  Alt 19. Mai 2020, 18:09
Hallo Himitsu,

ich habe die Dateien heruntergeladen. Ich kann den grünen Kommentar-Text mit meinen Augen sehr schlecht lesen, auch wenn ich ihn vergrößere (kontrastarm). Welches Compare würde es denn nach meiner Vorgabe sortieren? Kannst du mir das sagen.
So soll es aussehen:
Göbel
Goethe
Göthe
Götz
Goldmann

Willie.
Gut hören kann ich schlecht, schlecht sehen kann ich gut - Ersteres stimmt nicht, das zweite schon.
  Mit Zitat antworten Zitat
Willie1

Registriert seit: 28. Mai 2008
657 Beiträge
 
Delphi 10.1 Berlin Starter
 
#5

AW: Sortieren nach DIN bei TStringList;

  Alt 20. Mai 2020, 16:57
Delphi-Quellcode:
function DumbItDownFor95(const S1, S2: WideString; CmpFlags: Integer): Integer;
var
  a1, a2: AnsiString;
begin
  a1 := s1;
  a2 := s2;
  Result := CompareStringA(LOCALE_USER_DEFAULT, CmpFlags, PAnsiChar(a1), Length(a1),
    PAnsiChar(a2), Length(a2)) - 2;
end;

function MyCompare(SL: TStringList; i1,i2: Integer): Integer;
begin
 SetLastError(0);
  Result := CompareStringW(LOCALE_USER_DEFAULT or NORM_IGNORECASE,
                           LANG_GERMAN or
                           SUBLANG_GERMAN or
                           SORT_GERMAN_PHONE_BOOK or
                           NORM_IGNORENONSPACE or
                           NORM_IGNORESYMBOLS,
                           PWideChar(SL[i1]),
                           Length(SL[i1]),
                           PWideChar(SL[i2]),
                           Length(SL[i2])) - 2;
  case GetLastError of
    0: ;
    ERROR_CALL_NOT_IMPLEMENTED: Result := DumbItDownFor95(SL[i1],
                                                          SL[i2],
                                                          NORM_IGNORECASE or
                                                          NORM_IGNORENONSPACE or
                                                          NORM_IGNORESYMBOLS);
  else
    RaiseLastOSError;
  end;
end;
Hier aus dem Forum.

So habe ich es kopiert, es bleibt bei der Sortierung Var.1 Ä=A. Willie.

Geändert von Willie1 (20. Mai 2020 um 17:03 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
11.453 Beiträge
 
Delphi 12 Athens
 
#6

AW: Sortieren nach DIN bei TStringList;

  Alt 20. Mai 2020, 17:16
Versuch mal dies

Delphi-Quellcode:
  Result := CompareStringW(MAKELCID(MAKELANGID(LANG_GERMAN, SUBLANG_GERMAN), SORT_GERMAN_PHONE_BOOK),
    NORM_IGNORECASE or NORM_IGNORENONSPACE or NORM_IGNORESYMBOLS, PWideChar(SL[i1]), Length(SL[i1]),
    PWideChar(SL[i2]), Length(SL[i2])) - 2;
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
Willie1

Registriert seit: 28. Mai 2008
657 Beiträge
 
Delphi 10.1 Berlin Starter
 
#7

AW: Sortieren nach DIN bei TStringList;

  Alt 20. Mai 2020, 18:01
Hallo Uwe so geht es, schwierige Geschichte.
In der Compare-Routine die Umlaute zu ändern, bringt nichts.

Gruß Willie.
Gut hören kann ich schlecht, schlecht sehen kann ich gut - Ersteres stimmt nicht, das zweite schon.
  Mit Zitat antworten Zitat
Alallart

Registriert seit: 8. Dez 2015
155 Beiträge
 
#8

AW: Sortieren nach DIN bei TStringList;

  Alt 20. Mai 2020, 20:37
ich habe die Dateien heruntergeladen. Ich kann den grünen Kommentar-Text mit meinen Augen sehr schlecht lesen, auch wenn ich ihn vergrößere (kontrastarm).
Ich weiß zwar nicht auf was du dich genau beziehst, aber falls du Probleme hast hast bestimmte Farben zu erkennen, empfehle ich dir den alten Internet Explorer. Man kann über den sagen was man will, aber der hat paar gute Optionen. Starten den Internet Explorer und gehe dann in die Internetoptionen. Im Register Allgemein findest du unten den Button Barrierefreiheit. Im Dialogfeld dann Farbangaben auf Webseiten ignorieren wählen. Eventuell auch Schriftgradangaben auf Webseiten ignorieren wählen. Die Webseite ist danach sehr gut und kontrastreich lesbar.
  Mit Zitat antworten Zitat
Willie1

Registriert seit: 28. Mai 2008
657 Beiträge
 
Delphi 10.1 Berlin Starter
 
#9

AW: Sortieren nach DIN bei TStringList;

  Alt 21. Mai 2020, 16:38
Hallo Alallart,
für mich als Sehbehinderter ist Edge mit seiner perfekten Vorlesefunktion, auch in englisch, der beste Browser. Seit Windows 10 ist der Windows-PC bestens für Sehschwache geeignet. Da bin ich sehr zufrieden. Mit dem Delphi-Editor komme ich gut zurecht. Habe eben die Farbe für Kommentare von grün auf violett geändert, das hätte ich schon früher machen sollen.
Willie.
Gut hören kann ich schlecht, schlecht sehen kann ich gut - Ersteres stimmt nicht, das zweite schon.
  Mit Zitat antworten Zitat
Antwort Antwort

 

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 21:18 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz