Seite 3 von 3

Re: Teilstring suchen

Verfasst: Do, 19. Okt 2017 1:47
von AUGE_OHR
Werner_Bayern hat geschrieben: Mi, 18. Okt 2017 21:08 Jan benutzt cdx,
und Xbase++ v2.x
mit der v1.9x kann ist sein Problem "HÄ" vor "HA" nicht nachvollziehen
Werner_Bayern hat geschrieben: Mi, 18. Okt 2017 21:08zu dbfntx hat er sich bisher nicht geäußert.
vermutlich war Alaska nicht an der DBFNTX ... warum auch denn da sind alle erlaubten Datentypen vorhanden.
bei Fox gibt es ja mehr Datentypne die bislang nicht alle von Xbase++ unterstützt wurden und da besteht ja der Bedarf für PolarFox.

das allerdings ausgerechnet die Collation to GERMAN nicht richtig funktioniert ist natürlich peinlich für Alaska :lol:

Re: Teilstring suchen

Verfasst: Do, 19. Okt 2017 9:58
von HaPe
Hallo Jimmy !
das allerdings ausgerechnet die Collation to GERMAN nicht richtig funktioniert ist natürlich peinlich für Alaska :lol:
/Ironie on/
Warum denn, die können doch besser englisch als deutsch wie man an der 2.0er Hilfe sieht ... :lol:
/Ironie off/

Re: Teilstring suchen

Verfasst: Do, 19. Okt 2017 10:57
von Jan
Martin Altmann hat geschrieben: Mi, 18. Okt 2017 11:29warum versuchst Du nicht mittels OrdInfo( CDXORD_COLLATION ) Dein Glück?
Martin,

gibt es dazu irgendwo eine Aufstellung der Rückgabewerte bzw. deren Bedeutung? Ich finde da nirgends was zu. Und bekomme eine 0 zurück ...

Jan

Re: Teilstring suchen

Verfasst: Do, 19. Okt 2017 11:20
von HaPe
Hallo Jan !
gibt es dazu irgendwo eine Aufstellung der Rückgabewerte bzw. deren Bedeutung? Ich finde da nirgends was zu. Und bekomme eine 0 zurück ...
In der Collat.ch; 0 bedeutet SYSTEM.

Re: Teilstring suchen

Verfasst: Do, 19. Okt 2017 11:21
von Martin Altmann
Hilft das :?:
collat.ch hat geschrieben:#define COLLAT_SYSTEM 0
#define COLLAT_GERMAN 1
#define COLLAT_BRITISH 2
#define COLLAT_AMERICAN 2
#define COLLAT_FINNISH 3
#define COLLAT_FRENCH 4
#define COLLAT_DANISH 5
#define COLLAT_GREEK437 6
#define COLLAT_GREEK851 7
#define COLLAT_ICELANDIC850 8
#define COLLAT_ICELANDIC861 9
#define COLLAT_ITALIAN 10
#define COLLAT_NORWEGIAN 11
#define COLLAT_PORTUGUESE 12
#define COLLAT_SPANISH 13
#define COLLAT_SWEDISH 14
#define COLLAT_DUTCH 15
#define COLLAT_USER 16
#define COLLAT_ASCII -1
Hans-Peter war schneller...

Viele Grüße,
Martin

Re: Teilstring suchen

Verfasst: Do, 19. Okt 2017 11:37
von Jan
Hallo Ihr beiden,

Danke dafür. Hab ich eben gerade auch gefunden. Und bin irritiert - wenn ich die Indizee mit GERMAN neu aufbaue, dann gibt der mir 3 zurück - FInnisch! Ob das vielleicht das Problem ist?

Jan

Re: Teilstring suchen

Verfasst: Fr, 10. Nov 2017 7:40
von UliTs
Was ist daraus geworden?

Re: Teilstring suchen

Verfasst: Fr, 10. Nov 2017 8:20
von Jan
Uli,

nix ist daraus geworden. Alaska hat das als Fehler anerkannt. Aber noch nichts dran gemacht. Ob die das jemals machen werden steht sicher auch in den Sternen. Ich hab denen schon vor mind. 5 Jahren einen schweren Fehler gemailt, der PDR ist auch immer noch offen.

Jan

Re: Teilstring suchen

Verfasst: Fr, 10. Nov 2017 10:57
von UliTs
Danke für die Info.
Lohnt es sich dann, einen Work around zu programmieren?
Wenn man die Funktion OhneUmlauteStr:

Code: Alles auswählen

FUNCTION OhneUmlauteStr( cStr,nMaxLen )
LOCAL cResult:="",I
DEFAULT nMaxLen TO 25
  FOR I := 1 to len( cStr )
    cResult += OhneUmlautChar( cStr[I] )
  NEXT I
RETURN( cResult )

STATIC FUNCTION OhneUmlautChar( cChar )
LOCAL cResult
  IF     cChar=="Ä" ; cResult := "AE"
  ELSEIF cChar=="Ö" ; cResult := "OE"
  ELSEIF ...
  ELSE ; cResult := cChar ; ENDIF
RETURN( cResult )
Bei der Erstellung des Index nimmt:

Code: Alles auswählen

INDEX ON NeuerIndex TO OhneUmlauteStr( Nachname,30 )   // Richtig so?
wird es mit ein bisschen Fummelei funktionieren :-) . Suchen müsste wie folgt gehen:

Code: Alles auswählen

cStr :=  "BÄ"
Seek( OhneUmlauteStr( cStr,/*nMaxLen*/ )
Hilft das?

Edit: habe das gerade ohne zu testen geschrieben.

Re: Teilstring suchen

Verfasst: Fr, 10. Nov 2017 11:02
von Jan
Hallo Uli,

danke für den Code. Muß ich mal heute Abend oder morgen testen. Im Moment habe ich das einfach mal gelassen wie es war. Bislang hat anscheinend auch noch kein Kunde das Problem real bemerkt ... *uffa*.

Das eine Problem hast Du ja schon ein wenig eingegrenzt - der Indexausdruck muß immer gleich lang sein. Deine Lösung passt das an, produziert dann aber das (mögliche) Problem, das in einem Begriff mit mehreren Umlauten hinten ein gutes Stück im Ausdruck fehlen kann. Da könnte ich mal probieren, den Indexausdruck einfach z. B. 5 Stellen länger zu machen als das eigentliche Feld ist - dann habe ich hinten genügend Platz für Umlaut-Verlängerungen.

Jan

Re: Teilstring suchen

Verfasst: Fr, 10. Nov 2017 11:14
von UliTs
Wenn Du auf Nummer sicher gehen willst, machst Du den Indexstring einfach doppelt so lang wie das Feld :-) .

Re: Teilstring suchen

Verfasst: Fr, 10. Nov 2017 11:19
von Martin Altmann
Auf die Problematik stößt man eh spätestens bei utf-Formaten. Nicht begrenzt auf die Indexausdrücke, sondern Feldlängen allgemein.
Für die SQLer unter euch: Char/Byte ist so ein Beispiel. Wer bisher Byte genommen hat, kann dann ein größeres Problem bekommen.

Viele Grüße,
Martin

Re: Teilstring suchen

Verfasst: Fr, 10. Nov 2017 11:26
von Jan
Hallo Martin,

die Problematik existiert hier aber leider nicht. Weil Alaska kein UTF in die dbf einbauen will.

Jan

Re: Teilstring suchen

Verfasst: Fr, 10. Nov 2017 11:28
von Martin Altmann
Abwarten. Bis dahin existiert sie für dein Problem nicht, das ist korrekt.

Re: Teilstring suchen

Verfasst: Fr, 10. Nov 2017 11:59
von Tom
Ich mache das schon immer so, wie Uli das angedeutet hat, führe dafür aber a) gesonderte Felder und b) einen gesonderten Index mit. Dadurch können unterschiedliche Schreibweisen (Möller, Moeller) in Suchfunktionalitäten abgefangen werden, weil sowieso immer nach "Moeller" gesucht werden würde, aber wenn man (meistens intern) exakt weiß, worum es geht, wird auch nur das gesucht - und gefunden. Die gesonderten Felder - auf die dann auch die gesonderten Indexe gehen - sind für DBEs, die keine UDFs in Indexen unterstützen, z.B. ADS. Und, ja, hier ist alles doppelt so lang. :wink:

(Edit: Wichtiger als bei Umlauten ist das im Tagesgeschäft erfahrungsgemäß bei allem rund ums ß (Eszett).)

Re: Teilstring suchen

Verfasst: Fr, 10. Nov 2017 18:46
von AUGE_OHR
was wäre mit SOUNDEX() ?

Re: Teilstring suchen

Verfasst: So, 12. Nov 2017 22:02
von UliTs
AUGE_OHR hat geschrieben: Fr, 10. Nov 2017 18:46 was wäre mit SOUNDEX() ?
  • Soundex()
    This function is not supported by Xbase++.
    Description
    Note: A sample implementation of a Soundex algorithm is included in the C-API example programs.

Re: Teilstring suchen

Verfasst: Mo, 13. Nov 2017 9:27
von nightcrawler
statt SOUNDEX würde ich eher die Kölner Phonetik nehmen. Soundex funktioniert nur für englisch richtig gut.
https://www.jd-engineering.de/german-so ... mentation/

Re: Teilstring suchen

Verfasst: Mo, 13. Nov 2017 10:16
von Tom
Im Alltag sind es nur Umlaute, das Eszett, die Accent-Kumpels (é, è, ê) und zwei, drei weitere Genossen (je nach Entfernung der dänischen Grenze), die wirklich relevant sind für Ähnlichkeitssuchen, gerade bei Namensangaben. Je komplizierter der Name, umso kreativer werden die Leute bei dessen Schreibung - selbst von meinem 5-Buchstaben-Nachnamen habe ich schon mindestens drei Dutzend Schreibungen gesehen, und die findet man ohnehin nicht alle, ganz egal, mit welchem Algorithmus.

Re: Teilstring suchen

Verfasst: Mo, 13. Nov 2017 10:24
von Martin Altmann
Nicht ganz Tom.
Folgende Varianten tauchen auch gerne auf (eine Zeile jeweils synonym zu sehen):
ck - kk - k
v - w
ou - u
tz - z
ai - ei - ay - ey
Allgemein Doppelungen:
mm - m
nn - n
ss - s
gg - g
ee - e
...
Um nur einiges zu nennen.

Viele Grüße,
Martin