0

Nach einzelnem Wort suchen

Hallo,

gibt es eine Suchfunktion bei der man nach ausschließlich dem suchen kann, was der Eingabe entspricht?

Wenn ich also z.B. nach dem Wort „Haus“ suche, so möchte ich nur die Ergebnisse finden, die auch wirklich „Haus“ und nicht z.B. „Wohnhaus“ oder „Reihenhaus“ beinhalten.

Danke im Voraus

14 Antworten

null
    • bernd
    • vor 6 Jahren
    • Gemeldet - anzeigen

    gibt es nicht, aber folgendes funktioniert, mußt Du aber entsprechend anpassen:

     

    let LEN := length(Suchtext);  -> im Feld Suchtext steht also "Haus"

    let POS := index(Text, Suchtext);  -> Feld Text ist der durchsuchende Text

    var TXT := substring(TXT, POS - 1, LEN + 1); jetzt wird aus dem durchsuchenden Text der Suchtext extrahiert, dabei ein Zeichen davor und ein Zeichen dahinter

    TXT := trim(TXT); -> wenn diese Zeichen davor und dahinter Leerzeichen sind, werden diese abgeschnitten

    Auswertung:

    if TXT = Suchtext then true else false; -> geht auch kürzer, nur zur Verdeutlichung 

     

    geht aber nur, wenn nch dem Text kein Komma, Punkt,... steht. Sonst müßte man das auch noch abklären...

    • Leonid_Semik
    • vor 6 Jahren
    • Gemeldet - anzeigen

    Man kann auch RegEx Ausdrücke verwenden. So wäre es dann:

    ---

    testx(Text, "\b" + Suchtext + "\b")

    ---

    Der testx gibt ein Ja/Nein Ergebniss und "\b" kennzeichnet eine Wortgrenze.

    Wenn man den Text in eine Tabelle mit dem Feld "Text" sucht dann kann man ein Funktionsfeld sogestallten:

    ---

    let myREG:="\b" + Suchtext + "\b";

    join(select Suchtabelle [testx(Text,myREG)].("Datensatz Nr.: "+Nr+"

    Text),"

     

    ")

    ---

    So sollte ein Text mit Datensatsnummer und Texte, die das Suchwort enthalten untereinander geschrieben werden. Theoretisch kann man auch weiter treiben und mit html() den Suchtext markieren.

     

    Leo

    • bernd
    • vor 6 Jahren
    • Gemeldet - anzeigen

    aha 👍

    • bernd
    • vor 6 Jahren
    • Gemeldet - anzeigen

    getestet, kommt aber bei mir immer nur false zurück...

    • Leonid_Semik
    • vor 6 Jahren
    • Gemeldet - anzeigen

    Bildschirmfoto 2018-11-11 um 15.21.44

      • Benjamin_Kunzmann_pr
      • vor 2 Jahren
      • Gemeldet - anzeigen

      Weitere Code Varianten für den Anwendungsfall dass wir mehrere Suchwörter haben:

      1.) Mindestens ein Suchwort muss im Text enthalten sein

      let mySuchArray := split(lower(Suchtext), " ");
      let myText := lower(Text);
      let myCounter := 0;
      for i in mySuchArray do
          if testx(myText, "\b" + i + "\b") then
              myCounter := myCounter + 1
          end
      end;
      if myCounter > 0 then true else false end
      

      2.) Alle Suchwörter müssen im Text enthalten sein

      let mySuchArray := unique(split(lower(Suchtext), " "));
      let myText := lower(Text);
      let myCounter := 0;
      for i in mySuchArray do
          if testx(myText, "\b" + i + "\b") then
              myCounter := myCounter + 1
          end
      end;
      let myCnt := cnt(mySuchArray);
      if myCounter < myCnt then false else true end
      

      Liebe Grüße

      Benjamin 🙋‍♂️

    • Medolie
    • vor 6 Jahren
    • Gemeldet - anzeigen

    Okay, vielen Dank euch beiden, das Regex erklärt auch immerhin einiges.

    Mein weiteres Problem besteht wohl darin, dass ich eine Tabelle habe mit vielen Begriffen, welche ich schnell nach Anzahl sortieren muss.

    Also dass ich z.B. wirklich nur die Auswahl einer Spalte mit „Haus“ eingezeigt bekommen möchte, jedoch aber auch zu jeder Zeit nach „Garten“, „Haustür“ oder „Wohnung“ schnell suchen kann.

    Sind halt sehr viele Begriffe, welche ich grundsätzlich häufig filtern müsste und es immer recht mühsälig ist, manches unbrauchbares herauszuklamüsern.

    • Leonid_Semik
    • vor 6 Jahren
    • Gemeldet - anzeigen

    Da würde ich das Designelement "Ansicht" verwenden. 

    die Formel dafür:

    ---

    let myREG:="\b" + Suchtext + "\b";

    select 'DEINE TABELLE' [testx('DEIN TEXTFELD',myREG)]

    ---

    Es werden dann nur die gefilterten Datensätze angezeigt. 

    Leo

    • Stephan_Haumann
    • vor 3 Jahren
    • Gemeldet - anzeigen

    Hallo Leo,

    ich muss sagen, dass ich gerade RegEx gefunden habe und mir das gedanklich ganz neue Möglichkeiten eröffnet ;)

    Weißt Du zufällig, wie ich die Suche oben so gestalten könnte, dass die Groß- und Kleinschreibung im Suchtext egal ist? Also “haus” wirft auch “Haus” aus?

    Und es müsste doch auch möglich sein etwas zu suchen, auch wenn 1-2 Character falsch geschrieben sind, oder? Um bei dem Beispiel zu bleiben: “Haushald” liefert auch “Haushalt” zurück - komisches Beispiel, aber ich glaube es wird klar ;)

    Danke Dir und schönen Advent!

    Grüße

    Stephan

    • Stephan_Haumann
    • vor 3 Jahren
    • Gemeldet - anzeigen

    Ergänzung: Und hast Du dazu vielleicht einen guten Lesetipp-Link? Danke Dir!

    • UweG
    • vor 3 Jahren
    • Gemeldet - anzeigen

    Hallo Stephan
    Schau mal hier zu regex:
    https://github.com/ziishaned/learn-regex/blob/master/translations/README-de.md#282-dollar
    http://blog.weblogie.de/webentwicklung/merkblatt-regular-expressions/
    https://danielfett.de/2006/03/20/regulaere-ausdruecke-tutorial/
    http://regexrenamer.sourceforge.net/help/regex_quickref.html
    Damit solltest du deine Anforderungen ermöglichen können.

    • Leonid_Semik
    • vor 3 Jahren
    • Gemeldet - anzeigen

    Stimmt, die Links sind sehr hilfreich. Zu eigentlichen Fragen:

    um die Groß-/ Kleinschreibung zu ignorireren kann man auch ohne Regex vorgehen. Ninox hat einen Befehl lower(). 

    für eine Ansicht mit Suchfeld wäre die Formel dann:

    ---

    let me:=this;
    select DEINETABELLE [contains(lower(TEXT)=me.lower(SUCHFELD))]

    ---

    Die Sache mit Haushalt/Haushald ist kompliziert, weil man dann viele Varianten durchlaufen muss. Ich habe leider keine Lösung.

    Leo

    • Stephan_Haumann
    • vor 3 Jahren
    • Gemeldet - anzeigen

    super, danke euch sehr!

    • T_Bartzsch
    • vor 3 Jahren
    • Gemeldet - anzeigen

    https://regex101.com/ ist noch ein hilfreicher Link.

    Mir hat außerdem extrem geholfen, dass es im RegEx Gruppen gibt und man diese in Ninox adressieren kann. Damit arbeite ich viel und gerne...

Content aside

  • vor 2 JahrenZuletzt aktiv
  • 14Antworten
  • 3260Ansichten
  • 1 Folge bereits