Umlaute im Index

Zugriff, Engines, Konvertierung. Von ADS über DBF bis zu SQL.

Moderator: Moderatoren

Antworten
Benutzeravatar
Jan
Marvin
Marvin
Beiträge: 14641
Registriert: Fr, 23. Sep 2005 18:23
Wohnort: 49328 Melle
Hat sich bedankt: 21 Mal
Danksagung erhalten: 87 Mal
Kontaktdaten:

Umlaute im Index

Beitrag von Jan »

Moin,

wenn ich mich recht erinnere gab es in Clipper mal eine Möglichkeit, das Umlautproblem im Index zu umgehen. Normalerweise sind ja im Index Müller und Mueller an komplett unterschiedlichen Positionen eingeordnet. Und natürlich könnte ich jetzt hingehen und das durch ein "Index on StrTran(name, "ü", "ue") " einbauen. Aber mal abgesehen davon, daß das bei mehreren Umlauten und ß ziemlich verschachtelt wird, habe ich dann auch noch das Problem der unterschiedlichen Stringlängen im Index - keine gute Idee. Läßt sich auch irgendwie regeln, macht den Indexausdruck aber nicht einfacher.

Gibt es da etwas, mit dem ich das unter Xbase++ umgehen kann?

Jan
Mitglied der XUG Osnabrück
Mitglied der XUG Berlin/Brandenburg
Mitglied des Deutschsprachige Xbase-Entwickler e. V.
Benutzeravatar
AUGE_OHR
Marvin
Marvin
Beiträge: 12903
Registriert: Do, 16. Mär 2006 7:55
Wohnort: Hamburg
Hat sich bedankt: 19 Mal
Danksagung erhalten: 44 Mal

Re: Umlaute im Index

Beitrag von AUGE_OHR »

Code: Alles auswählen

SET COLLATION DIN
gruss by OHR
Jimmy
Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
Beiträge: 15688
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Hat sich bedankt: 65 Mal
Danksagung erhalten: 33 Mal
Kontaktdaten:

Re: Umlaute im Index

Beitrag von brandelh »

Jan hat geschrieben: Fr, 23. Feb 2018 8:57 ich dann auch noch das Problem der unterschiedlichen Stringlängen im Index - keine gute Idee
Die Länge des Strings den die Funktion zurückgibt muss natürlich immer gleich sein, daher hat man kein Längenproblem wenn man alles richtig macht ;-)
Jan hat geschrieben: Fr, 23. Feb 2018 8:57 wenn ich mich recht erinnere gab es in Clipper mal eine Möglichkeit, das Umlautproblem im Index zu umgehen.
Normalerweise sind ja im Index Müller und Mueller an komplett unterschiedlichen Positionen eingeordnet ...
Gibt es da etwas, mit dem ich das unter Xbase++ umgehen kann?
Ein Problem ist, dass es im deutschen 2 grundsätzliche Regeln für das Einsortieren dieser Umlaute gibt:

:arrow: https://de.wikipedia.org/wiki/Alphabeti ... he_Sprache

ich kopiere das mal hier rein ...
Deutschland: DIN 5007

Die deutsche Norm DIN 5007-1 beschreibt unter dem Titel „Ordnen von Schriftzeichenfolgen (ABC-Regeln)“ das Sortieren.

DIN 5007 Variante 1 (für Wörter verwendet, etwa in Lexika; Abschnitt 6.1.1.4.1)

ä und a sind gleich
ö und o sind gleich
ü und u sind gleich
ß und ss sind gleich
DIN 5007 Variante 2 (spezielle Sortierung für Namenslisten, etwa in Telefonbüchern; Abschnitt 6.1.1.4.2)

ä und ae sind gleich
ö und oe sind gleich
ü und ue sind gleich
ß und ss sind gleich
unter CLIPPER hat man eine OBJ gelinkt, die entweder das eine oder das andere Sortierverfahren nutzte.

Unter Xbase++ gibt es ja SET COLLATION TO GERMAN, wobei ich nichts gefunden habe um welche Variante es sich handelt. Eigentlich sollte damit die Sortierung erledigt sein ;-)

Das Problem warum ich aber die von dir verschmähte Funktion nutze ist der, dass ich so mit "ü" auch "Ü" oder "U" oder "UE" etc. finde, eben genau das was ich möchte !
Gruß
Hubert
Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
Beiträge: 15688
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Hat sich bedankt: 65 Mal
Danksagung erhalten: 33 Mal
Kontaktdaten:

Re: Umlaute im Index

Beitrag von brandelh »

AUGE_OHR hat geschrieben: Fr, 23. Feb 2018 9:09

Code: Alles auswählen

SET COLLATION DIN
was man alles finden kann ... aber eine Erläuterung steht nicht in der Hilfe oder ?
Gruß
Hubert
Benutzeravatar
Jan
Marvin
Marvin
Beiträge: 14641
Registriert: Fr, 23. Sep 2005 18:23
Wohnort: 49328 Melle
Hat sich bedankt: 21 Mal
Danksagung erhalten: 87 Mal
Kontaktdaten:

Re: Umlaute im Index

Beitrag von Jan »

Danke für den Hinweis auf DIN. Das dürfte es vermutlich sein. Da aber in der Hilfe außer dem Erwähnen der Einstellung gar nichts dazu gesagt wird, habe ich das mal an Alaska geschickt. Schauen wir mal, was die dazu sagen.

Gab es das zu Clipperzeiten noch nicht? Ich finde das DIN in keinem Clipper-Handbuch.

Jan
Mitglied der XUG Osnabrück
Mitglied der XUG Berlin/Brandenburg
Mitglied des Deutschsprachige Xbase-Entwickler e. V.
Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
Beiträge: 15688
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Hat sich bedankt: 65 Mal
Danksagung erhalten: 33 Mal
Kontaktdaten:

Re: Umlaute im Index

Beitrag von brandelh »

unter Clipper war das die NTXGER.OBJ ich meine mich auch an NTXGER2.OBJ zu erinnern, kann die aber nicht im Verzeichnis finden.
Eine DIN.OBJ gibt es, aber die wird wohl nichts mit den NTX Dateien zu tun haben.
Gruß
Hubert
Benutzeravatar
Jan
Marvin
Marvin
Beiträge: 14641
Registriert: Fr, 23. Sep 2005 18:23
Wohnort: 49328 Melle
Hat sich bedankt: 21 Mal
Danksagung erhalten: 87 Mal
Kontaktdaten:

Re: Umlaute im Index

Beitrag von Jan »

Antwort von Alaska:
Support Alaska Software hat geschrieben:Der Unterschied zwischen COLLATION GERMAN und COLLATION DIN ergibt sich aus der Implementierung des Kommandos in std.ch und collat.ch. Ergo: GERMAN und DIN sind identisch außer einigen LexRules (siehe std.ch).
In der std.ch finde ich dann

Code: Alles auswählen

#command  SET COLLATION TO DIN      =>  Set( _SET_COLLATION, COLLAT_GERMAN );;
          SetLexRule( {{"„","ae"},{"”","oe"},{"","ue"},;
                       {"Ž","AE"},{"™","OE"},{"š","UE"},;
                       {"á","ss"}})
Das muß ich jetzt noch mal etwas testen. Denn die Hilfe zu SetLexRule() finde ich teilweise irritierend.

Und ich muß mal checken wie sich das auf OEM oder ANSI-Systeme auswirkt.

Jan
Mitglied der XUG Osnabrück
Mitglied der XUG Berlin/Brandenburg
Mitglied des Deutschsprachige Xbase-Entwickler e. V.
Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
Beiträge: 15688
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Hat sich bedankt: 65 Mal
Danksagung erhalten: 33 Mal
Kontaktdaten:

Re: Umlaute im Index

Beitrag von brandelh »

Oh je ... die STD.CH ist in OEM (hab ich mit meinem Texteditor gerade geprüft), so sieht die Zeile im Quellcode aus:

Code: Alles auswählen

#command  SET COLLATION TO DIN      =>  Set( _SET_COLLATION, COLLAT_GERMAN );;
          SetLexRule( {{"ä","ae"},{"ö","oe"},{"ü","ue"},;
                       {"Ä","AE"},{"Ö","OE"},{"Ü","UE"},;
                       {"ß","ss"}})
Im Prinzip steht da, dass ein "ä" genauso wie ein "ae" einzusortieren ist, ein "ö" wie ein "oe" und Groß-/Kleinschreibung eine Rolle spielt.
Während wohl GERMAN das normalerweise anders sieht.

Und ich muss bei meiner IsAnsi() Funktion, die Werte aus "COLLAT.CH" statt den Zahlen nutzen, denn dort steht die könnten sich ändern ;-)
Gruß
Hubert
Benutzeravatar
Jan
Marvin
Marvin
Beiträge: 14641
Registriert: Fr, 23. Sep 2005 18:23
Wohnort: 49328 Melle
Hat sich bedankt: 21 Mal
Danksagung erhalten: 87 Mal
Kontaktdaten:

Re: Umlaute im Index

Beitrag von Jan »

Hubert,

exakt.

Mein Problem ist jetzt: Ich habe eine OEM-Oberfläche, also OEM. Die dbf sind ANSI. Der Quellcode ebenfalls ANSI. Ich möchte in einem XbpBrowse alle Müller und Mueller zusammen stehen haben, nach Vornamen sortiert. Mit Collation DIN klappt das jedenfalls nicht. Auch nicht mit Umschreiben auf ANSI (wobei mir gerade einfällt - eventuell muß ich das mit ConvToAnsiCP() machen, damit mein Editor-ANSI das Kompilieren mit der verbundenen Konvertierung nach OE überlebt ...)

Jan
Mitglied der XUG Osnabrück
Mitglied der XUG Berlin/Brandenburg
Mitglied des Deutschsprachige Xbase-Entwickler e. V.
Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
Beiträge: 15688
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Hat sich bedankt: 65 Mal
Danksagung erhalten: 33 Mal
Kontaktdaten:

Re: Umlaute im Index

Beitrag von brandelh »

Genau das ist der Grund warum ich mir die Sortierung in meiner Funktion seit Clipper selbst zusammenbaue,
die Sortierung stimmt mit meinen Wünschen überein ( ü wie ue, egal ob groß oder klein) er findet mit ü alle Schreibweisen, genauso wie mit u oder ue ...
Gruß
Hubert
Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
Beiträge: 15688
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Hat sich bedankt: 65 Mal
Danksagung erhalten: 33 Mal
Kontaktdaten:

Re: Umlaute im Index

Beitrag von brandelh »

Jan hat geschrieben: Fr, 23. Feb 2018 15:13 alle Müller und Mueller zusammen stehen haben, nach Vornamen sortiert.
das hatte ich eben überlesen, wie baust du beide Felder zusammen ?

upper( Nachname + Vorname )

sollte nach Vorname Sortieren, wenn die Nachnahmen gleich sind oder durch Indexfunktion (Lexrule) gleich gesetzt werden.
Gruß
Hubert
Benutzeravatar
AUGE_OHR
Marvin
Marvin
Beiträge: 12903
Registriert: Do, 16. Mär 2006 7:55
Wohnort: Hamburg
Hat sich bedankt: 19 Mal
Danksagung erhalten: 44 Mal

Re: Umlaute im Index

Beitrag von AUGE_OHR »

Jan hat geschrieben: Fr, 23. Feb 2018 15:13 Ich habe eine OEM-Oberfläche, also OEM.
Die dbf sind ANSI. Der Quellcode ebenfalls ANSI.
mit OEM meinst du wohl Hybrid-Modus :?:
sind es FOXDBF :?:
Jan hat geschrieben: Fr, 23. Feb 2018 15:13 Ich möchte in einem XbpBrowse alle Müller und Mueller zusammen stehen haben, nach Vornamen sortiert.
Mit Collation DIN klappt das jedenfalls nicht.
DIN ist IMHO for OEM gedacht ... dein "Problem" ist ANSI

:idea: mal so gedacht ...

Code: Alles auswählen

SET COLLATION TO DIN
ist ja aus 2 Teilen zusammensetzt.
für ANSI würde man SYSTEM setzen ... wenn da nicht die "Sonderzeichen" wären ...

Code: Alles auswählen

#command  SET COLLATION TO JANANSI      =>  Set( _SET_COLLATION, COLLAT_SYYSTEM );;
          SetLexRule( {{"ä","ae"},{"ö","oe"},{"ü","ue"},;
                       {"Ä","AE"},{"Ö","OE"},{"Ü","UE"},;
                       {"ß","ss"}})
gruss by OHR
Jimmy
Antworten