Textabschnitt aus Text extrahieren
Hallo alle Zusammen,
ich komm leider nicht weiter.
ich hab folgenden Text:
und möchte den rotmarkierten Abschnitt extrahieren.
Hat jemand eine Idee?
mit der funktion extractx() konnt ich leider nichts anfangen.
Viele Grüße und besten dank im voraus!
Martin
6 Antworten
-
Guten Morgen Martin,
das sieht nach einem JSON-File aus. Da gibt es in ninox Funktionen, die du zur Verarbeitung nutzen kannst. Schau dir mal das Handbuch hierzu an. Du kannst über die Feldnamen: startDate und endDate; auf die Felder zugreifen und diese in einer Tabelle die Einträge zuordnen.
Frank
-
Hi Frank,
vielen Dank für deine Antwort.
Ich arbeite mich mal durch :)
-
Hi Martin, mit RegEX und somit auch mit extractx kommst Du da zur Not auch weiter.
Wie Martin aber schon schrieb, ist das ein JSON Response... wenn Du den ganzen String mal postest, kann man da mehr zu sagen. Generell navigiert man durch einen JSON mit der sog. Punkt-Navigation. D.h. du füllst eine Variable mit dem JSON Inhalt durch
let myJSON := parseJSON(DEIN_JSON_STRING);
und kannst dann die einzelnen Werte aus den Keys auslesen: myJSON.id .... oder myJSON.createdTime
und so kannst du auch andere Felder befüllen:
Datum := text(myJSON.startDate)
-
Hi Bartzsch,
Vielen Dank für deine Hilfe
Ich hab es mittlerweile gelöst bekommen. Zwar etwas aufwendig und nicht sehr elegant aber das Ergebnis passt .
Weist du ob es zu der Funktion extractx irgendwo eine Anleitung oder eine ausführlichere Erklärung gibt? Ich bin aus der Dokumentation in Ninox nicht so wirklich schlau geworden
hier noch der Code wie ich es gelöst hab.
let myJson := response.result;
let gesamtanzahl := cnt(myJson);
let zaehler := 0;
let schleife := true;
"Schleife-----------------------------------------------------------------------------------------------------------------------------------------------------";
while schleife = true do
for i in myJson do
let Kalender := text(item(myJson, zaehler).subCalendars);
if Kalender like Filter then
let neu := (create 'KalenderDigital API');
let arbeiter := first(select Mitarbeiter);
neu.(Mitarbeiter := arbeiter);
neu.(ID := item(myJson, zaehler).id);
neu.(von := item(myJson, zaehler).startDate);
neu.(bis := item(myJson, zaehler).endDate);
neu.(subcalendar := Kalender);
zaehler := zaehler + 1
else
zaehler := zaehler + 1
end;
"Schleife Beenden---------------------------------------------------------------------------------------------------------------------------------------------";
if zaehler >= gesamtanzahl then
schleife := false;
zaehler := 0
end
end
endend
Viele Grüße Martin
-
Na, wenn es am Ende funktioniert, dann ist´s doch gut...
Holst du das JSON denn imScript direkt in die Variable ab? Also zb:
let response := http("POST","https://deineAPIanfrage") usw... ?Prinzipiell musst du dein JSON aber nicht als Array behandeln, sondern du kannst die einzelnen Keys direkt ansprechen. In deinem Fall ist die JSON Antwort ja in response.result - und dort gibt dir dann zB. "response.result.id" den Wert "452239149" zurück. Den Typ musst du bei JSON allerdings besser mit angeben... wenn du also dein Zahlenfeld "ID" mit dem Wert aus der JSON-Antwort befüllen möchtest, dann würde das so aussehen:
ID := number(response.result.id);
Jetzt kann es in der JSON-Antwort auch Arrays geben. "subCalendars" besteht aus einem Array ... ["Walter","Verfügbarkeiten"]. Da würde Dir response.result.subCalendars nicht weiterhelfen, da kann man dann über die "items", oder über Schleifen durchiterieren:
response.result.item(subCalendars,0) gibt Dir dann "Walter" zurück ... oder
for i in response.result.subCalendars do .... usw.
Thema RegEX:
www.regex101.com nutze ich gerne zum Testen. Dort kannst du deinen regulären Ausdruck zusammensetzen und siehst unten im Text sofort das Ergebnis. Was mir in Ninox sehr weitergeholfen hat, ist die Möglichkeit, Gruppen anzusprechen. D.h. ich suche nach einem gleichen Muster im String, gefolgt von meinem Wert den ich auslesen möchte, und mache daraus 2 Gruppen, oder 3, wenn ich das Ende meiner Suche auch noch eingrenzen kann/möchte. In Ninox lese ich mir dann die Gruppe mit dem Wert aus den ich brauche. In deinem Beispiel oben:
Du hast den eindeutigen Key "startDate", du hast dein Datum, du hast Anführungsstriche
ein regEx ("startDate":")(.*)(") würde folgendes machen:
suche den String "startDate":" gefolgt von allen anderen Zeichen .*, gefolgt von einem " - und setze die drei Ergebnisse in eine Gruppe (runde Klammern). Du willst später an die mittlere Gruppe 2 und um die Suche so eindeutig wie möglich zu machen, suchst du Teile VOR und NACH deinem gesuchten String.
Mit extractx(DEINTEXT,"REGEX","$GRUPPE") könntest Du nun an das Datum kommen (wichtig: RegEx und Gruppe müssen in Anführungszeichen)
Datum := extractx(DEINTEXT, "("startDate":")(.*)(") ","$2")
Du kannst mit RegEx nach eindeutigen Strings suchen ... zB. "startDate", man kann nach Buchstaben (\w), nach Zahlen (\d), nach allen Kleinbuchstaben ([az]), allen Großbuchstaben ([AZ]), Satz-und Leerzeichen (\s), allen Zeichen (.) suchen und die Anzahl der gesuchten definieren: \d? (keine oder eine Zahl) , \d+ (mindestens eine und alle folgenden Zahlen), \d* (keine oder alle folgenden Zahlen)
Reg Ex braucht etwas Phantasie, aber mit der genannten Webseite kann man das gut ausprobieren...
Content aside
- Status Answered
- vor 1 JahrZuletzt aktiv
- 6Antworten
- 179Ansichten
-
3
Folge bereits