Text- und Datumsfunktionen

Textfunktionen

Text fügt einen konstanten Text ein.

ohne Leerzeichen( Text ) entfernt Leerzeichen am Anfang und am Ende des Textes.

klein( Text ) wandelt den Text in Kleinbuchstaben.

groß( Text ) wandelt den Text in Großbuchstaben.

links auffüllen( Text, Zahl, Auffüll-Text ) erzeugt einen Text, der mindestens Zahl Zeichen lang ist. Wenn der Text kürzer als Zahl Zeichen ist, wird der Auffüll-Text so oft vorangestellt, bis die gewünschte Zeichenlänge erreicht ist.

rechts auffüllen( TextZahlAuffüll-Text ) arbeitet analog zu links auffüllen, stellt aber den Auffüll-Text hinten an.

Teilzeichenkette( Text, Start, Ende ) Extrahiert einen Teil aus dem Text von Start (inklusive) bis Ende (exklusive). Gezählt wird ab 0, das heißt 0 bezeichnet das erste Zeichen im Text. Beispiele:

  • Teilzeichenkette( “Hallo Welt!”, 0, 5 ) ergibt “Hallo”.
  • Teilzeichenkette( “Hallo Welt!”, 6, 10 ) ergibt “Welt”.

Datumsfunktionen

Die folgenden Funktionen lassen sich auch auf Termine und Zeitpunkte anwenden. Bei Terminen richten sie sich nach dem Startdatum des Termins.

Jahr( Datum ) liefert das Jahr zurück.

Monat( Datum ) liefert den Monat zurück.

Tag( Datum ) liefert den Monatstag zurück.

Wochentag( Datum ) liefert den Wochentag zurück.

Jahr/Monat( Datum ) liefert einen Text, zusammengesetzt aus Jahr und Monat, zurück. Dies ist hilfreich bei Monatsauswertungen. Nutzen Sie diese Funktion, um eine Tabelle nach Monaten zu gruppieren.

Start( Termin ) berechnet den Startzeitpunkt eines Termins.

Ende( Termin ) berechnet den Endzeitpunkt eines Termins.

Dauer( Termin ) berechnet die Zeitdauer des Termins, es gilt:

Dauer( Termin ) = Ende( Termin ) – Start( Termin ).

Alter( Datum ) berechnet des aktuelle Alter (einer Person) in Jahren.

Heute gibt das aktuelle Datum zurück.

Weitere Funktionen

formatieren( Zahl, Format ) erzeugt aus der Zahl einen formatierten Text. Als Format ist ein Text erforderlich:

  • 0 steht für eine Ziffer oder 0
  • # steht für eine Ziffer, die nur dargestellt wird, wenn die Zahl groß genug ist
  • . bezeichnet das Dezimaltrennzeichen (wird bei der Formatierung in das landestypische Symbol gewandelt, in Deutschland also als Komma dargestellt)
  • , bezeichnet das Gruppierungskennzeichen (wird bei der Formatierung in das landestypische Symbol gewandelt, in Deutschland also als Punkt dargestellt)

Beispiele

  • formatieren(42.5, “0″) ergibt “42″
  • formatieren(42.5, “000″) ergibt “042″
  • formatieren(42.5, “000.00″) ergibt “042,50″
  • formatieren(42.5, “0.00″) ergibt “42,50″
  • formatieren(42.5, “#,##0.00″) ergibt “42,50″
  • formatieren(1042.5, “#,##0.00″) ergibt “1.042,50″

 

165 Gedanken zu „Text- und Datumsfunktionen

  1. Guten Tag

    Ich habe grössere Probleme mit der Funktion-Weekday. Bei mir verabschiedet sich Ninox immer, sobald ich die Funktion weekday() zum Einsatz bringe. Im Prinzip versuche ich über eine For-Schleife, Seriendaten anzulegen.
    Der beiliegende Code ist aus Debug-Gründen etwas kompliziert aufgebaut. Jedes angesprochene Feld ist ein Zahlenfeld, bis auf die Felder:
    Termin (Terminfeld)
    dStart_Datum (Datum_Feld)
    Generierter Termin (Terminfeld)

    Start-Tabelle ist: SerienFeldMitAnzahl
    Auf dem Knopf “Berechne” läuft folgender Script ab, welcher ohne Zeile 24 (Weekday) durchläuft, aber eben mit weekday sich aufhängt.

    TerminAlsZahl := Termin;
    Start_Datum_Zeit := substr(TerminAlsZahl, 0, index(TerminAlsZahl, “/”));
    Dauer := duration(Termin);
    Jahr := year(Termin);
    Monat := month(Termin);
    Tag := day(Termin);
    Startzeit := number(number(Start_Datum_Zeit)) – number(date(Jahr, Monat, Tag));
    Start_Datum := date(Jahr, Monat, Tag);
    dStart_Datum := date(Jahr, Monat, Tag);
    Wochentag := weekday(date(number(Start_Datum)));
    vWochentag := weekdayName(number(Wochentag));
    NeuerTerminAlsZahl := text(number(Start_Datum) + number(Startzeit)) + “/” + text(number(Dauer));
    GenerierterTermin := NeuerTerminAlsZahl;
    Interval := 24 * 60 * 60 * 1000;
    (let iAnz := 1;
    for i in range(0, iAnz) do
    let b := “Berechne naechsten neuen Termin”;
    Start_Datum := number(Start_Datum) + number(Interval);
    dStart_Datum := Start_Datum;
    Start_Datum_Zeit := number(Start_Datum) + number(Startzeit);
    Jahr := year(Termin);
    Monat := month(Termin);
    Tag := day(Termin);
    Wochentag := weekday(dStart_Datum);
    NeuerTerminAlsZahl := text(number(Start_Datum) + number(Startzeit)) + “/” + text(number(Dauer));
    GenerierterTermin := NeuerTerminAlsZahl;
    (let d := NeuerTerminAlsZahl;
    let t := “Titel”;
    let w := Wochentag;
    let wt := vWochentag;
    if number(Wochentag) != 5 and number(Wochentag) != 6 then
    (let c := (create Serien);
    c.(Datum := d))
    else
    (Start_Datum := Start_Datum))
    end
    )

      1. Guten Morgen

        Zwischenzeitlich habe ich die DB Ihnen zugesandt. Während dessen habe ich mich weiter der Problematik angenommen und folgendes festgestellt:
        1. Die Iterration läuft durch, wenn ich kein “let c := create Serien” erstelle

        Gleichzeitig habe ich eine Frage:
        Wieso kann ich nachdem ich den Befehl “let c := create Serien” nicht direkt auf die Datenfelder des aktuellen Datensatzes zugreifen und muss die Daten erst über weitere LET-Anweisungen neuen Variablen zuordnen?

        Ich vermute, dass mein Problem genau mit diesem Verhalten zu tun hat.

        Herzlichen Dank für Ihre Unterstützung.

        Freundliche Grüsse
        Walter Reinhardt

    1. Das ist möglich. Versuchen Sie folgende Formel:
      –––
      let myT := "Text";
      var myNewText := for i from 0 to length(myT) do
      substr(myT, i, 1) + " "
      end
      ;
      replace(concat(myNewText), ", ", "")
      –––

      Birger – Ninox Support

      1. Vielen Dank. Leider passiert da nichts bei mir. So wie ich das ersehe, müsste das Wort dann ersetzt werden.

        Ich hatte nun folgendes versucht:

        Ein Feld: Nachname

        Das Errechnete nach aktualisieren dann in das Feld: Berechnung zu bekommen.

        let myT := Nachname;
        var myNewText := for i from 0 to length(myT) do
        substr(myT, i, 1) + ” ”
        end
        ;
        Berechnung = (concat(myNewText), “, “, “”)

        Irgendwo klemmt es noch ;)

        Viele Grüße
        Roland

          1. Ahhh, also ich habe die Formel (die erste hier) nun als Funktion in der Druckansicht eingefügt, dort funktioniert sie wunderbar ;)

            Ich hätte es zwar gerne in ein Feld gesetzt und es dafür als Triggerfunktion eingesetzt, aber hierfür klappen weder die erste Version von Birger, noch die zweite Version von Leo. Die Logik verstehe ich nicht, da ich davon ausgehe Funktion ist Funktion ;)

            Aber zumindest komme ich schon einen guten Schritt weiter, vielen Dank ;)

        1. Es sollte heißen:
          –––
          let myT := Nachname;
          var myNewText := for i from 0 to length(myT) do
          substr(myT, i, 1) + " "
          end
          ;
          Berechnung = concat(myNewText, ", ", "")
          –––

          Beachten Sie die Klammern in der letzten Zeile.

          Birger Ninox Support

        1. Bisher konnten Variablen nur so deklariert werden:
          let myX := 7
          Neu ist folgendes:
          var myY := 7
          Damit sind erstmals z.B. inkrementelle Berechnungen möglich, etwa in der Form:
          myY := myY +1

          Birger – Ninox Support

  2. Hallo,

    ich habe Schwierigkeiten, eine Ausgabe zu formatieren:

    Projektname + “, ” + Ort

    Die DB zeigt mir immer wieder “Unerwartetes Symbol in Zeile 1, Spalte 13.
    Wie bekomme ich ein Leerzeichen zwischen den Feldern?

    Vielen Dank!

    Gruß
    Andy

    1. Bitte achten Sie darauf, keine typographischen Anführungszeichen zu verwenden. Die Ninox Script-Sprache erkennt ausschließlich nicht formatierte Anführunszeichen.

      Nicht: Projektname + “, ” + Ort
      Sondern: Projektname + ", " + Ort

      Birger – Ninox Support

  3. Hallo, ich arbeite mit dieser Formel:

    if Zustand = 2 then
    Maximalhaltbarkeit – today()
    else
    ‘haltbar bis’ – today()

    Hier die Formel hinter “Maximalhaltbarkeit”:

    if ‘Datum geöffnet am + Haltbarkeit nach Anbruch’ > ‘haltbar bis’ then
    ‘haltbar bis’
    else
    ‘Datum geöffnet am + Haltbarkeit nach Anbruch’

    Doch obwohl ich nirgends Probleme dieser Art habe, erhalte ich im Ergebnis neben den Tagen der Resthaltbarkeit eine merkwürdige Zeitangabe.

    “13 Tage 16:47:59.999″

    1. Sorry, hat sich erledigt. Die Wochen mit Dezimalstellen ergeben Uhrzeiten, da keine ganzen Tage mehr bei rauskommen. Habe jetzt die Woche in einer vorherigen Formel gerundet:

      ‘geöffnet am’ + round(Arzneimittelname.’Haltbarkeit nach dem Öffnen (Wochen)’) * 7

  4. Hallo,
    ich möchte in einem Funktionsfeld die Durchschnittszeit (Minuten/Kilometer) einer Laufstrecke berechnen. Dazu verwende ich die Formel (Laufzeit/Distanz) als Zeitdauer/Zahl. Das klappt auch wunderbar, nur wird das Ergebnis in (hh:mm:ss) angezeigt. Mich interessieren aber nur die Minuten und Sekunden (mm:ss). Ich habe schon alles mögliche versucht um dieses Ergebnis umzuformatieren, aber irgendwie will das nicht so recht klappen.
    Danke im Voraus für eine Lösung.

    1. Hier müssen Sie die Original-Formatierung überschreiben. Verwenden Sie ein Formel-Feld und folgende Formel:
      –––
      let myT := number('Durchschnittszeit');
      let myMin := floor(myT / 60000);
      mySec := round( (myT - 60000 * myMin) / 1000);
      myMin + ":" + format( mySec, "00")
      –––

      Birger – Ninox Support

      1. Perfekt!
        Habe die Formel wie folgt angepasst:


        let myT := number(Laufzeit / Distanz);
        let myMin := floor(myT / 60000);
        let mySec := round((myT - 60000 * myMin) / 1000);
        myMin + ":" + format(mySec, "00") + " min/km"

        Danke

Hinterlasse eine Antwort