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

Simple loop question

Expand Messages
  • Celtics2000
    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
    Message 1 of 6 , Aug 27, 2013
    • 0 Attachment
      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?

      Thanks in advance!
    • 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 2 of 6 , Aug 29, 2013
      • 0 Attachment
        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 3 of 6 , Aug 29, 2013
        • 0 Attachment
          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 4 of 6 , Aug 29, 2013
          • 0 Attachment
            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 5 of 6 , Aug 30, 2013
            • 0 Attachment
               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 6 of 6 , Aug 30, 2013
              • 0 Attachment
                --- 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.