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

Re: [Clip] Simple loop question

Expand Messages
  • 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 1 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 2 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 3 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 4 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.