Suche wie
Moderator: Moderatoren
- Koverhage
- 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
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.
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
Klaus
- AUGE_OHR
- Marvin
- Beiträge: 12909
- Registriert: Do, 16. Mär 2006 7:55
- Wohnort: Hamburg
- Hat sich bedankt: 19 Mal
- Danksagung erhalten: 46 Mal
Re: Suche wie
da "Freiburger Allee 22 a" <> "Freiburger Allee 22a" wirst du es mir einem normalen SEEK "so" nicht finden.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.
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
Jimmy
Re: Suche wie
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.:
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...
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()
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...
Re: Suche wie
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
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
Johann
- brandelh
- Foren-Moderator
- Beiträge: 15697
- Registriert: Mo, 23. Jan 2006 20:54
- Wohnort: Germersheim
- Hat sich bedankt: 66 Mal
- Danksagung erhalten: 33 Mal
- Kontaktdaten:
Re: Suche wie
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.
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
Hubert
Re: Suche wie
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".
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".
- Martin Altmann
- Foren-Administrator
- Beiträge: 16517
- Registriert: Fr, 23. Sep 2005 4:58
- Wohnort: Berlin
- Hat sich bedankt: 111 Mal
- Danksagung erhalten: 48 Mal
- Kontaktdaten:
Re: Suche wie
Moin Hubert,
Straße 576 23a ist eine gültige Adresse - die 576 gehört zum Straßennamen!
Viele Grüße,
Martin
falschbrandelh 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,
Straße 576 23a ist eine gültige Adresse - die 576 gehört zum Straßennamen!
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.
- AUGE_OHR
- Marvin
- Beiträge: 12909
- Registriert: Do, 16. Mär 2006 7:55
- Wohnort: Hamburg
- Hat sich bedankt: 19 Mal
- Danksagung erhalten: 46 Mal
Re: Suche wie
oder die Strassen in Mannheim Zentrum welche aus einem Buchstaben und einer Ziffer bestehen wie "A1" ...Martin Altmann hat geschrieben:Straße 576 23a ist eine gültige Adresse - die 576 gehört zum Straßennamen!
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
Jimmy
- Wolfgang Ciriack
- Der Entwickler von "Deep Thought"
- Beiträge: 2936
- Registriert: Sa, 24. Sep 2005 9:37
- Wohnort: Berlin
- Hat sich bedankt: 13 Mal
- Danksagung erhalten: 34 Mal
- Kontaktdaten:
Re: Suche wie
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
Wolfgang
- brandelh
- Foren-Moderator
- Beiträge: 15697
- Registriert: Mo, 23. Jan 2006 20:54
- Wohnort: Germersheim
- Hat sich bedankt: 66 Mal
- Danksagung erhalten: 33 Mal
- Kontaktdaten:
Re: Suche wie
was es für Namen gibt ... aber die Quatrate in Mannheim hätten mir einfallen können.Martin Altmann hat geschrieben:Moin Hubert,falschbrandelh 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,
Straße 576 23a ist eine gültige Adresse - die 576 gehört zum Straßennamen!
Viele Grüße,
Martin
Dennoch halte ich die Vorgehensweise nicht für falsch !, sondern verbesserungsfähig
Also die Blanks zwischen den Ziffern nicht entfernen
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
Hubert
- AUGE_OHR
- Marvin
- Beiträge: 12909
- Registriert: Do, 16. Mär 2006 7:55
- Wohnort: Hamburg
- Hat sich bedankt: 19 Mal
- Danksagung erhalten: 46 Mal
Re: Suche wie
bislang hatte ich Mappoint um eine Adresse, per Suche, zu "bestätigen".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 ...
Leider wurde der Support eingestellt und ohne neue Daten besteht bei neuen Straßen genau das Problem
gruss by OHR
Jimmy
Jimmy
- satmax
- 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
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
Markus
- brandelh
- Foren-Moderator
- Beiträge: 15697
- Registriert: Mo, 23. Jan 2006 20:54
- Wohnort: Germersheim
- Hat sich bedankt: 66 Mal
- Danksagung erhalten: 33 Mal
- Kontaktdaten:
Re: Suche wie
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 ?
Nun gibt es ja seit einiger Zeit die "Informationspflicht", kennt jemand öffentlich zugängliche Listen mit diesen Infos ?
Gruß
Hubert
Hubert
- Koverhage
- 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
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
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
Klaus