10 Antworten Neueste Antwort am Mar 25, 2017 5:43 AM von NorbertH

    Werte aus Textblock parsen

    ThomasReuter

      Liebe Freunde,

       

      ich hab hier folgenden Text-Block:

      Anrede: Herr

      Titel / Nachname: Mustermann

      Vorname: Bernhard

      E-Mail-Adresse: info@affenstall.com

      Firma: Affenstall & Co

       

      In der Datenbank hab ich Felder für Anrede, Vorname, Nachname etc. Ich würde jetzt gerne jedem dieser Felder eine Formel verpassen, das sich den Wert hinter dem passenden ":" automatisch aus dem Textblock zieht. Hinter jeder Textblock-Zeile ist eine Zeilenschaltung.

       

      Also umgangssprachlich: Vorname = Alles, was im Textblock hinter "Vorname: " steht, bis zum nächsten LineFeed.

       

      Wie mach ich das? Mir fällt nichts Vernünftiges ein ...

        • 1. Re: Werte aus Textblock parsen
          Tanner

          Das wird Dir helfen:

          ZeichenRechts (Text; Länge (Text) - Position (Text; ":"; Länge (Text); -1)

           

          • 2. Re: Werte aus Textblock parsen
            cheesus

            Du kannst auch zuerst den Text bereinigen, indem Du alle nicht benötigten Informationen ("Anrede: " etc) ersatzlos austauschst, so dass nur noch die reinen Daten im Textfeld stehen und dann einfach per "HoleWert(Text;Zeilennummer)" die gewünschte Zeile in Dein Feld kopierst.

             

            Das Austauschen funktioniert über diese Formel:

             

            Austauschen

              (

              DEINTEXTFELD ;

             

              ["Anrede: " ;""];

              ["Titel / Nachname: " ;""];

              ["Vorname: " ;""];

              ["E-Mail-Adresse: " ;""];

              ["Firma: " ;""]

              )

             

             

            Den Wert der ersten Zeile (Anrede) holst Du Dir dann z.B. auf diese Weise:

            HoleWert ( BEREINIGTER TEXT; 1 )

             

            Ich würde also in einem Script als erstes den bereinigten Text in eine Variable schreiben und anschließend jeden Feldwert setzen mit HoleWert ( $$DEINEVARIABLE; 1 ); HoleWert ( $$DEINEVARIABLE; 2 ) usw.

             

            Anbei eine Beispieldatei.

             

            Wahlweise kannst Du die kombinierte Formel auch als Auto-Enter Option für jedes Feld hinterlegen, dann brauchst Du kein Script. Ich bin allerdings etwas von Auto-Enter abgekommen, weil ich die Kontrolle darüber haben möchte, wann genau ein Feld berechnet wird. Sonst kann das u.U. unangenehme Folgen haben.

             

             

            Gruß Thomas

            • 3. Re: Werte aus Textblock parsen
              ThomasReuter

              Das ist eine sehr gute, einfach Lösung. Ich muss aber bzgl. meiner Frage der Fastenzeit entsprechend in Sack und Asche gehen: ich hatte LEIDER zu erwähnen vergessen, dass die Reihenfolge der Zeilen im Textblock beliebig ist. Es kann also vorkommen, dass der Nachname VOR dem Vornamen auftritt.

               

              Daran hängt es: wie schaffe ich es, dass z.B. der Vorname IMMER mit HoleWert ( BEREINIGTER TEXT; 2 ) abgerufen werden kann, auch wenn er im Text an 3. Stelle steht?

               

              Viele Grüße!

              Thomas

              • 4. Re: Werte aus Textblock parsen
                HLandschulz

                Hallo Thomas,

                 

                probier doch mal die eigene Funktion:

                 

                //TextBetween( _text; _start; _end; _type; _count )

                 

                 

                SetzeVar( [

                  _length = Länge( _text );

                  _startPos = Wenn( IstLeer( _start ); 1; Position( _text; _start; 1; _count ) );

                  _startPos = Wenn( _startPos = 0; 0; _startPos + Länge( _start ) );

                  _endPos = Falls(

                  IstLeer( _end );

                  _length + 1;

                  _type = "LAST" ODER _type = "LONG" ODER _type = "GREEDY";

                  Position( _text; _end; _length; -1 );

                  // Else

                  Position( _text; _end; _startPos; 1 )

                  )

                ];

                  Wenn( _startPos = 0 ODER _endPos = 0;

                  "";

                  // Else

                  ZeichenMitte( _text; _startPos; _endPos - _startPos )

                  )

                )

                 

                 

                /*

                Parameter

                _text (text) text to be processed

                _start (text) start text

                _end   (text) end text

                _type (text) NEXT | LAST | SHORT | LONG | GREEDY

                 

                 

                Autor: Arnold Kegebein

                 

                 

                Beschreibung

                Returns from text every characters between the first appearance of start and a specific appearance of end defined by type.

                If start is empty, everything from the beginning, if end is empty, everything from the end is taken.

                 

                 

                Values for type

                  NEXT, SHORT First end following start

                  LAST, LONG, GREEDY Last occurrence of end

                */

                 

                 

                Heike

                • 5. Re: Werte aus Textblock parsen
                  ThomasReuter

                  Muss ich mir mal anschauen. Komme ich leider heute erst später dazu. Vielen Dank, Heike!

                  • 6. Re: Werte aus Textblock parsen
                    cheesus

                    Dann hier noch eine 2. Variante, bei der es egal ist, in welcher Zeile die Infos stehen:

                     

                    Du berechnest die gesuchte Info, indem Du nach dem gewünschten Stichwort (z.B. "Anrede") suchst und wählst dann den Text aus, der von dort aus bis zur nächsten Zeilenschaltung geht. Hierzu muss aber vorher eine Zeilenschaltung ganz am Ende des Textes eingefügt werden, für den Fall, dass da noch keine vorhanden ist.

                     

                    Diese Formal macht das z.B. für die Anrede:

                     

                    SetzeVar (

                    [

                      $Suchtext = "Anrede";

                      $Startposition = Position ( $$Text ; $Suchtext ; 1 ; 1 ) + Länge ( $Suchtext ) +2;    //+2 wegen dem folgenden ":" und dem Leerzeichen

                      $Endposition = Position ( $$Text ; "¶" ; $Startposition ; 1 ) ;      //sucht nach dem nächsten Return

                      $AnzahlZeichen = $Endposition - $Startposition;

                      $String = ZeichenMitte ( $$Text ; $Startposition ; $AnzahlZeichen )

                    ]

                     

                    ; $String )

                     

                     

                    Anbei wieder eine funktionierende Beispieldatei.

                     

                    Gruß Thomas

                    • 7. Re: Werte aus Textblock parsen
                      ThomasReuter

                      Danke Euch allen - das hat mir sehr geholfen. Mit SetzeVars habe ich mich nich nie beschäftigt - muss ich mal nachholen.

                      • 8. Re: Werte aus Textblock parsen
                        NorbertH

                        Hallo Thomas,

                        wenn im Textblpci eine Zeile fehlen sollte kommt es zu einem falschen Wert in dem Feld.

                        Hier solltest du noch etwas Nacharbeiten.......

                         

                        Mfg

                        Norbert

                        • 9. Re: Werte aus Textblock parsen
                          cheesus

                          Ich mich bisher ehrlich gesagt auch nur selten, weil die Syntax ein bisschen gewöhnungsbedürftig ist (hauptsächlich das Setzen von Klammern).

                           

                          Wenn man das Ganze aber sauber mit Tabulatoren strukturiert, dann kann man auf diese Weise die einzelnen Berechnungsschritte einer komplizierten Betechnung viel übersichtlicher in einzelne Teilschritte aufdröseln und zudem noch "sprechende" Variablen definieren, welche die Lösung am Ende geradezu selbsterklärend machen.

                           

                          Gruß Thomas

                          • 10. Re: Werte aus Textblock parsen
                            NorbertH

                            Hallo Thomas (nicht cheesus),

                             

                            mit meiner letzten Antwort hatte ich Cheesus Angesprochen, habe gerade erst bemerkt das es hier 2 von euch gibt...

                             

                            Ich habe deine DB etwas geändert.......

                             

                             

                            Mit freundlichen Grüßen

                            Norbert