Teilstring suchen

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

Moderator: Moderatoren

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:

Teilstring suchen

Beitrag von Jan »

Moin,

ich glaube, wir hatten das Thema schon mal, ich finde das nur nicht.

Ich möchte eine Suche machen auf ein indiziertes Feld. Problem: Ich suche nicht nach dem vollen Feldinhalt, sondern nach einem Teilinhalt. Einfach ist dabei zum Glück, daß dieser Teilstring IMMER der Beginn des Feldinhaltes ist. Nicht irgendwo mitten drin.

Das Problem ist: Ein Softseek geht nicht. Aus irgend einem Grund steht der z. B. bei einer Suche nach HA auf HÄ. Obwohl es durchaus Einträge mit HA gibt. Ein Scope geht auch nicht, der findet keine Teilstrings.

Locate fällt eher aus - das wäre zwar entsprechend flexibel, aber die dbf kann schon mal ein paar zehntausend Datensätze haben. Das würde dann doch etwas arg lange dauern.

Jan
Mitglied der XUG Osnabrück
Mitglied der XUG Berlin/Brandenburg
Mitglied des Deutschsprachige Xbase-Entwickler e. V.
Benutzeravatar
Werner_Bayern
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2120
Registriert: Sa, 30. Jan 2010 22:58
Wohnort: Niederbayern
Hat sich bedankt: 29 Mal
Danksagung erhalten: 70 Mal

Re: Teilstring suchen

Beitrag von Werner_Bayern »

Servus Jan,

bei mir geht das einwandfrei mit softseek. "HA" wird gefunden, "Hägar der Schreckliche" steht am Ende der Liste.
Ordwildseek funktioniert mit Umlauten nicht. Ich verwende dbfntx mit SET COLLATION TO GERMAN.
es grüßt

Werner

<when the music is over, turn off the lights!>
Benutzeravatar
Martin Altmann
Foren-Administrator
Foren-Administrator
Beiträge: 16501
Registriert: Fr, 23. Sep 2005 4:58
Wohnort: Berlin
Hat sich bedankt: 111 Mal
Danksagung erhalten: 48 Mal
Kontaktdaten:

Re: Teilstring suchen

Beitrag von Martin Altmann »

Index über das Feld und dann seek mit left(...,..)

Viele Grüße,
Martin
:grommit:
Webseite mit XB2.NET und ausschließlich statischem Content in Form von HTML-Dateien: https://www.altem.de/
Webseite mit XB2.NET und ausschließlich dynamischem Content in Form von in-memory-HTML: https://meldungen.altem.de/

Mitglied der XUG Osnabrück
Vorsitzender des Deutschsprachige Xbase-Entwickler e. V.
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: Teilstring suchen

Beitrag von Jan »

Hallo,

der Index lautet auf Upper(feldname). Und egal was ich mache - immer steht der mit Hä vor Ha. Und will da auch nicht von weggehen - so lange ich mit Softseek suche. Ohne Softseek geht es. Aber dann finde ich nur das einzelne "H", oder dann mit drei Buchstaben. Zwei Buchstaben werden niemals gefunden. Immer dann, wenn das ein Suchbegriff ist, wo bei mindestens einem potentiellen Treffer an zweiter Stelle ein Umlaut steht.

Ich bin irritiert ...

Jan
Mitglied der XUG Osnabrück
Mitglied der XUG Berlin/Brandenburg
Mitglied des Deutschsprachige Xbase-Entwickler e. V.
Benutzeravatar
Werner_Bayern
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2120
Registriert: Sa, 30. Jan 2010 22:58
Wohnort: Niederbayern
Hat sich bedankt: 29 Mal
Danksagung erhalten: 70 Mal

Re: Teilstring suchen

Beitrag von Werner_Bayern »

Servus Jan,

ist bei mir nicht anders, auch upper(text) und ein Dbseek(cText, .T.). Funktioniert einwandfrei. Hast Du

Code: Alles auswählen

SET COLLATION TO GERMAN
eingestellt?
test.PNG
test.PNG (6.17 KiB) 12919 mal betrachtet
test2.PNG
test2.PNG (6.03 KiB) 12917 mal betrachtet
es grüßt

Werner

<when the music is over, turn off the lights!>
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: Teilstring suchen

Beitrag von Jan »

Hallo Werner,

ja, SET COLLATION TO GERMAN ist eingestellt. Und FOXCDX.
Index.jpg
Index.jpg (16.71 KiB) 12916 mal betrachtet
Jan
Mitglied der XUG Osnabrück
Mitglied der XUG Berlin/Brandenburg
Mitglied des Deutschsprachige Xbase-Entwickler e. V.
DelUser01

Re: Teilstring suchen

Beitrag von DelUser01 »

Jan hat geschrieben: Sa, 07. Okt 2017 17:52SoftSeek
FOXCDX
Hast Du den Index Auch mit Upper aufgebaut?
Die linksbündige Suche mache ich dann nicht mit SoftSeek sondern mit Exact
Dann sollte das funktionieren:

z.B.:
Index on Upper( TEXTFELD ) to index1

gesuchter Begriff "Hä"

cSuchen := "Hä"
Set exact off
DbSeek( Upper( cSuchen ) )
Set Exact On
? FIELD->TEXTFELD Anzeige: "Hägar"

oder gesuchter Begriff "Ha"

cSuchen := "Ha"
Set exact off
DbSeek( Upper( cSuchen ) )
Set Exact On
? FIELD->TEXTFELD Anzeige: "Hans"

Sonst tippe auf FOXCDX...
Benutzeravatar
Werner_Bayern
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2120
Registriert: Sa, 30. Jan 2010 22:58
Wohnort: Niederbayern
Hat sich bedankt: 29 Mal
Danksagung erhalten: 70 Mal

Re: Teilstring suchen

Beitrag von Werner_Bayern »

dann mach doch mal einen dbfntx-Test?
es grüßt

Werner

<when the music is over, turn off the lights!>
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: Teilstring suchen

Beitrag von AUGE_OHR »

Jan hat geschrieben: Sa, 07. Okt 2017 17:52ja, SET COLLATION TO GERMAN ist eingestellt. Und FOXCDX.
zeige mal deine DBESYS ... was für ein FOXCDX

ich habe das "ä" hinter dem "Z" ... allerdings mit DBFNTX oder Comix

Code: Alles auswählen

   dbCreate( "__ANSI", {{ "CHAR", "C", 3, 0}})
   USE __ANSI EXCLUSIVE NEW

   // throw in all possible chars
   FOR x := 1 TO 255
      dbAppend()
      __ANSI->Char := CHR( x)
   NEXT

   // index it ...
   INDEX ON __ANSI->Char TO __ANSI
   browse()
gruss by OHR
Jimmy
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: Teilstring suchen

Beitrag von AUGE_OHR »

Jan hat geschrieben: Sa, 07. Okt 2017 13:26Aus irgend einem Grund steht der z. B. bei einer Suche nach HA auf HÄ. Obwohl es durchaus Einträge mit HA gibt.
kann ich inzwischen bestätigen das er 1 Position VOR dem Found() steht ABER :

ich arbeite sonst mit Comix

Code: Alles auswählen

   SET COLLATION TO GERMAN
   SET DATE TO GERMAN

   DbeInfo( COMPONENT_DATA, FOXDBE_CREATE_2X, .T. )
   DbeInfo( COMPONENT_DATA, FOXDBE_LOCKMODE, FOXDBE_LOCKMODE_CLIPPER )
   //
   DbeInfo( COMPONENT_ORDER, CDXDBE_MODE, CDXDBE_FOXPRO2X )
laut Hilfe File müsste man für Visual FoxPro dies haben

Code: Alles auswählen

   SET COLLATION TO GERMAN
   SET DATE TO GERMAN

   DbeInfo( COMPONENT_DATA, FOXDBE_CREATE_2X, .F. )
   DbeInfo( COMPONENT_DATA, FOXDBE_LOCKMODE , FOXDBE_LOCKMODE_VISUAL )
   //
   DbeInfo( COMPONENT_ORDER, CDXDBE_MODE, CDXDBE_VFOXPRO )
@Jan : sieht deine DbeSys so aus ?

ich habe damit den o.g. Code (1-255) ausprobiert und bekomme "nur Unsinn" mit der DBE Einstellung

Code: Alles auswählen

   INDEX ON __ANSI->Char TO __ANSI
   SEEK("€")
ich suche nach dem € Zeichen und er findet nichts [-X

also zurück auf Comix und da findet er es unter CHR(128) =D>

nun hab in der MAIN und Comix mal diese Zeile mit rein genommen

Code: Alles auswählen

   SET CHARSET TO ansi
er findet zwar was aber er sollte auf dem € Zeichen stehen und nicht auf 1 Position davor :shock:
Comix_ANSI.JPG
Comix_ANSI.JPG (43.04 KiB) 12856 mal betrachtet
hier der Source dann könnt ihr es selbst ausprobieren
Comix_ANSI.ZIP
pure Xbase++ Source
(1.16 KiB) 662-mal heruntergeladen
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: Teilstring suchen

Beitrag von brandelh »

SET COLLATION TO GERMAN
Für die deutsche Sortierung ist ä gleich a, wobei es zwei Arten gibt:

Ä wird als AE einsortiert oder danach (oder war es davor) ... hängt davon ab, ob man Namen oder Bücher sortiert.

Wenn der Index a von ä getrennt suchen soll, muss man wohl ANSI indizieren.
Und FOXCDX.
Hinzu kommt, dass FOXCDX immer wie upper(feldname) sortiert, egal ob das angegeben wurde oder nicht.
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: Teilstring suchen

Beitrag von Jan »

brandelh hat geschrieben: Mo, 09. Okt 2017 8:39Hinzu kommt, dass FOXCDX immer wie upper(feldname) sortiert, egal ob das angegeben wurde oder nicht.
Moin Hubert,

stimmt, da war doch was. Hab ich erfolgreich verdrängt gehabt.

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: Teilstring suchen

Beitrag von AUGE_OHR »

hi,

das ganze nützt nichts wenn die DBESYS falsch eingestellt ist welche Jan bislang nicht gezeigt hat.
auch spricht er nur von FOX aber nicht explizit welchen Type er meint (FoxPro_v2, Six/Comix, Visual FoxPro) :?:

wie ich schon sagte sollte man eine Demo nehmen und die DBESYS Einstellungen testen ob die zu einem Ergebnis führen. mit der Visual FoxPro Einstellung kommt bei mir nur "Mist" raus ... noch nicht mal die Reihenfolge bei Ziffern stimmt

von Jan weiss ich das er mit ANSI arbeiten möchte aber der Eintrag

Code: Alles auswählen

SET CHARSET TO ansi
in MAIN sorgt, bei SixDrive/Comix Einstellung, für das komische Verhalten bei SEEK("€") :shock:
... zumindest bei der v1.9x mit/ohne Hotfix #38 (FOXDBE.DLL)
gruss by OHR
Jimmy
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: Teilstring suchen

Beitrag von Jan »

Alaska hat bestätigt, das es ein Problem mit SET COLLATION T GERMAN gibt. Schreibe ich das auf SET COLLATION TO SYSTEM um, und baue dann den Index neu auf, dann wird auch "Ha" wieder gefunden. Aber leider hat SYSTEM die möglicherweise unangenehme Nebenwirkung, das Vergleichoperatoren ebenfalls Case-Sensitiv sind. Aber Alaska untersucht das Problem näher. Mal schauen, was dabei rum kommt. Einen PDR gibt es dazu aber noch nicht.

Jan
Mitglied der XUG Osnabrück
Mitglied der XUG Berlin/Brandenburg
Mitglied des Deutschsprachige Xbase-Entwickler e. V.
Benutzeravatar
Werner_Bayern
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2120
Registriert: Sa, 30. Jan 2010 22:58
Wohnort: Niederbayern
Hat sich bedankt: 29 Mal
Danksagung erhalten: 70 Mal

Re: Teilstring suchen

Beitrag von Werner_Bayern »

Jan hat geschrieben: Mo, 16. Okt 2017 20:24 Alaska hat bestätigt, das es ein Problem mit SET COLLATION T GERMAN gibt.
Auch für dbfntx?
es grüßt

Werner

<when the music is over, turn off the lights!>
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: Teilstring suchen

Beitrag von AUGE_OHR »

Werner_Bayern hat geschrieben: Mo, 16. Okt 2017 20:55Auch für dbfntx?
hast du Probleme mit DBFNTX ?
gruss by OHR
Jimmy
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: Teilstring suchen

Beitrag von Jan »

Werner_Bayern hat geschrieben: Mo, 16. Okt 2017 20:55Auch für dbfntx?
Hallo Werner,

keien Ahnung. Alaska hat sich nur auf meine Mail und mein Sample bezogen. Näheres kann man nur sagen, wenn es dazu von Alaska mehr Infos gibt als nur "Das müssen wir uns näher anschauen", wie die mir geschrieben haben (mal wieder anonym, ohne Namen drunter - wie ich das hasse). Also ausführlichere Mail, PDR, was auch immer.

Jan
Mitglied der XUG Osnabrück
Mitglied der XUG Berlin/Brandenburg
Mitglied des Deutschsprachige Xbase-Entwickler e. V.
DelUser01

Re: Teilstring suchen

Beitrag von DelUser01 »

Hallo Jan

hast Du das mal mit "set exact" versucht?
Benutzeravatar
Werner_Bayern
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2120
Registriert: Sa, 30. Jan 2010 22:58
Wohnort: Niederbayern
Hat sich bedankt: 29 Mal
Danksagung erhalten: 70 Mal

Re: Teilstring suchen

Beitrag von Werner_Bayern »

AUGE_OHR hat geschrieben: Mo, 16. Okt 2017 22:14hast du Probleme mit DBFNTX ?
nein
es grüßt

Werner

<when the music is over, turn off the lights!>
Benutzeravatar
Werner_Bayern
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2120
Registriert: Sa, 30. Jan 2010 22:58
Wohnort: Niederbayern
Hat sich bedankt: 29 Mal
Danksagung erhalten: 70 Mal

Re: Teilstring suchen

Beitrag von Werner_Bayern »

Jan hat geschrieben: Mo, 16. Okt 2017 22:19(mal wieder anonym, ohne Namen drunter - wie ich das hasse)
:roll: =D>
es grüßt

Werner

<when the music is over, turn off the lights!>
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: Teilstring suchen

Beitrag von Jan »

Alaska schlägt vor, das ich den Index mit SET COLLATION TO SYSTEM aufbaue. Und dann das Programm aber mit GERMAN laufen lasse. Damit ist der Index dann für "Ha"-findbar aufgebaut, ich laufe aber nicht in Gefahr, eventuelle Probleme im laufenden Betrieb mit den Case-sensitiven Vergleichsoperatoren zu bekommen.

Da stellt sich mir aber die Frage: Wie stelle ich denn fest, ob ein Index bereits mit SYSTEM aufgebaut worden ist, oder noch mit GERMAN? Ich will das ja immer nur 1x durchaufen lassen, und nicht bei jedem Programmstart ... Und ich finde in der Doku nichts, wie ich die COLLATION eines Indizees auslesen könnte.

Jan
Mitglied der XUG Osnabrück
Mitglied der XUG Berlin/Brandenburg
Mitglied des Deutschsprachige Xbase-Entwickler e. V.
Benutzeravatar
Werner_Bayern
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2120
Registriert: Sa, 30. Jan 2010 22:58
Wohnort: Niederbayern
Hat sich bedankt: 29 Mal
Danksagung erhalten: 70 Mal

Re: Teilstring suchen

Beitrag von Werner_Bayern »

Warum machst Du die 2 Befehle nicht einfach in Deine Reindizierungs-Routine? Dann muss die max. 1x manuell aufgerufen werden und gut ist es - auch künftig.
es grüßt

Werner

<when the music is over, turn off the lights!>
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: Teilstring suchen

Beitrag von Jan »

Werner,

versteh ich jetzt nicht, was Du da meinst.

Mir geht es um folgendes: Ich muß ja bei jedem Kunden einmalig den Index neu aufbauen. Genau nur dann, denn der noch mit GERMAN aufgebaut ist. Ich habe da keinen Einfluß drauf, wann der Kunde das nächste mal das Programm startet - das kann morgen, nächste Woche, nächsten Monat, oder nächstes Jahr sein. Aber der Index soll (zumindest aus diesem Grund) nur einmal neu aufgebaut werden. Alles andere würden die Kunden irritieren oder nerven.

Wir reden hier von einem Programm, das nahezu ausschließlich von Privatpersonen genutzt wird. Und oft in einem höheren Alter (recht viele Rentner z. B.). Und oft nicht sonderlich EDV-Affin.

Jan
Mitglied der XUG Osnabrück
Mitglied der XUG Berlin/Brandenburg
Mitglied des Deutschsprachige Xbase-Entwickler e. V.
Benutzeravatar
Werner_Bayern
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2120
Registriert: Sa, 30. Jan 2010 22:58
Wohnort: Niederbayern
Hat sich bedankt: 29 Mal
Danksagung erhalten: 70 Mal

Re: Teilstring suchen

Beitrag von Werner_Bayern »

Ich meinte halt so:

Code: Alles auswählen

set COLLATION TO SYSTEM
index on ...
SET COLLATION TO GERMAN
Einen Marker setzen im Update, dass das beim 1. Start einmalig gemacht wird.
es grüßt

Werner

<when the music is over, turn off the lights!>
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: Teilstring suchen

Beitrag von Jan »

Werner,

mir ist klar, WIE ich das mit dem Index machen muß. Aber das festellen, ob schon gelaufen oder nicht, das ist das Problem. Was stellst Du Dir denn als Marker vor? Da ich keine Registry-Einträge oder ini habe - wo sollte ich das Teil hinstecken?

Jan
Mitglied der XUG Osnabrück
Mitglied der XUG Berlin/Brandenburg
Mitglied des Deutschsprachige Xbase-Entwickler e. V.
Antworten