Loading ...
Sorry, an error occurred while loading the content.
 

Re: [Clip] Simple loop question

Expand Messages
  • loro
    ... Like this? ^!Set %repeat%=^?{How many times?} ^!Set %cntr%=0 ... ^!Inc %cntr% ^!If ^%cntr% ^%repeat% end ^!InsertText Hello world^P ^!Goto loop That is
    Message 1 of 6 , Aug 29, 2013
      At 21:36 2013-08-27, you wrote:
      >How do I create a simple loop that can be repeated by a variable number input?
      >
      >For example I want to create a clip that can write "Hello World" and
      >I want to input how many times I want it repeated?

      Like this?

      ^!Set %repeat%=^?{How many times?}

      ^!Set %cntr%=0
      :loop
      ^!Inc %cntr%
      ^!If ^%cntr% > ^%repeat% end
      ^!InsertText Hello world^P
      ^!Goto loop


      That is you need a label (I called it 'loop', but you can call it
      anything). At the end of the clip you need to tell it to go to this
      label so the loop starts over.
      You need a counter (the variable called 'cntr') to keep track of how
      many times the loop has run. You do that by increasing it with 1 for each loop.
      You need a conditional to check if the loop has run as many times as
      you want and if it has kill the clip (the ^!If line).

      Lotta
    • Celtics2000
      Thank you very much!! I was definitely trying to do it the wrong way. ^!SetDebug On ^!Set %Sum%=1 ^!Set %Sum%=(Calc(%Sum%+^?{}$))$ ... ^!If ^%Sum% = 0 ^!Goto
      Message 2 of 6 , Aug 29, 2013
        Thank you very much!! I was definitely trying to do it the wrong way.

        ^!SetDebug On
        ^!Set %Sum%=1
        ^!Set %Sum%=(Calc(%Sum%+^?{}$))$

        :Loop
        ^!If ^%Sum% = 0 ^!Goto True
        WRITE HELLO WORLD NUMBER ^%Sum%
        ^!Set %Sum%=(Calc(%Sum%-1))$
        ^!Goto Loop



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



        --- In ntb-clips@yahoogroups.com, loro <tabbie@...> wrote:
        >
        > At 21:36 2013-08-27, you wrote:
        > >How do I create a simple loop that can be repeated by a variable number input?
        > >
        > >For example I want to create a clip that can write "Hello World" and
        > >I want to input how many times I want it repeated?
        >
        > Like this?
        >
        > ^!Set %repeat%=^?{How many times?}
        >
        > ^!Set %cntr%=0
        > :loop
        > ^!Inc %cntr%
        > ^!If ^%cntr% > ^%repeat% end
        > ^!InsertText Hello world^P
        > ^!Goto loop
        >
        >
        > That is you need a label (I called it 'loop', but you can call it
        > anything). At the end of the clip you need to tell it to go to this
        > label so the loop starts over.
        > You need a counter (the variable called 'cntr') to keep track of how
        > many times the loop has run. You do that by increasing it with 1 for each loop.
        > You need a conditional to check if the loop has run as many times as
        > you want and if it has kill the clip (the ^!If line).
        >
        > Lotta
        >
      • Ian NTnerd
        If you look in the Quick List (F6) there is an already made loop there. Look under: *Miscellaneous **Elements* then *Loop Element* It give you this: ^!Set
        Message 3 of 6 , Aug 29, 2013
          If you look in the Quick List (F6) there is an already made loop there.
          Look under:
          *Miscellaneous **Elements* then *Loop Element*

          It give you this:
          ^!Set %Index%=0
          ^!Set %LoopCount%=^?{How many loops?}
          ^!IfCancel End
          :LoopStart
          ^!Inc %Index%
          ^!If ^%Index% > ^%LoopCount% EndLoop

          *** Do something ***

          ^!GoTo LoopStart
          :EndLoop


          I use the slightly modified one below all the time. When you want to use
          a loop again you only need to write the starting *main *part and the
          *writeline *part but more likely another clip altogether. The *loopa
          *clip is totally reusable

          H="main"
          ; define the data to be processed.
          ; tell the array what separator to split the text into pieces with.
          ^!SetListDelimiter ^p
          ; arraya will separate each line into a different cell.
          ^!setarray %arraya%=^$GetFileText("c:\data.txt")$

          ; define the sub clip
          ^!set %subclip%=writeline

          ; I really would use:
          ; ^!set %subclip%=^$GetLibraryName$:writeline


          ; Now all is set up
          ; run the loopa and define the subclip to use by including it as a
          parameter of loopa.
          ^!clip "loopa" ^%subclip%

          ; I really would use:
          ; ^!farclip "call:loopa" ^%subclip%


          H="loopa"
          ^!Set %Indexa%=0
          ^!Set %LoopCounta%=^%arraya0%
          ^!IfCancel End

          :LoopStarta
          ^!Inc %Indexa%
          ^!If ^%Indexa% > ^%LoopCounta% EndLoopa

          ; next line skips over blank links in input file
          ^!If "^%arrayA^%indexA%%"="" LoopStarta

          ; The ^& will substitute the ^%subclip% parameter
          ; This now pass each line to another clip, defined above by the variable
          *subclip *to further process.
          ; Now the loopa can be used again. The subclip may call loopb and
          another subclip to further split the line content.
          ^!clip "^&" ^%arraya^%indexa%%

          ; I really use this line in my loopa clip in a clipbook called *call*. I
          just varied this for inclusion in the same clipbook.
          ; ^!farclip "^&" ^%arraya^%indexa%%

          ^!GoTo LoopStarta
          :EndLoopa

          H="writeline"
          ; the only reason for putting this part in a separate clip is so that
          loopa is totally reusable.
          Line length: ^$StrSize("^&")$
          Line: ^&


          This is untested as in I simplified what I usually use so it can be used
          in one clipbook.
          Have fun.

          Ian

          On 30/08/2013 12:08 AM, Celtics2000 wrote:
          >
          > Thank you very much!! I was definitely trying to do it the wrong way.
          >
          > ^!SetDebug On
          > ^!Set %Sum%=1
          > ^!Set %Sum%=(Calc(%Sum%+^?{}$))$
          >
          > :Loop
          > ^!If ^%Sum% = 0 ^!Goto True
          > WRITE HELLO WORLD NUMBER ^%Sum%
          > ^!Set %Sum%=(Calc(%Sum%-1))$
          > ^!Goto Loop
          >
          > -------------------
          >
          > --- In ntb-clips@yahoogroups.com <mailto:ntb-clips%40yahoogroups.com>,
          > loro <tabbie@...> wrote:
          > >
          > > At 21:36 2013-08-27, you wrote:
          > > >How do I create a simple loop that can be repeated by a variable
          > number input?
          > > >
          > > >For example I want to create a clip that can write "Hello World" and
          > > >I want to input how many times I want it repeated?
          > >
          > > Like this?
          > >
          > > ^!Set %repeat%=^?{How many times?}
          > >
          > > ^!Set %cntr%=0
          > > :loop
          > > ^!Inc %cntr%
          > > ^!If ^%cntr% > ^%repeat% end
          > > ^!InsertText Hello world^P
          > > ^!Goto loop
          > >
          > >
          > > That is you need a label (I called it 'loop', but you can call it
          > > anything). At the end of the clip you need to tell it to go to this
          > > label so the loop starts over.
          > > You need a counter (the variable called 'cntr') to keep track of how
          > > many times the loop has run. You do that by increasing it with 1 for
          > each loop.
          > > You need a conditional to check if the loop has run as many times as
          > > you want and if it has kill the clip (the ^!If line).
          > >
          > > Lotta
          > >
          >
          >



          [Non-text portions of this message have been removed]
        • wolfhaven2000
           This really helps. Thanks all! :) --- In ntb-clips@yahoogroups.com, <indiamcq@...> wrote: If you look in the Quick List (F6) there is an already
          Message 4 of 6 , Aug 30, 2013
             This really helps. Thanks all! :) --- In ntb-clips@yahoogroups.com, <indiamcq@...> wrote: If you look in the Quick List (F6) there is an already made loop there.
            Look under:
            *Miscellaneous **Elements* then *Loop Element*

            It give you this:
            ^!Set %Index%=0
            ^!Set %LoopCount%=^?{How many loops?}
            ^!IfCancel End
            :LoopStart
            ^!Inc %Index%
            ^!If ^%Index% > ^%LoopCount% EndLoop

            *** Do something ***

            ^!GoTo LoopStart
            :EndLoop


            I use the slightly modified one below all the time. When you want to use
            a loop again you only need to write the starting *main *part and the
            *writeline *part but more likely another clip altogether. The *loopa
            *clip is totally reusable

            H="main"
            ; define the data to be processed.
            ; tell the array what separator to split the text into pieces with.
            ^!SetListDelimiter ^p
            ; arraya will separate each line into a different cell.
            ^!setarray %arraya%=^$GetFileText("c:\data.txt")$

            ; define the sub clip
            ^!set %subclip%=writeline

            ; I really would use:
            ; ^!set %subclip%=^$GetLibraryName$:writeline


            ; Now all is set up
            ; run the loopa and define the subclip to use by including it as a
            parameter of loopa.
            ^!clip "loopa" ^%subclip%

            ; I really would use:
            ; ^!farclip "call:loopa" ^%subclip%


            H="loopa"
            ^!Set %Indexa%=0
            ^!Set %LoopCounta%=^%arraya0%
            ^!IfCancel End

            :LoopStarta
            ^!Inc %Indexa%
            ^!If ^%Indexa% > ^%LoopCounta% EndLoopa

            ; next line skips over blank links in input file
            ^!If "^%arrayA^%indexA%%"="" LoopStarta

            ; The ^& will substitute the ^%subclip% parameter
            ; This now pass each line to another clip, defined above by the variable
            *subclip *to further process.
            ; Now the loopa can be used again. The subclip may call loopb and
            another subclip to further split the line content.
            ^!clip "^&" ^%arraya^%indexa%%

            ; I really use this line in my loopa clip in a clipbook called *call*. I
            just varied this for inclusion in the same clipbook.
            ; ^!farclip "^&" ^%arraya^%indexa%%

            ^!GoTo LoopStarta
            :EndLoopa

            H="writeline"
            ; the only reason for putting this part in a separate clip is so that
            loopa is totally reusable.
            Line length: ^$StrSize("^&")$
            Line: ^&


            This is untested as in I simplified what I usually use so it can be used
            in one clipbook.
            Have fun.

            Ian

            On 30/08/2013 12:08 AM, Celtics2000 wrote:
            >
            > Thank you very much!! I was definitely trying to do it the wrong way.
            >
            > ^!SetDebug On
            > ^!Set %Sum%=1
            > ^!Set %Sum%=(Calc(%Sum%+^?{}$))$
            >
            > :Loop
            > ^!If ^%Sum% = 0 ^!Goto True
            > WRITE HELLO WORLD NUMBER ^%Sum%
            > ^!Set %Sum%=(Calc(%Sum%-1))$
            > ^!Goto Loop
            >
            > -------------------
            >
            > --- In ntb-clips@yahoogroups.com <mailto:ntb-clips%40yahoogroups.com>,
            > loro <tabbie@...> wrote:
            > >
            > > At 21:36 2013-08-27, you wrote:
            > > >How do I create a simple loop that can be repeated by a variable
            > number input?
            > > >
            > > >For example I want to create a clip that can write "Hello World" and
            > > >I want to input how many times I want it repeated?
            > >
            > > Like this?
            > >
            > > ^!Set %repeat%=^?{How many times?}
            > >
            > > ^!Set %cntr%=0
            > > :loop
            > > ^!Inc %cntr%
            > > ^!If ^%cntr% > ^%repeat% end
            > > ^!InsertText Hello world^P
            > > ^!Goto loop
            > >
            > >
            > > That is you need a label (I called it 'loop', but you can call it
            > > anything). At the end of the clip you need to tell it to go to this
            > > label so the loop starts over.
            > > You need a counter (the variable called 'cntr') to keep track of how
            > > many times the loop has run. You do that by increasing it with 1 for
            > each loop.
            > > You need a conditional to check if the loop has run as many times as
            > > you want and if it has kill the clip (the ^!If line).
            > >
            > > Lotta
            > >
            >
            >



            [Non-text portions of this message have been removed]
          • flo.gehrke
            ... Lotta gave you a perfect solution. So just in case you are interested to know what s wrong with your clip: 1. There are several tokens missing: Don t write
            Message 5 of 6 , Aug 30, 2013
              --- In ntb-clips@yahoogroups.com, "Celtics2000" <cliffsss@...> wrote:
              >
              > Thank you very much!! I was definitely trying to do it the
              > wrong way.
              >
              > ^!SetDebug On
              > ^!Set %Sum%=1
              > ^!Set %Sum%=(Calc(%Sum%+^?{}$))$
              >
              > :Loop
              > ^!If ^%Sum% = 0 ^!Goto True
              > WRITE HELLO WORLD NUMBER ^%Sum%
              > ^!Set %Sum%=(Calc(%Sum%-1))$
              > ^!Goto Loop

              Lotta gave you a perfect solution. So just in case you are interested to know what's wrong with your clip:

              1. There are several tokens missing: Don't write '(Calc(%Sum%+etc)$' but '^$Calc(^%Sum%+etc)$'.

              2. In the first '^$Calc' function, you can't use curly braces because they produce an 'error in expression' here. Use square brackets:

              ^!Set %Sum%=0
              ^!Set %Sum%=^$Calc(^%Sum%+^?[Repeat:])$
              :Loop
              WRITE HELLO WORLD NUMBER ^%Sum%^%NL%
              ^!Set %Sum%=^$Calc(^%Sum%-1)$
              ^!If ^%Sum% > 0 Loop

              The background of this issue was described in a previous discussion in Apr 2012 -- see...

              http://tech.groups.yahoo.com/group/ntb-clips/message/22573

              Regards,
              Flo
            Your message has been successfully submitted and would be delivered to recipients shortly.