3 Replies Latest reply: May 4, 2018 11:41 AM by bhasker kumar RSS

    How to use a "left join Load with peek()" inside an if/else and for/next loop?

    Marcus Strehler

      Hello,

       

      Please help.

      I have a Table ( 'Quelle' ) as Source. There are two fields in it ( 'Erster' , 'Zweiter' ), which should be compared.

      I need the field with more characters as return ( 'BestOf' ). If both fields ( 'Erster' , 'Zweiter' ) have an evan count of characters then take 'Erster' as return.

       

      Zwischenablage01.jpg

       

      Up to now I have the following Code in my Skript:

       

      --------------------------------------------------------------------------------------------

      Quelle:

      LOAD * INLINE [

          Erster, Zweiter, Primärschlüßel

          a, 22, aaa

          ab, 333, bbb

          abc, 4444, ccc

          abcd, 4444, ddd

          abcde, 4444, eee

          ab, 55555, fff,

          ab, 1, ggg

          ab, 22, hhh

      ];

       

      Ergebniss:

      LOAD

      Primärschlüßel as Sekundärschlüßel

      Resident Quelle;

       

       

      for i = 0 to (NoOfRows('Quelle'))-1;

       

          let vLänge_Erster = len(peek('Erster',$(i),'Quelle'));

          let vLänge_Zweiter = len(peek('Zweiter',$(i),'Quelle'));

         

          Trace Durchgang i:  $(i);

          Trace Länge von 'Erster': $(vLänge_Erster);

          Trace Länge von 'Zweiter': $(vLänge_Zweiter);

             

          if vLänge_Erster >= vLänge_Zweiter     Then

              Trace genommern wird Wert aus Feld:'Erster';

                 left Join (Ergebniss)

                  load

                  peek('Erster',$(i),'Quelle') as BestOf,

                  $(i) as i,

                  peek('Primärschlüßel',$(i),'Quelle') as Sekundärschlüßel

                  Resident Ergebniss;

              else

              Trace genommern wird Wert aus Feld: 'Zweiter';

                  left Join (Ergebniss)

                  load

                  peek('Zweiter',$(i),'Quelle') as BestOf,

                  $(i) as i,

                  peek('Primärschlüßel',$(i),'Quelle') as Sekundärschlüßel

                  Resident Ergebniss;

             

          ENDIF

          Trace -----------;

      next

       

      --------------------------------------------------------------------------------------------

       

      I think somewhere in the red parts is a Bug, but I can't find it.

       

      Can anyone help me?

      THX

        • Re: How to use a "left join Load with peek()" inside an if/else and for/next loop?
          bhasker kumar

          Hi,

           

          please find the attached solution Qvw.

           

          Sol.PNG

           

          ** Modified Script****

          Quelle:

           

           

          LOAD * INLINE [

          Erster, Zweiter, Primärschlüßel

          a, 22, aaa

          ab, 333, bbb

          abc, 4444, ccc

          abcd, 4444, ddd

          abcde, 4444, eee

          ab, 55555, fff,

          ab, 1, ggg

          ab, 22, hhh

          ];

           

           

          Ergebniss:

           

           

          LOAD

          Primärschlüßel as Sekundärschlüßel

          Resident Quelle;

           

           

           

           

          for i = 0 to (NoOfRows('Quelle'))-1;

           

           

              let vLänge_Erster = len(peek('Erster',$(i),'Quelle'));

              let vLänge_Zweiter = len(peek('Zweiter',$(i),'Quelle'));

           

              Trace Durchgang i:  $(i);

           

           

              Trace Länge von 'Erster': $(vLänge_Erster);

           

           

              Trace Länge von 'Zweiter': $(vLänge_Zweiter);

           

           

              

          //    if vLänge_Erster >= vLänge_Zweiter    Then

          //

          //        Trace genommern wird Wert aus Feld:'Erster';

           

           

          //          left Join (Ergebniss)

          Table:

                      load

           

           

                      if( $(vLänge_Erster) >= $(vLänge_Zweiter),peek('Erster',$(i),'Quelle'), peek('Zweiter',$(i),'Quelle')) as BestOf,

           

           

                      $(i) as i,

           

           

                      peek('Primärschlüßel',$(i),'Quelle') as Sekundärschlüßel

           

           

                      Resident Ergebniss;

          //

          //        else

          //

          //        Trace genommern wird Wert aus Feld: 'Zweiter';

          //

          //            left Join (Ergebniss)

          //

          //            load

          //

          //            peek('Zweiter',$(i),'Quelle') as BestOf,

          //

          //            $(i) as i,

          //

          //            peek('Primärschlüßel',$(i),'Quelle') as Sekundärschlüßel

          //

          //            Resident Ergebniss;

          //

          //    ENDIF

          //

          //    Trace -----------;

           

           

          next

           

           

          //NoConcatenate

           

           

          left Join (Ergebniss)

          LOAD

          *

          Resident Table;

          DROP Table Table,Quelle;

           

          ********************************************* SCRIPT END ***********************************************

           

          Regards,

          Bhasker Kumar