注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

chunwaihome 的博客

 
 
 

日志

 
 

For........EndFor  

2010-03-21 18:10:11|  分类: Powerpro腳本學習 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

for statement 通常是與 incremental operator ( i++ ) 一起使用來設定迴圈的次數, 有以下格式:

for (var=initexpr; testexpr; var=increxpr)
... statements inside the loop ...
endfor

 相等於

var=initexpr
@loop
if (not testexpr)

jump exitloop
... statements inside the loop ...
var = increxpr
jump loop
@exitloop

以下一個簡單的例子來了解 for loop 的原理。

For........EndFor - Y偉 - chunwaihome 的博客


for (
i = 0;  i <= 9;  i = i +1 )
          Win.debug(i)

EndFor

 

1. for(i =0; i <= 9; i = i+1 ) 這句中, i 是我們設定的變數, 可以用任何字母或文字, 例如 for(a=0; a<=9; a=a+1 )for(time=0; time<=9; time=time+1 ) , 不過一般習慣是用 i (i 代表index)。

2. i=0 是將 i 先設為 0, i <=9表示迴圈在 i 小於或等於 9 就會繼續, i=i+1 或 ( i++ ) 表示每迴圈一次, i 就增加 1 , 所以 for( i=0; i<=9; i=i+1 ) 就是迴圈 10 次。

3. 程式員計算次數習慣由 0 開始, 數到 9 就是 10次, 你也可以從 1 開始, 例如 for(i=1; i<=10; i=i+1 )


以下我們舉另一簡單例子以作示範,

Local v=1

@Fname                  //你也可以將@Fname寫成" Function Fname "   

If (v<6) do

          win.debug(v)

           v=v+1

         Jump Fname

Endif

上面If.....EndIf語句也可以用For.....EndFor語句替換

Local v=1

For (v<6)                    ;For(testexpr)....EndFor相等於autoit的while....Wend語法

          win.debug(v)

           v=v+1

EndFor

  [簡析]

首先我們將變量V設為1,之後定義一個Function名為Fname。然後建立If..Else..EndIf語句,檢查V是否小於6,因為開始時我們定義了V=1,因此也符合了 < 6  條件(你也可以說V<6這語句是真的)。

接著用debug命令顯示V的數值,將V自身的數值加上1然後再次敷於V變量裏,最後執行Jump Fname命令回到@Fname,這次循環後V=2也滿足於V<6的條件,然後再次往下執行命令直接V>6。

表一:每次遁環後V的值:

開始時V=1

第一次遁環V = V+1,變量V所儲值是2              ;如果是true的話回到@Fname

第二次遁環V = 2+1,變量V所儲值是3              ;如果是true的話回到@Fname

第三次遁環V = 3+1,變量V所儲值是4             ;如果是true的話 回到@Fname

第四次遁環V = 4+1,變量V所儲值是5              ;如果是true的話回到@Fname

第五次遁環V = 4+1,變量V所儲值是6              ;如果是true的話回到@Fname

第六次遁環V = 6+1,變量V所儲值是7             結果是7大於6因此執行quit命令。

 [註]

Function的作用是你可以在腳本的任何位置用@Jump Fname快速跳到Function所設的位置,換句話說,Function能夠打破程序順序結構的一個方法。

 

For......EndFor語句的變化

 

           語法

           說明

          For(,i<=10,i=i+1) 相當於例子1的Local i=1被刪除,因此沒有任何顯示
           For(i =1,i<=10,) 相當於例子1的i= i+1被刪除,因此它會不停地執行win.debug(i)
           For(i =1, ,i=i+1)  相當於例子1的i<=10被刪除,因此它會不停地執行If句子裏的statement
           For(,i<=10,)  相當於例子1的i= i+1和Local i=1被刪除,因此它會不停地執行jump Fname
           For(i<=10)  相等於AutoIt的While.........Wend語法

           

          • 例子3

          local var,i,var2
          var = win.handlelist("*",0)               //關於win.handlelist的說明
          按此
          i= word(var,0)                                 //關於Function Word的說明按此


          For(a=1;a<=i;a=a+1)                         //a = a+1相等於a++
          var2 = word(var,a)
          ;win.debug(win.exepath(var2))
          win.close(var2)
          EndFor

           

          local var = win.handlelist("*",0)   

          win.debug(var)

          var變量所得出值是:

          67652 67556 327784 132862 132852 132878 67598 67492 67594 67590 67548 67580 67574 132866 459348 67376 132332 526644 263298 328054 67500 262476 67648 67644 200286

          local var2 = word(var,0)
          win.debug(var2)

          var2變量所得出值是:

          36


          循環的嵌套

          所謂嵌套,就是在一種模式中再使用相同或相似的模式。其實,由於循環體內的語句本身還可以是
          另一個循環語句,因此這樣就構成了另一層循環。其中,處於外層的循環稱為外循環,處
          於內層的循環稱為內循環。這種嵌套結構的循環可以有多層,從而構成多重循環。 Powerpro最多支援3層的嵌套。例如我們想輸出以下數字矩陣:

          11 12 13 14 15

          21 22 23 24 25

          31 32 33 34 35

          local i,j,sum
          local i,j,sum
          sum = ""
          for (i =1 ; i <=3 ; i++)                         ;第一個循環
                   for (j =1 ; j <=5 ; j++)               
          ;第二個循環
                       sum = sum ++" "++ (i*10+j)
                   endfor
              sum = sum ++ "\n"
          endfor
              win.debug(sum)    

          進入第一個循環,設定 i 初值為1,終值為3,步長值為1。 第一個循環每循還一次,第二個循環五次,而且每次都要將變量 j 重新敷值為1, 並每次將其終值設定為5。所以sum = sum ++" "++ (i*10+j)總共要執行 15 次,而    sum = sum ++ "\n"  屬於第一個循環而不屬於第二個循環,所以和第二個循環一樣只執行三次。

          在第一個循環執行3次后,此時第二個循環己經執行了15次, 變量 i 達到其終值3,則第一個循環結束,跳出循環,執利剩下的語句。


           For Each ..........EndFor

           

          例子1:列出C:\ppwork.txt每一行文字的內容

          PPwork.txt

          "dog" = "mammal"
          "cat" = "mammal"

          "black widow spider" = "arachnid"
          "beetle"= "insect

          語法:

          filehand = file.open("c:/ppwork.txt", "r")
          if (filehand >=0) do
           for each FileLine in filehand                       //FileLine可以是其他的文字
          win.debug(FileLine)
           endfor
          filehand.close
          endif

           

           停止腳本

           你可以用quit去停止腳本

           JUMP xxx

          相等於@xxx

           jump的意思是你可以在執行腳本時跳去在腳本的xxx位置。

           flags

          我相信它的用途是測試某命令行有否執行

          Command *Script
          Action flag
          Parameters set n1 n2

           You can test the flag with the if command;

          Use: if (pproflag(4))
          to check to see if flag number 4 is set;
          Use: if (not pproflag(4))

           

          Use for each to loop through all items in a collection or all characters, words, or lines in a string.  This statement can only be used in scripts stored in files (not in command list scripts).

          for each var_result in expression_or_var

                statements
          endfor

           

          Contiune Statement

           

          前面說過 for loop 及 while loop, 在迴圈時, 若要剔除其中一些迴圈, 可使用這處說的 continue statement, 例如 if(i==3) continue , 這句的意思是當 i 等於 3 就停止這迴圈, 然後繼續下個迴圈。

            首先請看以下的 for loop:

          i = 0
          for(i<10)
           i = i+1
           Win.debug(i*2)
          endfor
            這script 會在螢幕顯示: 2/ 4/ 6/ 8/ 10/ 12/ 14/ 16/ 18/ 20/ 。

           

            假若要剔除其中一個數字, 我們可以刪除該迴圈, 例如以下的 script:

          i = 0
          for( i<=10 )
           i = i + 1
           if (i ==3)
             continue // ←這是不要 i 等於 3 的迴圈
          
           if (i == 7)
             continue // ←這是不要 i 等於 7 的迴圈
          
           Win.debug(i*2)
          endfor

            這 script 會在螢幕顯示: 2/ 4/ 8/ 10/ 12/ 16/ 18/ 20/ 。

           


          下面那個腳本我不太明白

           If you omit the test expression, then it is taken to be true and you will get a loop that can only be terminated by a break or quit

           e.g.

           for (var=initexpr; ;var=increxpr)

            评论这张
           
          阅读(702)| 评论(0)
          推荐 转载

          历史上的今天

          评论

          <#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
           
           
           
           
           
           
           
           
           
           
           
           
           
           

          页脚

          网易公司版权所有 ©1997-2017