Teilstring suchen

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

Moderator: Moderatoren

Benutzeravatar
Wolfgang Ciriack
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2932
Registriert: Sa, 24. Sep 2005 9:37
Wohnort: Berlin
Hat sich bedankt: 13 Mal
Danksagung erhalten: 34 Mal
Kontaktdaten:

Re: Teilstring suchen

Beitrag von Wolfgang Ciriack »

Einfach eine leere Datei, z.B. ok.index im Verzeichnis der Datenbanken anlegen.
Viele Grüße
Wolfgang
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: Di, 17. Okt 2017 17:38 Ich meinte halt so:

Code: Alles auswählen

set COLLATION TO SYSTEM
index on ...
SET COLLATION TO GERMAN
nur einen Index aufbauen ist ja kein Problem aber wenn man in der DBESYS was verändert hat sollte man IMHO "alles neu aufbauen".
die DBF übernimmt ja nicht die neuen Einstellungen in den (vorhandenen) Header sondern "arbeitet nur" mit den neuen Einstellungen was zu fatalen Fehler führen kann.
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 »

... da ich nicht gedenke irgendwas an der dbesys zu ändern ist das hinfällig ...

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 »

Jan hat geschrieben: Di, 17. Okt 2017 19:43 ... da ich nicht gedenke irgendwas an der dbesys zu ändern ist das hinfällig ...
und wo hast du "SET COLLATION" stehen :?:
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 »

In der Main() vielleicht?

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 »

Jan hat geschrieben: Di, 17. Okt 2017 19:53In der Main() vielleicht?
ich weiss ja das einige meinen das der Fehler nicht bei ihnen liegen könnte ...

sollte wirklich ein solcher BUG existieren wundere ich mich das sich noch kein andere gemeldet hat :roll:
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 »

Tja. Da Alaska das als Problem anerkannt hat ... Ich habe alleine dieses Jahr schon für 4 oder 5 PDR gesorgt, wo niemand vorher den Fehler bemerkt hat.

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,

entweder so, wie Wolfgang das geschrieben hat oder: In unseren Programmen gibt es immer einen Punkt Wartung. Dort werden verschiedene Vorgänge durchgeführt, u. a. auch die Neuerstellung der Indexe. Du musst sowieso ein Update ausliefern. Dazu dann halt einen Hinweis, dass man diesen Menüpunkt einmalig aufrufen sollte.
Bei uns wird der auch aufgerufen, wenn bestimmte Index-Dateien nicht existieren, das wäre auch ein Weg. Ist ja nur ein einfaches

Code: Alles auswählen

if .not. file("jan.cdx")
  wartung()
endif
Das macht z. B. unser Update-Installationsprogramm, das löscht einfach die Indexe.
Sowas hast Du doch sicherlich auch in Deinem Programm. Oder lieferst Du Dein Programm inkl. (leerer) Indexe aus? Wann erzeugst Du die Indexe neu?
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 »

Moin Werner,

im Prinzip habe ich soetwas. Bei jedem Programmstart werden die dbf und die Indizee überprüft. Fehlende Felder, geänderte Feldlängen, neue dbf, geänderte Indizee, neue Indizee. Alles sowas. Und dann auch automatisch angepasst.

Aber ich lese dazu immer die dbf-Struktur aus, bzw. die Index-Eigenschaften. Und handle dann entsprechend. Und ich hatte die Hoffnung, das hier mit der Collation genau machen zu können. Aber offensichtlich kann man nicht auslesen, mit welcher Collation ein Index erstellt worden ist.

Es widerstrebt mir, eine externe Datei für soetwas anszulegen. Vor Allem, weil ich bei jeder Neuinstallation das Ganze auch machen müsste, obwohl da ja von vorneherein klar ist, das die Indizee hier korrekt angelegt worden sind.

Ich bin noch am schwanken, wie ich das gelöst bekomme.

Jan
Mitglied der XUG Osnabrück
Mitglied der XUG Berlin/Brandenburg
Mitglied des Deutschsprachige Xbase-Entwickler e. V.
Benutzeravatar
Herbert
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 1991
Registriert: Do, 14. Aug 2008 0:22
Wohnort: Gmunden am Traunsee, Österreich
Danksagung erhalten: 3 Mal
Kontaktdaten:

Re: Teilstring suchen

Beitrag von Herbert »

Ich verstehe das Problem und kenne dieses bei mir nicht.
Wie bereits von Anderen beschrieben wird irgendwo im Programm eine Reorganisation gestartet, oder sogar bei Programmstart, was ich allerdings nicht ganz verstehe. Anpassungen an der Struktur wie auch Anpassungen an der Form der Indexe bestimmt einzig der oder die Programmierer und wird entsprechend bei einem Update abgefangen.
Besser ist, die Indexdateien zu löschen und anschliessend wieder zu erstellen.
Die Form der Indexe bleibt immer Sache des Programms und nicht der Umgebung des PC, worin das Programm läuft.
Oder habe ich mit deinen Anmerkungen etwas nicht begriffen?
Grüsse Herbert
Immer in Bewegung...
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 Herbert,

um Deine Abschlußfrage zu beantworten: Nein, hast Du nicht.

Deinen Ausführungen stimme ich grundsätzlich zu. Genau so läuft das in meinen Programmen ab. ICH bestimme, was wie mit den Datenbanken geschieht. Und gibt es ein Fileupdate, in dem andere Strukturen gefordert werden oder geänderte benötigt werden, dann wird das beim Programmstart erkannt und für die betreffenden Datenbanken durchgeführt. Das gibt inzwischen glaube ich knapp 60 Abfragen in dieser Startprozedur - ich weiß ja nie, wie lange der User schon nicht mehr mit dem Programm gearbeitet hat, also werden generell alle abgefragt. Die Überprüfung selber dauert nur Bruchteile einer Sekunde.

Und ja klar, ich möchte ja auch gerne die Indexdateien löschen, und mit der von Alaska vorgeschlagenen Callation neu erstellen. Aber doch bitte nicht bei JEDEM Programmstart. Sondern nur einmalig.

Meine Hoffnung war, das ich wie bei allen bisherigen Datenbank-Updates auch die Infos aus den bestehenden Dateien auslesen kann, und dann das entsprechende Prozedere anstoßen kann. Das Auslesen der Collation scheint aber halt nicht möglich zu sein. Also muß ich mir was anderes überlegen. Hier wurden ja schon verschiedene Ideen angesprochen. Mit einer davon muß ich jetzt nur noch irgendwie warm werden. Oder was ganz anderes machen. Keine Ahnung.

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: 15689
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 »

Die SYSTEM Sortierung hat ja auch ihre Eigenheiten, z.B. wenn du wirklich eine Liste der Namen sehen willst, da stimmt dann die Reihenfolge auch nicht (Umlaute stehen hinter Z).
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.
so pauschal kann man das aber nicht sagen !!!

Du hast zwar zig tausende Einträge, aber wieviele davon mit Umlauten vor deinem eigentlichen Treffer ?

Ein Browser z.B. könnte im SKIP Block die ungewünschten überspringen.

In anderer Situation kann man über ungewünschte skippen, aber auch locate ist schnell, wenn man es kombiniert (nur Filter sind zäh):

1. DBSEEK() findet ersten passenden Eintrag ... Ä statt A
2. do while skippen, oder aber LOCATE ... FOR ... WHILE ... REST // so wird ab dem Treffer eine sortierte Liste abgearbeitet
3. Anzeigen

das ist durchaus so schnell, dass man es nicht merkt. Natürlich muss WHILE mit Bedacht gewählt werden, damit auch alle möglichen Treffer durchlaufen werden.
Das Auslesen der Collation scheint aber halt nicht möglich zu sein.
das ist aber der Supergau ! Das müsste Alaska schnell ä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: Teilstring suchen

Beitrag von Jan »

Hallo Hubert,

den von Dir vorgeschlagenen Suchansatz muß ich mir mal näher ansehen. So spontan, nicht vor dem Code, kann ich nicht sagen, ob oder wie ich das umsetzen könnte. Aber die Idee hat natürlich was für sich, dann kann mir der Fehler in Xbase++ egal sein. Und wenn die das eventuell irgendwann mal fixen sollten (mein Gefühl sagt mir, das an dbf-Sachen schon lange nichts mehr korrigiert wird) kann ich einfach den Code wieder gerade ziehen. Ohne das hin und her mit Index neu aufbauen.

Wegen der Abfrage nach der Collation im Index: Ich hab Alaska natürlich danach gefragt, wie das denn gehen kann. Aber ich habe eine aktive Subscription ohne Support, und damit bekomme ich auf solche eine Frage keine Antwort. Aussage Alaska auf meine entsprechende Frage.

Jan
Mitglied der XUG Osnabrück
Mitglied der XUG Berlin/Brandenburg
Mitglied des Deutschsprachige Xbase-Entwickler e. V.
Benutzeravatar
HaPe
1000 working lines a day
1000 working lines a day
Beiträge: 995
Registriert: So, 15. Nov 2015 17:44
Wohnort: 71665 Vaihingen-Enz
Hat sich bedankt: 17 Mal
Danksagung erhalten: 15 Mal

Re: Teilstring suchen

Beitrag von HaPe »

Hallo Jan !
Wegen der Abfrage nach der Collation im Index
Du sprichst am Anfang von FOXCDX.
In VFP gibt es die Funktion IDXCOLLATE welche die Collation ausliest.
Zum Test wo das VFP ausliest, habe ich einmal eine Tabelle mit MACHINE und eine mit GERMAN erstellt.
Beim Binärvergleich der Indexdateien (CDX) steht in der Indexdatei mi GERMAN exakt dieser String an einer bestimmten Stelle; bei MACHINE steht nix. Als Gegenprobe habe ich auch GENERAL verwendet => hier steht dann GENERAL in der CDX-Datei.

Lass mir doch bitte mal eine CDX mit SYSTEM und eine mit GERMAN zukommen.
Ich schaue ob ich was finde und versuche anhand der VFP-Doku den CDX-Aufbau zu bestimmen ...

Hier steht etwas zum Aufbau einer CDX:
https://msdn.microsoft.com/en-us/librar ... s.71).aspx

Bei meinem Test steht kurz vor dem Feldnamen des Indexes bzw. des Index-Ausdruckes die COLLATION im Klartext 8)
Man könnte also durch Auslesen eines Teiles des CDX-Headers mit dem Index-Ausdruck und der Suche nach dem COLLATION-Text etwas anfangen ...
--
Hans-Peter
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 Hans-Peter,

in Xbase++ gibt es auch Funktionen, die die Collation auslesen. Aber eben nur die gerade im Programm eingestellte, nicht die in der cdx verwendete. Und nach dem Ratschlag zur Vorgehensweise durch Alaska würden die beiden sich ja unterscheiden.

Die Seite, auf die Du verlinkst, hatte ich auch schon gesehen. Als ich nach der Struktur der cdx gesucht hatte um zu schauen, ob es da irgendwo eine Position mit der Collation-Einstellung gibt.

Der Gedanke, die beiden unterschiedlich erstellten cdx mal zu vergleichen, wo genau denn da der Unterschied ist, ist eine interessante Herangehensweise. Das könnte man ja ganz einfach mit einem Hex-Editor machen.

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

irgendwie hat sich dieses Thema geändert...oder ich habe was überlesen?

Deine ursprüngliche Frage war doch, dass Du einen Teilstring der immer links im Feld steht nicht sofort findest.
Das muss doch unabhängig der Collation usw gehen (und tut es auch).
Wenn Du natürlich inzwischen Deine Indizes umbauen willst um die Tabellen usw. richtig darzustellen ist das was anderes.
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 Roland,

nein, das Thema hat sich nicht geändert. Ich habe ein Problem bei der Suche nach Teilstrings. So begann die ganze Misere. Nach der Diskussion hier hatte ich mal bei Alaska angefragt und denen auch ein Sample geschickt. Alaska hat das Problem bestätigt. Und als Lösung vorgeschlagen, nur bei der Indexerstellung die Collation zu ändern - ich hab das getestet und es löst tatsächlich das Problem. Nun aber habe ich das Problem festzustellen, ob ich den Index mit der von Alaska vorgeschlagenen Collation bereits neu aufgebaut habe oder nicht.

OK, das Hauptproblem ist immer noch das Gleiche. Teilstrings mit einem Vokal an letzter Position, an es auch Einträge mit einem dazugehörigen Umlaut gibt (a/ä, o/ö, u/ü), werden nicht gefunden. Das Detailproblem ist ein anderes geworden, nämlich wie den Workaround von Alaska zu dem real existierenden Problem umsetzen

Jan
Mitglied der XUG Osnabrück
Mitglied der XUG Berlin/Brandenburg
Mitglied des Deutschsprachige Xbase-Entwickler e. V.
Benutzeravatar
Martin Altmann
Foren-Administrator
Foren-Administrator
Beiträge: 16502
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 »

Jan,
warum versuchst Du nicht mittels OrdInfo( CDXORD_COLLATION ) Dein Glück?

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.
DelUser01

Re: Teilstring suchen

Beitrag von DelUser01 »

OK
Jan hat geschrieben: Mi, 18. Okt 2017 11:28OK, das Hauptproblem ist immer noch das Gleiche. Teilstrings mit einem Vokal an letzter Position, an es auch Einträge mit einem dazugehörigen Umlaut gibt (a/ä, o/ö, u/ü), werden nicht gefunden.
Wenn es also immer noch darum geht, den Teilstring zu finden muss ich nochmal fragen, ob Du das mit set exact statt softseek schon probiert hast? Damit mache ich schon ewige Zeiten meine SubStringSuche - DBFNTX.
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 »

Martin,

öhm ...weil ich selber da nicht drauf gestoßen bin. Und auch anscheinend sonst niemand hier in der Diskussion.

Jan
Mitglied der XUG Osnabrück
Mitglied der XUG Berlin/Brandenburg
Mitglied 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 »

Roland,

ich mach kein Softseek. Der Fehler tritt auch auf bei Scopes. Und da gibt es ohnehin kein Softseek.

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: 15689
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 »

Ich kann mich erinnern, dass mal nach einer "Testfunktion" gefragt wurde für die Fragestellung "Ist der Index noch gültig bzw. fehlerhaft" ...
Dies ist nicht möglich, weil der Test länger dauern würde als der Neuaufbau war damals die Aussage von Alaska.

Im Falle einer internen Einstellung bei Index Erstellung, die man später ändern kann,
hätte ich erwartet, dass entweder die DBE das alles automatisch richtig (in der Erstellungseinstellung) macht, oder man es abfragen kann.

Sonst ist ja Fehlern Tür und Tor geöffnet in einer Welt mit mehreren Sprachen ...
Gruß
Hubert
DelUser01

Re: Teilstring suchen

Beitrag von DelUser01 »

Jan

dann muss es doch mit FOXCDX oder der Vorgehensweise in Deinem Programm zu tun haben.
Meine Teilstringsuche, Teilstringfilter und eigene Scopes mache ich seit mind 20 Jahren über den Weg mit
Set( _SET_EXACT , .F. )

In Main steht
Set( _SET_CHARSET , CHARSET_OEM )
Set( _SET_COLLATION , COLLAT_GERMAN )
DBFNTX
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 Roland,

dbfntx betrifft es nicht, das hatte ich doch schon getestet und geschrieben. Jan benutzt cdx, zu dbfntx hat er sich bisher nicht geäußert.
es grüßt

Werner

<when the music is over, turn off the lights!>
DelUser01

Re: Teilstring suchen

Beitrag von DelUser01 »

Hallo Werner

danke für die Info - dann hake ich die Sache ab.
Antworten