簡體   English   中英

使用VBScript讀取txt文件時,為什么要使用Const conForReading?

[英]When reading a txt file with VBScript, why do we use Const conForReading?

我注意到其他人在其他代碼中使用了ForReading而不是conForReading,但是我嘗試了,但它們似乎不可互換。 兩者有什么區別? 我是VBScript的新手,很抱歉,這是一個明顯的問題。 我在以下使用它:

Option Explicit

Const conForReading = 1;
'Declare variables
Dim objFSO, objReadFile, contents

'Set Objects
Set objFSO = CreateObject("Scripting.FileSystemObject")
Set objReadFile = objFSO.OpenTextFile("C:\Users\ali\Desktop\Tests\ToRead.txt",1, False)

感謝您的澄清,謝謝。

常數提供了使用特定值(而不是其文字值)的便捷方法,而無需實際記住值本身。 使用常量還可以使您的代碼更具可讀性和可維護性。

VBScript中已經定義了一些常量,您無需在代碼中顯式聲明它們。 只需使用它們代替它們所代表的值即可。 這是VBScript中提供的各種常量類別,以及每個常量的簡要說明(帶有示例):

  • 顏色常量:可以在腳本中使用的八種基本顏色(例如vbRedvbCyan ,...)。
  • 比較常量:用於比較字符串( vbBinaryComparevbTextCompare )。
  • 日期和時間常數:由各種日期和時間函數使用( vbFriday ,...)。
  • 日期格式常量:用於格式化日期和時間( vbLongDatevbShortTime ,...)。
  • MsgBox常數:在MsgBox函數中用於描述按鈕的可見性,標簽,行為和返回值( vbOKOnlyvbOK ,...)。
  • 字符串常量:在字符串操作中使用的各種不可打印字符( vbTabvbNewLine等)。
  • 三態常數:與格式化數字的函數一起使用。
  • VarType常量:各種Variant子類型( vbNullvbDate ,...)。
  • 不能方便地歸入任何其他類別的其他常量( vbObjectError )。

遺憾的是, VBScript不使用枚舉常量(即,如typedef enum BrowserNavConstants預定義數據結構,例如navOpenInNewWindownavOpenInNewTab等):您必須(更好地)在代碼中明確定義它們:

Const navOpenInNewWindow=&h01, navOpenInNewTab=&h0800

或(更糟糕)使用數字文字值( &h01&h0800 ,...)代替常量名稱...

最終,您可以定義自己的常量,並根據需要命名它們:

'various useful constants
Const ForReading = 1, ForWriting = 2, ForAppending = 8
Const OpenAsDefault = -2  ' Opens the file using the system default.
Const OpenAsUnicode = -1  ' Opens the file as Unicode.
Const OpenAsUSAscii =  0  ' Opens the file as ASCII.
Const DontCreate =  False ' do not create a new file if doesn't exist
Const CreateFile =  True  ' create a new file if the specified filename doesn't exist

Const RabbitEars = """"

'Registry Data Types and Corresponding Values'
Const _
REG_NONE      = 0 , _
REG_SZ        = 1 , _
REG_EXPAND_SZ = 2 , _
REG_BINARY    = 3 , _
REG_DWORD     = 4 , _
REG_MULTI_SZ  = 7

'Registry Subtrees and Corresponding Hexadecimal Values'
Const _
HKEY_CLASSES_ROOT   = &H80000000 , _
HKEY_CURRENT_USER   = &H80000001 , _
HKEY_LOCAL_MACHINE  = &H80000002 , _
HKEY_USERS          = &H80000003 , _
HKEY_CURRENT_CONFIG = &H80000005 , _
HKEY_DYN_DATA       = &H80000006

'Abbreviated names for Registry Subtrees
Const HKCR = &H80000000 'HKEY_CLASSES_ROOT
Const HKCU = &H80000001 'HKEY_CURRENT_USER
Const HKLM = &H80000002 'HKEY_LOCAL_MACHINE
Const HKUS = &H80000003 'HKEY_USERS
Const HKCC = &H80000005 'HKEY_CURRENT_CONFIG
Const HKDD = &H80000006 'HKEY_DYN_DATA

OpenTextFile方法支持多個修飾符,以實現不同的目標。 第二個參數稱為“ iomode”,它指定是讀取文件,覆蓋文件還是附加文件。 由於vbscript中沒有枚舉類型,因此可以通過整數來區分。 如您在函數文檔中所見。

1 means read
2 means write
8 means append

從程序的角度來看,將1,2和8編寫為參數是完全可以的,但這對人類來說還是有點問題。 如果您閱讀其他人的代碼(或者稍后再讀自己的代碼),您只會看到

... OpenTextFile( "....", 1, ...)

您可能並不真正知道1在那意味着什么。 因此,人們認為最好為名為ForReading的變量定義一個變量,這只會使代碼更易於理解。 如果這樣做,您可以編寫:

... OpenTextFile( "....", ForReading, ...) 

並立即知道發生了什么,盡管代碼對於解釋器保持不變。 現在,正如JosefZ所指出的,已經有一些預定義的常數,但是這3個不在其中。 因此,您可以自己定義它們(也可以在我鏈接的msdn頁面的示例中看到)

之所以使用常量而不是變量,是為了防止在意外更改那些值的情況下發生編程錯誤。 “ ForReading”不為1永遠都沒有意義,因此,如果您嘗試更改該值,腳本引擎將向您發出警告。

現在,有些人遵循所有以“ con”開頭的約定來標記其常量,以便他們可以輕松地在代碼中識別它們。

這基本上就是為什么有ForReading和conForReading的原因。 但是是一樣的。 您可以調用它,但是您想要的重要一點是它具有值1並使用定義的值。 如果在腳本中定義conForReading,則不能在函數調用中使用ForReading。

其他人也總是定義3個常數

Const ForReading = 1, ForWriting = 2, ForAppending = 3

即使只能使用一個。 這對於初學者可能會造成混淆,因為如果甚至不調用這些常量,就好像需要這些常量。 他們之所以這樣做,可能是因為他們只是復制代碼來復制示例或他們程序的另一個例子,或者是出於完整性的考慮,以便充分記錄該函數中可能使用的內容。 另一個原因可能是,在較大的腳本中,無論如何您可能都需要它們,而且如果一開始就將它們包括在內,則永遠都不會犯一個錯誤而不定義它的錯誤。

至於您的示例代碼:您根本沒有在函數調用中使用常量,因此,如果您忽略它,它甚至不會更改某些內容。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM