Suche wie

Alle Fragen um die Programmierung, die sich sonst nicht kategorisieren lassen. Von Makro bis Codeblock, von IF bis ENDIF

Moderator: Moderatoren

Antworten
Benutzeravatar
Koverhage
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2470
Registriert: Fr, 23. Dez 2005 8:00
Wohnort: Aalen
Hat sich bedankt: 102 Mal
Danksagung erhalten: 3 Mal
Kontaktdaten:

Suche wie

Beitrag von Koverhage »

Wie kann ich hier
Ausgangslage Beispiel Aufzugswartung:

Kundenstamm Kunde.dbf enthält die Adresse der Hausverwaltung und die der Liegenschaft
mit den Felden lStr und lStr2. Diese enthalten z.B Stuttgarter Str. 100, Waldweg 3 und Freibuger Allee 22, 22 a, 22b.

Zusätzlich gibt es eine Kundeabw.dbf die jeden einzelnen Aufgang/Eingang enthält.
Also:
kdnr Aufgang-Nr. Aufgang-Bez.
1000 1 Stuttgarter Str. 100,
1000 2 Waldweg 3,
1000 3 Freiburger Allee 22
1000 4 Freiburger Allee 22a
1000 5 Freiburger Allee 22 b

Die Aufgabe ist, jetzt nach Freiburger Allee 22 a zu suchen und dann innerhalb der Kundentabelle den richtigen Satz Kundensatz anzuzeigen.

Für Anregungen bin ich dankbar.
Gruß
Klaus
Benutzeravatar
AUGE_OHR
Marvin
Marvin
Beiträge: 12906
Registriert: Do, 16. Mär 2006 7:55
Wohnort: Hamburg
Hat sich bedankt: 19 Mal
Danksagung erhalten: 45 Mal

Re: Suche wie

Beitrag von AUGE_OHR »

Koverhage hat geschrieben: 1000 3 Freiburger Allee 22
1000 4 Freiburger Allee 22a
1000 5 Freiburger Allee 22 b

Die Aufgabe ist, jetzt nach Freiburger Allee 22 a zu suchen und dann innerhalb der Kundentabelle den richtigen Satz Kundensatz anzuzeigen.
da "Freiburger Allee 22 a" <> "Freiburger Allee 22a" wirst du es mir einem normalen SEEK "so" nicht finden.

Mögliche Lösung :
1.) von rechts die Hausnummer "weg" und auf den Strassennamen ein Scope mit Anzeige der "falschen" Hausnummer zur Auswahl.
2.) den Index "ohne" Leerzeichen aber gleicher Länge also mit einer Function die auch beim SEEK() verwendet wird
3.) man erweitert die DBF und trennt die Hausnummer von der Strasse ...
gruss by OHR
Jimmy
DelUser01

Re: Suche wie

Beitrag von DelUser01 »

Hallo Klaus

wie Jimmy schon schrieb wird das mit DbSeek vermutlich nicht zu machen sein.
In solchen Fällen verwende ich DbLocate oder DbSetFilter, z.B.:

Code: Alles auswählen

xxFilter( "Freiburger Allee 22" , "Freiburger Allee 22a" , "Freiburger Allee 22 b" )

Function xxFilter( cSuche1e , cSuche2e , cSuche3e )
Local cFilter
Local cSuche1u := Upper( RTrim( cSuche1e ) )
Local cSuche2u := Upper( RTrim( cSuche2e ) )
Local cSuche3u := Upper( RTrim( cSuche3e ) )

cFilter := "{ | | Upper( RTrim( LSTR ) ) == ' " + cSuche1u " ' .Or.
Upper( RTrim( LSTR ) ) == ' " + cSuche2u " ' .Or.
Upper( RTrim( LSTR ) ) == ' " + cSuche3u " ' ) }"

DbSelectArea( "KUNDEABW" )
DbSetFilter( &( cFilter ) , cFilter )
DbGoTop()
Nun das Ganze statt mit dem im Bsp. gezeigten cSuxhe1u usw. mit einem Array aufbauen und du kannst ein oder X Suchbegriffe verwenden.
Auch gehen würde statt == auch $. Dann würden alle Freiburger Allee 22 gefunden.

Ganz flexibel wäre es, wenn Du im Suchstring alles "zerschneidest" und dann suchst wo "Freiburger" "Allee" "22" steht. Dann würde auch FreiburgerAllee22 gefunden...
matyschik
UDF-Programmierer
UDF-Programmierer
Beiträge: 54
Registriert: Do, 14. Dez 2006 0:08

Re: Suche wie

Beitrag von matyschik »

Hallo Klaus,

das einfachste ist es die Daten richtig einzugeben. ZB. 22 a.
Denn wenn 2 2 a erfasst ist, wird es beim SEEK Befehl auch
ein Problem geben.

Gruß Johann
Freundliche FlagShip Grüße
Johann
Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
Beiträge: 15695
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Hat sich bedankt: 65 Mal
Danksagung erhalten: 33 Mal
Kontaktdaten:

Re: Suche wie

Beitrag von brandelh »

Die Eingabe zu normieren ist schon mal ne gute Idee, in der Eingabe:
1. erste Ziffer suchen, bis dahin ist der Straßennamen,
2. im Rest die Ziffern zu einer Zahl zusammensetzen und
3. den Rest nach Hausbestandteilen durchsuchen.
4. Teil 1 + " " + Teil 2 + "a" "b" etc (einstellige ohne Blank) oder " im Hinterhof" ... sonst mit Blank
5. Ergebnis anzeigen und fragen ob das so stimmt (oder gleich so speichern).

Ich würde immer die PLZ vor die Straße stellen, so kann man die leidigen 2000 gleichen Namen im Bundesgebiet eliminieren ;-)

Wenn die Eingabe nicht normiert wurde, kann man eventuell auch phonetisch suchen, allerdings finde ich gerade die Funktion in Xbase++ nicht, also selbstbauen:

Einen Index nach der Art:
1. Stringlänge merken
2. Alle Blanks raus aus dem Original
3. Alles als Kleinbuchstaben
4. Umlaute, Sonderzeichen etc. auf Standard "äöü" => "aou" oder "aeoeue" wie es besser passt. á... nach a kann man mit der Zeit erweitern.
5. String mit nötigen Blanks auffüllen.

Wenn die gleiche Funktion den Index erstellt und den Suchbegriff umsetzt, sollte das ganz gut funktionieren.

Zum Schluss die Narrensichere Methode (nicht die PLZ vergessen, sonst wird es übel ;-) )

1. DBSeek() genau ein Treffer => Satz nehmen
2. DBSeek() trifft, aber die folgenden Sätze auch, Liste zur Auswahl anzeigen.
3. Suchbegriff um jeweils 1 Zeichen verkürzen, aus Sicherheitsgründen aber immer die Liste der Treffer zur Auswahl anzeigen.
Gruß
Hubert
DelUser01

Re: Suche wie

Beitrag von DelUser01 »

Hallo Hubert

wenn - wie Klaus beschreibt - bei großflächigen Immobilien und Anlagen (+Firmen) mehrere Zugänge, Straßennamen, Hausnummern usw. vorhanden sind reicht die Eingabeoptimierung allein nicht mehr. Dann müsste die gesamte Speicherung der Immobiliendaten so optimiert werden, dass bei Suchvorgängen immer nur auf eine "Hauptadresse" zurückgegriffen wird.

Überlegungen zur Eingabeoptimierung gehen aber an der eigentlichen Frage vorbei die ja lautet "wie muss ich suchen".
Benutzeravatar
Martin Altmann
Foren-Administrator
Foren-Administrator
Beiträge: 16509
Registriert: Fr, 23. Sep 2005 4:58
Wohnort: Berlin
Hat sich bedankt: 111 Mal
Danksagung erhalten: 48 Mal
Kontaktdaten:

Re: Suche wie

Beitrag von Martin Altmann »

Moin Hubert,
brandelh hat geschrieben:Die Eingabe zu normieren ist schon mal ne gute Idee, in der Eingabe:
1. erste Ziffer suchen, bis dahin ist der Straßennamen,
falsch :!:
Straße 576 23a ist eine gültige Adresse - die 576 gehört zum Straßennamen!

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
AUGE_OHR
Marvin
Marvin
Beiträge: 12906
Registriert: Do, 16. Mär 2006 7:55
Wohnort: Hamburg
Hat sich bedankt: 19 Mal
Danksagung erhalten: 45 Mal

Re: Suche wie

Beitrag von AUGE_OHR »

Martin Altmann hat geschrieben:Straße 576 23a ist eine gültige Adresse - die 576 gehört zum Straßennamen!
oder die Strassen in Mannheim Zentrum welche aus einem Buchstaben und einer Ziffer bestehen wie "A1" ...

es bleibt also nichts übrig als im Prinzip das Datenbank Design gleich "richtig" zu machen und die Hausnummer zu trennen vom Strassennamen.
gruss by OHR
Jimmy
Benutzeravatar
Wolfgang Ciriack
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2934
Registriert: Sa, 24. Sep 2005 9:37
Wohnort: Berlin
Hat sich bedankt: 13 Mal
Danksagung erhalten: 34 Mal
Kontaktdaten:

Re: Suche wie

Beitrag von Wolfgang Ciriack »

Man könnte aber von rechts her nach der ersten Nummer suchen, dann von dort nach links bis zur ersten Nichtzahl suchen, dann müsste man eigentlich die Position haben, an der der Straßenname aufhört.
Viele Grüße
Wolfgang
Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
Beiträge: 15695
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Hat sich bedankt: 65 Mal
Danksagung erhalten: 33 Mal
Kontaktdaten:

Re: Suche wie

Beitrag von brandelh »

Martin Altmann hat geschrieben:Moin Hubert,
brandelh hat geschrieben:Die Eingabe zu normieren ist schon mal ne gute Idee, in der Eingabe:
1. erste Ziffer suchen, bis dahin ist der Straßennamen,
falsch :!:
Straße 576 23a ist eine gültige Adresse - die 576 gehört zum Straßennamen!
Viele Grüße,
Martin
was es für Namen gibt ... aber die Quatrate in Mannheim hätten mir einfallen können.
Dennoch halte ich die Vorgehensweise nicht für falsch !, sondern verbesserungsfähig ;-)
Also die Blanks zwischen den Ziffern nicht entfernen :roll:

Jimmys Vorschlag gleich die Straße von der Hausnummer zu trennen ist sicher die eleganteste Methode.

Man könnte auch versuchen an die Liste der Straßennamen zu kommen, aber keinesfalls darf man nicht vorhandene ablehnen,
sonst kommt es vor, dass man ein Neubaugebiet erstmal nicht bearbeiten kann ... ein Bekannter konnte vor Jahren bei 1&1 keinen Vertrag schließen, weil die die vorhandene Straße nicht akzeptiert haben ;-)
Gruß
Hubert
Benutzeravatar
AUGE_OHR
Marvin
Marvin
Beiträge: 12906
Registriert: Do, 16. Mär 2006 7:55
Wohnort: Hamburg
Hat sich bedankt: 19 Mal
Danksagung erhalten: 45 Mal

Re: Suche wie

Beitrag von AUGE_OHR »

brandelh hat geschrieben:Man könnte auch versuchen an die Liste der Straßennamen zu kommen, aber keinesfalls darf man nicht vorhandene ablehnen,
sonst kommt es vor, dass man ein Neubaugebiet erstmal nicht bearbeiten kann ... ;-)
bislang hatte ich Mappoint um eine Adresse, per Suche, zu "bestätigen".
Leider wurde der Support eingestellt und ohne neue Daten besteht bei neuen Straßen genau das Problem :banghead:
gruss by OHR
Jimmy
Benutzeravatar
satmax
1000 working lines a day
1000 working lines a day
Beiträge: 831
Registriert: Do, 02. Dez 2010 19:34
Wohnort: Biberbach in Österreich
Hat sich bedankt: 1 Mal
Danksagung erhalten: 1 Mal
Kontaktdaten:

Re: Suche wie

Beitrag von satmax »

Ganz eine andere Idee, Baue die einen Index in dem du alle Leerzeichen eliminierst (auf Länge achten). Mit dem Suchstring machst Du dann das gleiche. So kannst die Straße und die Hausnummer mit und ohne Leerzeichen eingeben, findest Sie aber immer.
Gruß
Markus
Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
Beiträge: 15695
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Hat sich bedankt: 65 Mal
Danksagung erhalten: 33 Mal
Kontaktdaten:

Re: Suche wie

Beitrag von brandelh »

Zur Zeit der PLZ Umstellung hatten wir Infos gekauft, die neben Orts- auch die Straßennamen enthalten haben.
Nun gibt es ja seit einiger Zeit die "Informationspflicht", kennt jemand öffentlich zugängliche Listen mit diesen Infos ?
Gruß
Hubert
Benutzeravatar
Koverhage
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2470
Registriert: Fr, 23. Dez 2005 8:00
Wohnort: Aalen
Hat sich bedankt: 102 Mal
Danksagung erhalten: 3 Mal
Kontaktdaten:

Re: Suche wie

Beitrag von Koverhage »

Also irgendwie wurde das falsch verstanden. Bei den Antworten wird immer davon ausgegangen
das es nur eine Tabelle gibt, es sind aber 2.

Ich habe einen Kundendatei in der steht z.B. als Straße

Freiburger Allee 22 - 22 f
Davon ist
Freiburger Allee 22 ein Einfamilienhaus (Anschriftennummer 1)
Freiburger Allee 22 a ein Einfamilienhaus (Anschriftennummer 2)
Freiburger Allee 22 b ein 12-Familiehaus (Anschriftennummer 3)
Freiburger Allee 22 c ein 12-Familienhaus (Anschriftennummer 4)
Freiburger Allee 22 d ein 18-Familienhaus (Anschriftennummer 5)
Freiburger Allee 22 e ein Einfamilienhaus (Anschriftennummer 6)
Freiburger Allee 22 f ein Einfamilienhaus (Anschriftennummer 7)

Dazu gibt es eine Adressdatei die 2 Indexe hat.

1. Kundennummer + Anschriftennummer
2. Straße + Kundennummer

Die Kundentabelle habe ich im Browse geöffnet und kann dort nach Straße suchen
Wenn es aber mehrere Eingänge/Aufgänge gibt müsste ich über die Adressdatei suchen
und dann auf den entsprechenden Kunden springen.

Ich hatte erst gedacht mit Orderwildseek, aber da ich ja in der Kundentabelle nicht jeden Eingang benannt habe
funktioniert es nicht, der Suchbegriff "Freiburger Allee 22 e" würde schlichtweg nicht gefunden.

Ich werden versuchen das so zu lösen:
Suche in der Kundentabelle, wenn nicht gefunden, Suche in der Adressdatei
Gruß
Klaus
Antworten