0

Adresse in Straße, PLZ, Ort aufteilen

Guten Morgen, 

ich bekomme eine Adresse über API, welche wie folgt aussieht: 

 Per Trigger oder Button möchte ich den Inhalt in die drei genannten Felder aufteilen. Das folgende Muster macht für die Herangehensweise vermutlich sehr viel Sinn: 

-Man beginnt von hinten, entfernt das Leerzeichen und hat den Ort

-Man zieht sich dann die nächsten 5 Zahlen

-Der Rest minus das Leerzeichen ist die Straße

-Optional könnte man noch den Ort und die Straße ausschließlich mit einem großen Buchstaben beginnen lassen

In meinem ersten Test hatte die Straße noch ein Leerzeichen, da hat der Code sogar funktioniert, ich denke jedoch die genannte Herangehensweise oben wäre zuverlässiger, die kriege ich jedoch leider nicht in Code umgewandelt:

let adr := Adresse;
let teile := split(adr, " ");
let plz := item(teile, count(teile) - 2);
let ort := item(teile, count(teile) - 1);
let strasse := "";
for i from 0 to count(teile) - 3 do
    strasse := strasse + item(teile, i) + " "
end;
strasse := trim(strasse);
'Postleitzahl FH' := plz;
'Ort FH' := ort;
'Straße FH' := strasse

4 Antworten

null
    • + Maßanzug statt Massenware +
    • RonaldP
    • vor 2 Tagen
    • Gemeldet - anzeigen

    Moin  ,

    deutlich sicherer würde das Splitten funktionieren, wenn du Trennzeichen über die API bekommst . Bzw üblicherweise wären es schon einzelne keys.

    Deine Erkennung wird bei Orten mit mehreren Leerzeichen so nicht klappen. Und solche Orte gibt es "Stadtx am Fluss" oder "Bad XXXX".

    Das macht es ziemlich aufwendig. Also wenn irgendwie möglich, versuche die Daten der Quelle besser zu strukturieren.

    VG Ronald 

      • Felix.5
      • vor 2 Tagen
      • Gemeldet - anzeigen

      Moin  Ronald, 

      an der Quelle kann ich leider nicht viel machen. Notfalls könnte ich versuchen, vorab ein Script dazwischenzuschalten, um mehr Flexibilität zu haben.

      Um den Aufwand in Ninox in Grenzen zu halten, dachte ich, dass das von rechts nach links Lesen und die Nutzung der Postleitzahl als Grenze eine Möglichkeit wäre. Abgesehen von der Postleitzahl haben wir leider wirklich zu viele Variablen.

      • + Maßanzug statt Massenware +
      • RonaldP
      • vor 2 Tagen
      • Gemeldet - anzeigen

       ,
      hab ich mir schon fast gedacht ;-)
      spontan sehe ich diese 2 Möglichkeiten:

      1. von einem AI-Tool per API aufsplitten lassen Z.B. Mistral.ai (französisches Unternehmen, es gibt einen Freeplan)
      2. die PLZ als Ausgangspunkt nehmen und von dort "davor" die Straße  und "danach" Ort.
        Die Erkennung mit regex / extractx() probieren
      • Felix.5
      • vor 2 Tagen
      • Gemeldet - anzeigen

       konnte glücklicherweise auf eine weitere API Verzichten, vielen Dank für den richtungsweisenden Tipp! 

      Die Lösung für alle Interessierten: 
      let adresse := Adresse;
      let plz := extractx(adresse, "(\d{5})", "", "$1");
      let ort := extractx(adresse, "\d{5}\s(.+)", "", "$1");
      let strasse := extractx(adresse, "^(.*)\s\d{5}", "", "$1");
      'Postleitzahl FH' := plz;
      'Ort FH' := ort;
      'Straße FH' := strasse

Content aside

  • Status Answered
  • vor 2 TagenZuletzt aktiv
  • 4Antworten
  • 22Ansichten
  • 2 Folge bereits