Teilstring suchen
Moderator: Moderatoren
- Jan
- Marvin
- Beiträge: 14662
- Registriert: Fr, 23. Sep 2005 18:23
- Wohnort: 49328 Melle
- Hat sich bedankt: 21 Mal
- Danksagung erhalten: 88 Mal
- Kontaktdaten:
Teilstring suchen
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
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.
Mitglied der XUG Berlin/Brandenburg
Mitglied des Deutschsprachige Xbase-Entwickler e. V.
- Werner_Bayern
- Der Entwickler von "Deep Thought"
- Beiträge: 2128
- Registriert: Sa, 30. Jan 2010 22:58
- Wohnort: Niederbayern
- Hat sich bedankt: 30 Mal
- Danksagung erhalten: 75 Mal
Re: Teilstring suchen
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.
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!>
Werner
<when the music is over, turn off the lights!>
- Martin Altmann
- Foren-Administrator
- Beiträge: 16555
- Registriert: Fr, 23. Sep 2005 4:58
- Wohnort: Berlin
- Hat sich bedankt: 115 Mal
- Danksagung erhalten: 48 Mal
- Kontaktdaten:
Re: Teilstring suchen
Index über das Feld und dann seek mit left(...,..)
Viele Grüße,
Martin
Viele Grüße,
Martin
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.
- Jan
- Marvin
- Beiträge: 14662
- Registriert: Fr, 23. Sep 2005 18:23
- Wohnort: 49328 Melle
- Hat sich bedankt: 21 Mal
- Danksagung erhalten: 88 Mal
- Kontaktdaten:
Re: Teilstring suchen
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
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.
Mitglied der XUG Berlin/Brandenburg
Mitglied des Deutschsprachige Xbase-Entwickler e. V.
- Werner_Bayern
- Der Entwickler von "Deep Thought"
- Beiträge: 2128
- Registriert: Sa, 30. Jan 2010 22:58
- Wohnort: Niederbayern
- Hat sich bedankt: 30 Mal
- Danksagung erhalten: 75 Mal
Re: Teilstring suchen
Servus Jan,
ist bei mir nicht anders, auch upper(text) und ein Dbseek(cText, .T.). Funktioniert einwandfrei. Hast Du
eingestellt?
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
es grüßt
Werner
<when the music is over, turn off the lights!>
Werner
<when the music is over, turn off the lights!>
- Jan
- Marvin
- Beiträge: 14662
- Registriert: Fr, 23. Sep 2005 18:23
- Wohnort: 49328 Melle
- Hat sich bedankt: 21 Mal
- Danksagung erhalten: 88 Mal
- Kontaktdaten:
Re: Teilstring suchen
Hallo Werner,
ja, SET COLLATION TO GERMAN ist eingestellt. Und FOXCDX.
Jan
ja, SET COLLATION TO GERMAN ist eingestellt. Und FOXCDX.
Jan
Mitglied der XUG Osnabrück
Mitglied der XUG Berlin/Brandenburg
Mitglied des Deutschsprachige Xbase-Entwickler e. V.
Mitglied der XUG Berlin/Brandenburg
Mitglied des Deutschsprachige Xbase-Entwickler e. V.
Re: Teilstring suchen
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...
- Werner_Bayern
- Der Entwickler von "Deep Thought"
- Beiträge: 2128
- Registriert: Sa, 30. Jan 2010 22:58
- Wohnort: Niederbayern
- Hat sich bedankt: 30 Mal
- Danksagung erhalten: 75 Mal
Re: Teilstring suchen
dann mach doch mal einen dbfntx-Test?
es grüßt
Werner
<when the music is over, turn off the lights!>
Werner
<when the music is over, turn off the lights!>
- AUGE_OHR
- Marvin
- Beiträge: 12913
- Registriert: Do, 16. Mär 2006 7:55
- Wohnort: Hamburg
- Hat sich bedankt: 19 Mal
- Danksagung erhalten: 46 Mal
Re: Teilstring suchen
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
Jimmy
- AUGE_OHR
- Marvin
- Beiträge: 12913
- Registriert: Do, 16. Mär 2006 7:55
- Wohnort: Hamburg
- Hat sich bedankt: 19 Mal
- Danksagung erhalten: 46 Mal
Re: Teilstring suchen
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 )
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 )
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("€")
also zurück auf Comix und da findet er es unter CHR(128)
nun hab in der MAIN und Comix mal diese Zeile mit rein genommen
Code: Alles auswählen
SET CHARSET TO ansi
gruss by OHR
Jimmy
Jimmy
- brandelh
- Foren-Moderator
- Beiträge: 15706
- Registriert: Mo, 23. Jan 2006 20:54
- Wohnort: Germersheim
- Hat sich bedankt: 70 Mal
- Danksagung erhalten: 34 Mal
- Kontaktdaten:
Re: Teilstring suchen
Für die deutsche Sortierung ist ä gleich a, wobei es zwei Arten gibt:SET COLLATION TO GERMAN
Ä 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.
Hinzu kommt, dass FOXCDX immer wie upper(feldname) sortiert, egal ob das angegeben wurde oder nicht.Und FOXCDX.
Gruß
Hubert
Hubert
- Jan
- Marvin
- Beiträge: 14662
- Registriert: Fr, 23. Sep 2005 18:23
- Wohnort: 49328 Melle
- Hat sich bedankt: 21 Mal
- Danksagung erhalten: 88 Mal
- Kontaktdaten:
Re: Teilstring suchen
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.
Mitglied der XUG Berlin/Brandenburg
Mitglied des Deutschsprachige Xbase-Entwickler e. V.
- AUGE_OHR
- Marvin
- Beiträge: 12913
- Registriert: Do, 16. Mär 2006 7:55
- Wohnort: Hamburg
- Hat sich bedankt: 19 Mal
- Danksagung erhalten: 46 Mal
Re: Teilstring suchen
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 Eintragin MAIN sorgt, bei SixDrive/Comix Einstellung, für das komische Verhalten bei SEEK("€")
... zumindest bei der v1.9x mit/ohne Hotfix #38 (FOXDBE.DLL)
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
... zumindest bei der v1.9x mit/ohne Hotfix #38 (FOXDBE.DLL)
gruss by OHR
Jimmy
Jimmy
- Jan
- Marvin
- Beiträge: 14662
- Registriert: Fr, 23. Sep 2005 18:23
- Wohnort: 49328 Melle
- Hat sich bedankt: 21 Mal
- Danksagung erhalten: 88 Mal
- Kontaktdaten:
Re: Teilstring suchen
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
Jan
Mitglied der XUG Osnabrück
Mitglied der XUG Berlin/Brandenburg
Mitglied des Deutschsprachige Xbase-Entwickler e. V.
Mitglied der XUG Berlin/Brandenburg
Mitglied des Deutschsprachige Xbase-Entwickler e. V.
- Werner_Bayern
- Der Entwickler von "Deep Thought"
- Beiträge: 2128
- Registriert: Sa, 30. Jan 2010 22:58
- Wohnort: Niederbayern
- Hat sich bedankt: 30 Mal
- Danksagung erhalten: 75 Mal
Re: Teilstring suchen
Auch für dbfntx?
es grüßt
Werner
<when the music is over, turn off the lights!>
Werner
<when the music is over, turn off the lights!>
- AUGE_OHR
- Marvin
- Beiträge: 12913
- Registriert: Do, 16. Mär 2006 7:55
- Wohnort: Hamburg
- Hat sich bedankt: 19 Mal
- Danksagung erhalten: 46 Mal
- Jan
- Marvin
- Beiträge: 14662
- Registriert: Fr, 23. Sep 2005 18:23
- Wohnort: 49328 Melle
- Hat sich bedankt: 21 Mal
- Danksagung erhalten: 88 Mal
- Kontaktdaten:
Re: Teilstring suchen
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.
Mitglied der XUG Berlin/Brandenburg
Mitglied des Deutschsprachige Xbase-Entwickler e. V.
- Werner_Bayern
- Der Entwickler von "Deep Thought"
- Beiträge: 2128
- Registriert: Sa, 30. Jan 2010 22:58
- Wohnort: Niederbayern
- Hat sich bedankt: 30 Mal
- Danksagung erhalten: 75 Mal
- Werner_Bayern
- Der Entwickler von "Deep Thought"
- Beiträge: 2128
- Registriert: Sa, 30. Jan 2010 22:58
- Wohnort: Niederbayern
- Hat sich bedankt: 30 Mal
- Danksagung erhalten: 75 Mal
- Jan
- Marvin
- Beiträge: 14662
- Registriert: Fr, 23. Sep 2005 18:23
- Wohnort: 49328 Melle
- Hat sich bedankt: 21 Mal
- Danksagung erhalten: 88 Mal
- Kontaktdaten:
Re: Teilstring suchen
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
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.
Mitglied der XUG Berlin/Brandenburg
Mitglied des Deutschsprachige Xbase-Entwickler e. V.
- Werner_Bayern
- Der Entwickler von "Deep Thought"
- Beiträge: 2128
- Registriert: Sa, 30. Jan 2010 22:58
- Wohnort: Niederbayern
- Hat sich bedankt: 30 Mal
- Danksagung erhalten: 75 Mal
Re: Teilstring suchen
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!>
Werner
<when the music is over, turn off the lights!>
- Jan
- Marvin
- Beiträge: 14662
- Registriert: Fr, 23. Sep 2005 18:23
- Wohnort: 49328 Melle
- Hat sich bedankt: 21 Mal
- Danksagung erhalten: 88 Mal
- Kontaktdaten:
Re: Teilstring suchen
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
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.
Mitglied der XUG Berlin/Brandenburg
Mitglied des Deutschsprachige Xbase-Entwickler e. V.
- Werner_Bayern
- Der Entwickler von "Deep Thought"
- Beiträge: 2128
- Registriert: Sa, 30. Jan 2010 22:58
- Wohnort: Niederbayern
- Hat sich bedankt: 30 Mal
- Danksagung erhalten: 75 Mal
Re: Teilstring suchen
Ich meinte halt so:
Einen Marker setzen im Update, dass das beim 1. Start einmalig gemacht wird.
Code: Alles auswählen
set COLLATION TO SYSTEM
index on ...
SET COLLATION TO GERMAN
es grüßt
Werner
<when the music is over, turn off the lights!>
Werner
<when the music is over, turn off the lights!>
- Jan
- Marvin
- Beiträge: 14662
- Registriert: Fr, 23. Sep 2005 18:23
- Wohnort: 49328 Melle
- Hat sich bedankt: 21 Mal
- Danksagung erhalten: 88 Mal
- Kontaktdaten:
Re: Teilstring suchen
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
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.
Mitglied der XUG Berlin/Brandenburg
Mitglied des Deutschsprachige Xbase-Entwickler e. V.