[英]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中提供的各種常量類別,以及每個常量的簡要說明(帶有示例):
vbRed
, vbCyan
,...)。 vbBinaryCompare
, vbTextCompare
)。 vbFriday
,...)。 vbLongDate
, vbShortTime
,...)。 vbOKOnly
, vbOK
,...)。 vbTab
, vbNewLine
等)。 vbNull
, vbDate
,...)。 vbObjectError
)。 遺憾的是, VBScript
不使用枚舉常量(即,如typedef enum BrowserNavConstants
預定義數據結構,例如navOpenInNewWindow
, navOpenInNewTab
等):您必須(更好地)在代碼中明確定義它們:
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.