0

Datum aus String extrahieren und in Datumsfeld zuweisen

Liebe Ninox-Experten,

 

ein Script will bei mir nicht so funktionieren:

 

let year := substring(Dateiname, length(Dateiname) - 14, length(Dateiname) - 10);
let month := substring(Dateiname, length(Dateiname) - 9, length(Dateiname) - 7);
let day := substring(Dateiname, length(Dateiname) - 6, length(Dateiname) - 4);
let Dokumentendatum := date(year(number(year)), month(number(month)), day(number(day)));
void

 

Ich habe einen Dateinamen, in dem an definierter Stelle vor dem Suffix ein Datum im Format 2021-05-11 steht. Dieses möchte ich in ein Datumsfeld setzen. Es wird korrekt ausgegenen, die String-Extraktion funktioniert also. Aber ich kann es nicht dem Datumsfeld zuweisen. Der Versuch mit der Convertierung als number war mein letzter. Jetzt weiß ich nicht mehr, was ich noch versuchen soll. Vielleicht hat ja von Euch einer eine Idee.

 

Dnake und LG

Arne

10 Antworten

null
    • mirko3
    • vor 2 Jahren
    • Gemeldet - anzeigen

    Hi Arne. vielleicht so. Gruß Mirko

    * Anzeige im Funktionsfeld

    let year := substring(Dateiname, length(Dateiname) - 14, length(Dateiname) - 10);
    let month := substring(Dateiname, length(Dateiname) - 9, length(Dateiname) - 7);
    let day := substring(Dateiname, length(Dateiname) - 6, length(Dateiname) - 4);
    date(number(year), number(month), number(day))

    Zuweisung über einen Button oder Trigger

    let year := substring(Dateiname, length(Dateiname) - 14, length(Dateiname) - 10);
    let month := substring(Dateiname, length(Dateiname) - 9, length(Dateiname) - 7);
    let day := substring(Dateiname, length(Dateiname) - 6, length(Dateiname) - 4);
    let result := date(number(year), number(month), number(day));
    Dokumentendatum := result

    • Arne.1
    • vor 2 Jahren
    • Gemeldet - anzeigen

    verrückt. Funktioniert. Ich meine, das hatte ich auch schon versucht. Aber anscheinend nicht, sonst hätte ich es schon gehabt. Danke!!

    • Leonid_Semik
    • vor 2 Jahren
    • Gemeldet - anzeigen

    Hallo Arne und Mirko,
    hatte bei mir einen ähnlichen Fall. Habe es so gelöst:

    ---

    Dokumentendatum := eval("date(" + concat(split(extractx(Dateiname, "\d{4}-\d{2}-\d{2}"), "-")) + ")", this)

    ---

    Leo

    • mirko3
    • vor 2 Jahren
    • Gemeldet - anzeigen

    Hi Leo. Das ist natürlich wesentlich eleganter. Eval() ist mir noch immer ein Rätsel und die Syntax nicht gerade intuitiv. Deshalb mein Dank für das schöne Beispiel, vielleicht schaffe ich dann noch mein Projekt komplexer select-Abfragen mit eval(). Eine winzige Veränderung habe ich noch vorzuschlagen, dann trifft Dein Code auch Datumsformate wie 2020-3-9, also einstellige Monate und Tage ohne vorangehende 0. Ausserdem habe ich noch aus split und concat replace gemacht, aber das ist eigentlich nicht nötig. Gruß Mirko

    *

    Dokumentendatum := eval("date(" + replace(extractx(Dateiname, "\d{4}-\d{1,2}-\d{1,2}"), "-", ",") + ")", this)

    *

    • Andreas_Kappes
    • vor 2 Jahren
    • Gemeldet - anzeigen

    Hallo

    habe hier ein ähnliches Problem

    im Textfeld steht ein Datum in folgendem Format:

    27-Jun-95

    dies soll jetzt über Massendatenänderung in ein Datumsfeld übernommen werden

    muß ich zuvor den Monat in eine Zahl umwandeln und das Jahr auf 4 Stellen setzen?

    oder geht das auch direkt aus dem Textfeld

     

    Gruß

    Andreas

    • mirko3
    • vor 2 Jahren
    • Gemeldet - anzeigen

    Hi Andreas. Script hilf nur, wenn es alles Jahre vor 2000 sind, sonst müßte man vorher kennzeichnen, welche Daten zu welchem Jahrhundert gehören. Felder in Großbuchstaben bitte noch anpassen. Gruß Mirko

    for j in select TABELLE do
    let yearX := number(19 + extractx(j.TEXTFELD, "\d+(?=$)"));
    let dayX := number(extractx(j.TEXTFELD, "^\d+"));
    let monatArray := ["Jan1", "Feb2", "Mär3", "Apr4", "Mai5", "Jun6", "Jul7", "Aug8", "Sep9", "Okt10", "Nov11", "Dez12"];
    let monthX := extractx(j.TEXTFELD, "[a-zA-Zä]+");
    for i in monatArray do
    if extractx(i, "[a-zA-Zä]+") = monthX then
    j.(DATUM := date(yearX, number(extractx(i, "[0-9]+")), dayX))
    end
    end
    end
    
    • mirko3
    • vor 2 Jahren
    • Gemeldet - anzeigen

    ...habe etwas vergessen, Script ist für einen Button

    • Andreas_Kappes
    • vor 2 Jahren
    • Gemeldet - anzeigen

    Hab noch folgendes eingefügt als  3.zeile

    if yearX < 1925 then yearX := yearX + 100 end;

    damit kann ich die Jahreszahlen die aus dem 2000 er sind um 100 Jahre erhöhen dann passt es

    auch wenn ich den code  mit extractx  und "\d+(?=$)" nicht verstehe es funktioniert

     

    Vielen Dank Mirko

      • mirko3
      • vor 2 Jahren
      • Gemeldet - anzeigen

      Andreas Kappes 

      \d = arabische Ziffern (Zahlen)

      + = ein- oder mehrmaliges Auftreten

      (?=$) = positiv lookahead = heißt, nur die arabische Ziffern, denen ein Zeilenende ($) folgt

      Bei Interesse gibt es die Datei 344_RegEx_Tester im Webinar mit etwas Syntaxerläuterung für reguläre Ausdrücke. Gruß Mirko

      • Andreas_Kappes
      • vor 2 Jahren
      • Gemeldet - anzeigen

      MZ 

      danke für die Info schau ich mir mal an

      Gruß

      Andreas

Content aside

  • vor 2 JahrenZuletzt aktiv
  • 10Antworten
  • 713Ansichten
  • 2 Folge bereits