1. 程式人生 > >工控隨筆_19_西門子_WinCC的VBS指令碼_08_常量和流程控制_01

工控隨筆_19_西門子_WinCC的VBS指令碼_08_常量和流程控制_01

  在程式設計的過程中,有時候我們會使用一些固定的值,例如圓周率,或者某個人的生日,或者家庭住址等等,

這些資訊對於一個物件來說一旦確定就不會改變,因此我們在程式設計的時候也不希望這些資訊會改變,在VBS裡面

也提供了和其他一些語言中一樣的機制: 常量。

  常量大體有兩種型別: 字面值常量 和 具名常量。

 

一、常量

Option Explicit

'   vbs 常量
'vbs有兩種型別的常量: 字面值常量 和 具名常量

'字面值常量
'字面值常量, 就如字面意思一樣,其值就和字面意思表達的一樣
Dim
strAddress '下面語句的 中華人民共和國上海市 就是字面值常量 strAddress = "中華人民共和國上海市" Dim nYear '下面語句的 2000 就是字面值常量 nYear = 2000 '具名常量 '1、具名常量,其實質就是其值不能修改的變數, 這個變數一旦初始化後 ' 其儲存的內容不能被改變, '2、具名常量通過關鍵字 const 指定 Const Pi = 3.1415926 '具名常量初始化後不能在賦值 Pi= 10 MsgBox Pi

  如上程式碼,具名常量初始化後不能再進行賦值,如果賦值的話就會報錯。如下圖所示:

 

  這個地方需要注意。

 

Option Explicit

'   vbs 常量
'vbs有兩種型別的常量: 字面值常量 和 具名常量

'字面值常量
'字面值常量, 就如字面意思一樣,其值就和字面意思表達的一樣
Dim strAddress
'下面語句的 中華人民共和國上海市 就是字面值常量
strAddress = "中華人民共和國上海市"

Dim nYear
'下面語句的 2000 就是字面值常量
nYear = 2000


'具名常量
'1、具名常量,其實質就是其值不能修改的變數, 這個變數一旦初始化後
'   其儲存的內容不能被改變, 
'2、具名常量通過關鍵字 const 指定 Const Pi = 3.1415926 '具名常量初始化後不能在賦值 'Pi= 10 MsgBox Pi 'vbs的內建具名常量 '在vbs中內建了部分具名常量,這些常量方便使用vbs '典型的具名常量就是 msgbox的具名常量,通過不同的具名常量顯示不同的按鈕形式 '1、僅顯示OK、確定按鈕 MsgBox Pi,vbOKOnly '2、顯示yes、no按鈕 MsgBox Pi,vbYesNo '3、顯示 i 圖示 MsgBox Pi,vbYesNo + vbInformation '對於vbs內建的具名常量,建議可以查手冊,這裡再說幾個常用的,其他不多說 ' vbNewLine 這個是表示再起一行的意思 ' vbcrlf 這個與上面的vbnewline是一個意思 MsgBox Pi & vbNewLine & "新行" & vbCrLf & "新的第二行"

 

二、流程控制

   流程控制是程式語言最終要的概念之一,需要注意。 

Option Explicit

Rem 流程控制

'流程控制是程式語言中重要的概念,通過流程控制可以實現複雜的功能控制
'流程控制主要有: 分支、迴圈兩種

'    分支
'1、分支主要有IF語句
'2、select case 語句

'if語句
Dim strPrompt
Dim nSelect

strPrompt = vbCrLf & "1: 選擇Yes說哈哈" & vbCrLf & _
                     "2: 選擇No說嘻嘻" & vbCrLf & "3: 選擇取消,不說話"
nSelect = MsgBox("請選擇不同的按鈕,然後實現不同的功能" & strPrompt, vbYesNoCancel)

If nSelect = vbyes Then
    MsgBox "選擇Yes說哈哈"
ElseIf nSelect = vbno Then
    MsgBox "選擇No說嘻嘻"
Else
    MsgBox "選擇取消,不說話"
End If

'這個地方需要注意select case語句的執行與其他語言的不一致的地方
Select Case nSelect
    Case vbyes
        MsgBox "選擇Yes哈哈"
    Case vbno
        MsgBox "選擇No說嘻嘻"
    Case vbcancel 
        MsgBox "選擇取消,不說話"
    Case Else
        MsgBox "不正確的選擇"
End Select
    

 
'迴圈
'迴圈共有四種形式
'1、 for..... next
'2、 do....loop、
'3、 while....wend


'for 迴圈
'for 迴圈有兩種形式
'1、for...next
'2、for each .....next

'for...next
'for....next迴圈主要用於迴圈次數明確的迴圈應用,例如列印斐波那契數列
'的前多少項
Dim nStart
Dim nSecond 
Dim nLoop
Dim strMsg
Dim nTemp

'斐波那契數列的開始兩項
nStart = 1
nSecond = 1
strMsg = nStart & vbNewLine & nSecond

'計算斐波那契數列的第3-30項
For nLoop = 2 To 30
    nTemp = nSecond
    nSecond = nSecond + nStart
    nStart = nTemp
    strMsg = strMsg & vbNewLine & nSecond
Next
MsgBox strMsg

'for each.....next迴圈 
'for each....next迴圈是用來遍歷集合中所有元素的一種特定的迴圈結構
'通過這個迴圈來實現對迴圈次數不確定的情況進行遍歷
'使用for each....next迴圈需要使用關鍵字in, in表示在集合中訪問元素
'同樣需要使用一個迴圈控制變數,在迴圈中這個迴圈變數代表的就是集合中的元素
'但是這個變數在使用完畢之後,迴圈變數就 objLoop = empty 
'如果要再使用必須重新賦值
Dim objFSO
Dim objFolder
Dim objLoop
Dim strFileName

Set objFso=CreateObject("Scripting.FileSystemObject")
Set objFolder= objFSO.GetFolder("D:\01_vbs")
For Each objLoop In objFolder.Files
    strFileName =strFileName & objLoop.Name & vbCrLf
    'MsgBox "我是迴圈變數,我的值為:" & objLoop
Next
MsgBox strFileName

'下面的語句檢測objLoop變數在迴圈結束後的值
If IsEmpty(objLoop) Then
    MsgBox  "已經設定為empty"
ElseIf IsNull(objLoop) then
    MsgBox  "已經設定為空"
Else
    MsgBox "未知結果"
End If

'for each....next 迴圈還可以用來遍歷陣列
'注意新的指令碼直譯器對於陣列維數的定義,這裡5表示下標最大為5,但是開始
'是從0,所以有6個元素
Dim nArrayName(5)

nArrayName(0) = 1
nArrayName(1) = 2
nArrayName(2) = 3
nArrayName(3) = 4
nArrayName(4) = 5
nArrayName(5) = 6

For Each nLoop In nArrayName 
    MsgBox nLoop
Next

MsgBox "遍歷後,nLoop的值為:" & nLoop

 

 

 

    在使用For Each...next 語句的時候,要注意迴圈變數的值,在迴圈結束後已經自動的被設定

為Empty,如果這個時候訪問的話必須再次賦值,否則就會出錯,如下圖所示:

  迴圈變數在迴圈結束後被設定為 Empty。

三、Tips

1、分支結構不要巢狀太深

2、迴圈結構知道次數的一半用For語句

3、陣列、集合遍歷可以使用For each...next語句。

 

--------------------------------------------------------------分割線---------------------------------------------------------------

1、文章均為個人原創,歡迎轉載,轉載請保留出處:https://www.cnblogs.com/volcanol/

2、獲取工控PLC、變頻器、HMI、計算機、Windows、Linux、嵌入式資料點選:獲取資料

3、如果您覺得文章對您有幫助可轉至頁面上半部分打賞,或移步:打賞 

4、或者在頁面右下角點推薦喲!!!

--------------------------------------------------------------分割線---------------------------------------------------------------