第一章 编程快速入门

变量是一断预留用于储存数据的计算机内存。内存是临时的(不像硬盘),内存都有独一无二的地址。不同类型的变量需要的内存数量不同。

自顶向下程序设计:适合面向任务的脚本中自顶向下的设计比较合适。代码从头到尾一行一行执行。

事件驱动程序设计:代码只有在某个特定事件发生时才会被执行。Windows程序/web编程都是基于事件驱动模型写的。

自顶向下和事件驱动结合程序设计。

编程习惯:不要再对个任务中使用同一个变量。

第二章 VBS是什么?

VBS 是VB的子集。

VBS是解释性语言,没有被编译。编译意味着代码(如C++)在交付前编译为扩展名为.exe的可执行文件。

第三章 数据类型 data type

1. 语言分类:

1.1强类型语言(strongly typed language):要求事先声明变量,还要声明数据类型。比如编译型语言。

1.2弱类型语言 (loosely typed language): 不需要声明变量的数据类型。比如脚本语言,含vbs。

2.运行流程:

普通文本中编写代码à执行脚本文件à脚本在运行时引擎(runtime engine)在程序运行时编译代码à程序运行。

3.程序员的要求:实现需求,没有bug,遗留代码方便别人理解阅读。

4.VBS中唯一的数据类型:Variant.

但是它有很多子类型:比如String, Date, Boolean等。

5. 两种方式更改变量的子类型:

隐式更改(implicit type coercion):隐式更改发生在被赋值之前。在被赋的值赋到这个变量前,vbs引擎使用本身的逻辑检查这个新值并确定应该具有的子类型。

显式更改:对子类型的精细的控制。可用类型转换函数(conversion function)来完成。

6. Vbs中VarType()返回值等价的具名常量(namedconstant),比如vbString常量是8

If VarType(variable)=vbString Then  或者IfVarType(variable)=8 Then

7.匈牙利表示法(Hungarian notation)的变量前缀,比如(var-variant;str-string; int-integer; lng-long; byt-byte; sng-single; dbl-double;cur-currency; obj-object; boll-bollean)。Var 一般用于不知道放什么类型,或变量的类型会变。

8. Date类型: Var = #5/16/99#           (##)

String类型:Var =  “str”          (“”)

9.Is函数来检验是不是特定的数据类型;比如 检查是不是数字:

If IsNumeric(IngAge) Then

10. If NOT lsNumberic(lngAge) Then  等同与

If lsNumberic(lngAge) = False Then

11.隐式转换:比如 3 & “str”      “3str”            (转换为string,不要用+)

“3” + 5 8         (转换为数字类型,应该是double)

12. 使用+和&的原则:

12.1 只有对数字进行数字运算时才使用+操作符;

12.2 坚持用&操作符连接字符串;

12.3 不要用+操作符连接字符串;

13.数据类型和值一样:Empty和Null。

一个变量Variant声明没赋值,它就是子类型Empty.

Null表示变量中没有合适的值或未知值。当一个变量只有在将Null赋给它之后,它的值和子类型才是Null。不能用(If var = Null Then)来验证是不是Null,因为Null和Null不可比,只能用IsNull(var)函数。

区别:Empty是隐式的,而Null是显式的。

处理:空字符串和Null连接在一起,结果就是空字符串。所以对取数据库值的最好处理方式:

strName = “”+rxCustomers.Fields(“Name”).value

14.含有Object子类型:含有对象引用的变量。对象有属性和方法。类通常是组件的一部分。

生成object: Set obj =WScript.CreateObject(“Scripting.FileSystemObject”)

Nothing 是一个特殊的值,只针对Object变量。如果这个变量对象被销毁或者还没有被初始化,它就是值为Nothing的变量。

销毁对象: Set obj = Nothing

因为对象的变量耗很大的内存。养成习惯,对象用完就要设为 Nothing.

15.数组: 比如 Dim avar(2,4)   三行五列!!!

动态的数组: Dim avar()

ReDim Preserve avar(2,0)

ReDim Preserve avar(2,1)

注意: Preserve关键字只能改变数组最后一个维度的大小,否则会有一个运行的大小。所以使用二维数组,最好把第一维视为列,第二维视为行来设计你的数组。

数组的遍历:Ubound(arrName,2) 函数来统计行数,2代表2维数组。再用for循环遍历。

清除数组:对于静态数组,数组元素的数据会被清除,但元素本身依然存在。但对于动态数组,Erase语句会彻底释放占用的内存,数据和元素都会被销毁。

例:    Erase arrayName

16. 匈牙利表示法的变量前缀:

var :variant

str :string

int :integer

lng :long

byt :byte

sng : single

dbl : double

cur : currency

obj : object

bln\bool : boolean

其他编码规范:

常量:全部大写或con前缀;

数组:字母a或arr的前缀;

第四章 变量与过程

1. 变量不是必须声明的。比如

lngFirst = 1

lngSecond = 2

lngThird = lngFirst + lgnSecond

这里三个变量都没有声明,但都可以用。但是有这个可能,你把lngSecond写成了lgnSecond,程序默认它是第四个变量,赋值为0。所以lngThird是1。

2. 但是如果要求都是显式声明,在所有的代码前加上Option Explicit 语句,养成习惯

例: Option Explicit

3. 变量命名规则:首字符为字母,其他非首字符可以是字母,数字,下划线。

必备的技术: 匈牙利命名原则”

4. 函数有返回值,过程没有返回值。

过程用Sub开始(“subprocedure”的缩写)。语法:

[Public| private] Sub name ([arg1],[arg2])

[Codeinside the procedure]

EndSub

关键字Public | private只有在类内部才使用。但是.vbs文件是个孤岛(在Windows脚本宿主文件),其他脚本无法访问内部的代码。

命名尽量用动词-名词结合,比如:ProcessOrder. 参数可有可无。

函数唯一的区别就是把关键字改为Function. 最后一点说明:不能声明函数返回值的类型。

对函数名也使用匈牙利类型前缀:例如,GetUserName()可以命名为strGetUserName()。

5. 调用过程的两种方法:

è GetsubOrFun “arg”

è Call GetsubOrFun (“arg”)

没有call不能用括号,有call一定要用括号。

表4-1 调用过程的合法方式

调用过程的非法方式

GreetUser "Bill"

GreetUser("Bill")

Call GreetUser("Bill")

Call GreetUser "Bill"

6.调用函数的三种方式:

à lngSum=AddNumber(10,20)

àCallAddNumber(10,20)

à AddNumber 10,20

表4-2 调用函数的合法方式

调用函数的不合法方式

备 注

lngSum = AddNumbers(10, 20)

lngSum = AddNumbers 10, 20

要获得函数的返回值,就不能用Call关键字,并且一定要将参数放在圆括号中。没有圆括号是非法的

Call AddNumbers (10, 20)

lngSum = Call AddNumbers (10, 20)

如果不需要接收函数的返回值则可以使用Call关键字,但是必须使用圆括号。在接收返回值时用Call关键字是非法的

AddNumbers 10, 20

AddNumbers (10, 20)

可以同时忽略Call关键字和返回值,但这样也必须忽略圆括号

过程和函数可以有可选参数(optional argument)。但是您自己用VBScript编写的过程和函数不能有可选参数。

7.内建的“具名常量”,就象值固定的变量。比如vbYesNo

MsgBox(“Hello”,vbYesNo)

8.退出过程或函数,除非在复杂情况下遇到逻辑终止点,否则不推荐使用。

Exit Sub

Exit Function

9.一个过程里的过程级变量数量<=127;一个脚本中脚本级变量数量<=127. 。如果您确实有那么多数据,可以考虑将它们组织成类,每一个类可以有多个属性。

变量的三种作用域:

9.1脚本级(Script-level):在整个脚本文件的代码都有效。

9.2过程级(procedure-level):变量在过程或函数中有效。局部变量。

9.3类级(class-level):在Class … End Class中定义。类中用private语句声明的变量就是类级的作用域。

三种语句声明变量:Dim;Private;Public.

Dim

Private

Public

Script-level(三者一样效果)

yes

Yes

yes

Procedure-level

yes

Class-level

Yes = public

Yes

yes

。这里有一个要时刻记住的重要原则:必须要尽可能地限制变量的生存期和作用域。因为变量会消耗内存,;限制作用域可以减少程序的错误,并提高代码的可理解性和可维护性。只要遵守模块化的良好原则,设计优良的过程和函数自然就会处理好作用域和生存期问题—— 无需任何额外的努力。

10.函数传参: 传址(by reference) 和 传值(by value), 关键字是ByRef 和ByVal,而ByRef是默认的。大部分时候(基本上可以说是几乎所有时候),都会用ByVal处理过程和函数的参数。但是在您确实需要ByRef之前最好还是坚持使用ByVal。

传址是永久地修改变量的值;传值只在过程中的代码里临时修改这个参数。

比如: Dim lngA, lngB

lngA = 1

lngB = 1

ByRefByVal lngA, lngB

Sub  ByRefByVal(ByRef lngA, ByVal lngB)

lngA = lngA + 1

lngB = lngB + 1

End Sub

结果是 lngA=2 ; lngB =1; 因为过程中的改变不影响外面的lngB变量没有修改。

11. 两种常量:文字常量 和具名常量(关键字 Const)

比如: Const GREETING = “Hello”

这里 “Hello”是文字常量,GREETING是具名常量,使用效果是一样的。一般具名常量的命名全是大写字母。,常量名称中的不同单词是以下划线(_)分割的,跟变量一样,具名常量也有作用域。但不能用Dim语句声明常量,而是用Private和Public加上Const语句。

系统自带的内建常量:很多以vb前缀来识别。比如vbExclamation

MsgBox “Hello”,vbExclamation

第五章 流程控制 control of flow

大部分人都很难理解超过三重或四重的嵌套.

分支:

If… ElseIf…Else…EndIf

Selectcase…case …case else…End Select

循环:

For… Next\For Each ..Next

Do…Loop While (或者while在前):只有在While语句中的表达式为True时循环才会再次执行

Do…Loop Until  (或者Until在前): 反复执行一段语句,直到(until)某一条件为True。

尽管While和Until语句有些不同,但是它们的功能是一样的。

可以用Exit Do随时跳出Do循环。

While…Wend有点过时,但是能读懂别人代码中的用法。While…Wend最主要的限制就是它没有等价于Exit For或Exit Do的语句,这意味着不能强行跳出循环。

第六章 错误处理 exception handling

看函数文档有哪些可能的错误并防止;多测试;搜索答案;

1. 三种错误:

语法错误(Syntax error):编译错误,结果终止脚本的执行;比如缺关键字,无法识别的表达式;

运行错误(Runtime error): 运行时错误,最常见。引擎认为语法正确,但运行失败。比如 Option Explicit 引起有关的错误, 不是编译错误是运行错误。

逻辑错误(Logic error): 隐藏的错误,运行每问题,但结果不对。

2. 错误处理:向用户显式错误,记入到文件里,邮件或其他方式通知等;

3.错误对象: Err 对象:有属性 Number(错误代码行数),Source(错误信息),HelpFile, HelpContext和方法Clear(清楚所有属性), Raise(生成自定义的运行时错误);

4.自己处理异常:

捕获错误的三个步骤:在可能错误代码前加On ErrorResume Next;在错误代码后立即检查Err.Number的值,If Err.Number>0 Then 处理代码;最后重启错误机制On Error Go To0。

4.1忽略错误语句,把所有错误忽略:

OnError Resume Next

重新启动错误处理机制:

OnError Go To 0

所以要处理异常,就在这两句话之间加上你要处理的代码。一般用 If Err.Number <>0 来处理。

比如可以用WScript.Quit命令来终止脚本且清空资源。可以多用一些OnError Go To 0

来防止一些分支没有启动这个机制。

4.2自定义错误:比如

Err.Raise vbObjectError+10000, “source:MyScript.MyFunction”, “errorinformation”

Err.Raise()方法,第一个参数在错误代码前加上vbObjectError,避免和微软官方错误代码冲突。

第二个参数是错误的来源。

第三个参数是错误描述。

第九章 正则表达式

强大的字符匹配和替换功能。VBS并不支持正则表达式常量(如 /apattern/),而是将文本字符串赋给RegExp对象的Pattern属性。

1.1步骤 --示例: Dim re, s

新建一个正则表达式对象: Set re = New RegExp

设置对象的关键属性: re.Pattern = “Frank”

要搜索的字符串:  s = “Frank is anice man”

查找和替换功能: re.Replace(s,”He”)

2.RegExp对象是提供正则表达式的对象。

属性

Global  (值为True, False)

默认值为False.

是Ture才会对整个字符串进行查找,否则你最多只能找到一个结果。

e.g. re.Gloal = ture

IgnoreCase (值为True, False)

默认值为False. 大小写敏感。

Pattern

正则表达式 e.g. re.Pattern = “Frank”

方法

Execute (值为需要搜索的字符串)

将正则表达式应用到字符串,并返回Matches集合。检验一个空集会if re.Execute(s).count=0 。e.g.

Set re = new RegExp

Re.Pattern = “\w”

s = “string”

Set colMatches = re.Execute(s)

For Each match In colMatches

Msgbox match.value

Next

Replace(值为需要搜索的字符串,代替的字符串)

替换在正则表达式搜索中找到的文本。e.g.

Set re = new RegExp

Re.Pattern = “\w”

re.Replace(string, str)

Test(值为需要搜索的字符串)

判断是否存在正则表达式搜索中找到的文本结果。返回布尔值。e.g.

Set re = new RegExp

Re.Pattern = “\w”

If Then re.Test(s) Then

Matches集合和Match对象

Execute方法返回这个Matches集合(Match对象的集合),属性是只读的。

SetcolMatches = re.Execute(s)

属性一:返回集合的元素数量: MsgBox colMatches.count

属性二: Item根据制定的键返回元素: MsgBoxcolMatches.item(0)

一个正则表达式执行,会产生0个或多个Match对象。每个对象有三个只读的属性:搜索找到的字符串;字符串长度;找到该匹配位置的索引。

ForEach objMatch in colMatches

Next

属性一:搜索找到的字符串objMatch.FirstIndex

属性二:字符串长度 objMatch.Length

属性三:找到该匹配位置的索引objMatch.Value

3.正则表达式字符: 大写的字符和小写的字符作用相反:

e.g.        \b 匹配一个单词边界,

\B匹配一个非单词边界。

非数字: re.Pattern = “[\D]”

三种特殊字符用于锚定模式:输入开头(在[]外使用^),输入的结尾($)或是单词边界(\b).

缩短模式的方法就是重复数: e.g.      re.Pattern =”\d{3}”   三个数字。

指定匹配范围或次数:

一次以上: re.Pattern = “\d+”

0次或多次:re.Pattern = “\d*”

0次或者1次:re.Pattern = “\d?”

4.一些例子:

匹配空白: “^[ \t]*$”

Sometips:

1.

vbCrLf  回车/换行组合符。

vbCr        回车符。

vbLf  换行符。

所以不同的平台对于“换行符”都有一种约定
windows平台是vbCrLf                         UNIX/Linux系统是vbLf                        苹果系统是vbCr

“windows平台是vbCrLf”,这并不是说Windows下的程序遇到vbCr或者vbLf就一定无法正常显示。有的程序不能正常显示,比如记事本.

2.   All characters:

' all the upper case character

For i = 65 To 90

x = "" &x &chr(i)

Next

Msgbox x

' all the lower case character

For j = 97 To 121

y = ""& y & chr(j)

Next

msgbox y

第七章:脚本运行时对象:

存在于单独的组件中,和VBS解释器是分开的。

创建与销毁对象:

Set objDict = CreateObject(“Scripting.Dictionary”)

Set objDict = Nothing

字典对象:

三种不同的添加方法以及exsit方法:

Set objDict = CreateObject(“Scripting.Dictionary”)

objDict.Add “1234”, “Cat”

objDict.Item(“1234”)= “Cat”

objDict(“1234”)= “Cat”

If objDict.Exisit(“1234”) Then

FileSystemObject库:文件和文件夹的操作

FSO对象模型:

·      FileSystemObject

·      Drive

·      Drives

·      File

·      Files

·      Folder

·      Floders

·      TextStream

可以做这样的操作

VBScript 程序员参考手册 读书笔记01-07相关推荐

  1. 高效能程序员的修炼 --读书笔记

    高效能程序员的修炼 –读书笔记 这是我读完Jeff Atwood的<高效能程序员的修炼>这本书后的一些回顾, 我会根据这本书的章节依次写下对每章节的理解和认识. 高效能程序员的修炼 读书笔 ...

  2. 《高效能程序员修炼》读书笔记

    读到这本书的时候也已经入行了,书中提到程序员所渴望的东西,我一下子陷入沉默.这个问题刚开始看觉得有些可笑,但是慢慢想发现这个问题如果不想明白这辈子就稀里糊涂的做增删改查吗? 谈梦想不仅仅是小孩子的专利 ...

  3. 程序员的数学读书笔记(全)

    https://www.jianshu.com/p/28a8e58f37aa 第1章 0的故事 计数法分为按位计数法和罗马计数法 按位计数法常用的有2进制.8进制.10进制.16进制等几种. 理论上多 ...

  4. 《程序员羊皮卷》---- 读书笔记

    张大志著 书有历史了,在我上大学的时候,雷总就看了这本书.如果能在上学期间就接触到书中关于工作选择的内容,那么就可以早早的有的放矢,成为企业需要的人才,并且最重要的是避免被企业忽悠!. 内容主要看了职 ...

  5. 程序员面试宝典学习笔记01

    2019年9月15日,开始了程序员求职路上的第一步--刷题+恶补基础.各种原因导致我一直想要开始却一直延后.现在开始不知道是不是晚了,但不试试一定是没希望的.作为一个学生,别的不敢说,学习能力绝对没问 ...

  6. 程序员的修养--读书笔记

    第一章 温故而知新 -- cpu.内存.显示设备.io设备早期都链接在一个总线上.后来出现了北桥芯片使得cpu,内存和高速的图形设备能够高速的交换数据.南桥芯片处理低速设备,比如磁盘,usb,键盘,鼠 ...

  7. Star Schema完全参考手册读书笔记二

    本博客继续就书中的一些术语和概念进行总结. 数据仓库体系结构 数据仓库描述任何包含分析型数据库的解决方案,包括独立型数据集市.该术语并不表示一个中心或集成仓库. 企业数据仓库指的是企业信息化工厂的中央 ...

  8. Star Schema完全参考手册读书笔记八

    本博客主要对书中横向钻取进行归纳总结. 横向钻取: 与对数据的上钻或下钻操作无关,它描述的是跨越一个星型模式到另外一个星型模式的步骤.该术语意在描述跨多个过程. 尽管横向钻取操作通常被称为横向钻取查询 ...

  9. Star Schema完全参考手册读书笔记五

    本博客就第三章缓慢变化维和多维数据集的有关知识进行总结. 缓慢变化维 采用维度设计方案时,确定数据源的变化情况在维度表中如何表示非常重要.这一现象称为缓慢变化的维度,简称缓慢变化维.该术语的名称反映了 ...

  10. Star Schema完全参考手册读书笔记四

    本博客主要内容为对书中第三章事实表特性的知识的总结. 事实表特性主要包括粒度.可加性.稀疏性和退化维. 事实表特性 事实分为可加事实,半可加事实和非可加事实. 每个事实表通过获取描述业务过程的度量来表 ...

最新文章

  1. Quartz学习笔记
  2. 在主界面的右下端设置系统时间
  3. jqGrid,REST,AJAX和Spring MVC集成
  4. CDU集训代码:基础算法和数据结构2
  5. JVM专题之类加载机制
  6. UI素材实用模板|2.5D等距风格插画专辑
  7. C/C++内存问题检查利器—Purify (二)
  8. artemis服务_artemis小结
  9. element-ui本地使用
  10. php插入mp3,PHP网站插入音乐
  11. AI人工智能仿写在线v.1.2.3
  12. 如何将文件PDF格式转换成Word格式
  13. PHP防范XSS攻击
  14. 蛋花花:人类与“人工智能”相比,人类还有优势吗
  15. AxureRP9 主功能界面
  16. github python100天_GitHub - 1814931012/Python-100-Days: Python - 100天从新手到大师
  17. 输入一个数n,然后打印出2的n次方
  18. 软考中级哪个科目比较容易考?
  19. 浏览器主页被360/2345等劫持
  20. 二叉树的ZigZag打印-Java

热门文章

  1. python拓展包之pymoo使用方法:多目标优化(NSGA2)
  2. SQL语句之正则表达式
  3. 数据可视化分析工具评测: DataEase (开源新贵)VS.帆软 FineBI(老牌产品)
  4. linux 中文字体 推荐,适合阅读的中文字体
  5. 华为扩大内存代码_荣耀手机扩大内存代码_华为手机内存扩大拨号代码
  6. 使用MATLAB进行图像处理——显示图像的灰度直方图并进行对比度增强
  7. NSIS打包工具用法介绍与NSIS相关软件下载
  8. (笔记)涉及到的WinAPI函数
  9. 七月算法机器学习笔记2--机器学习中的数学之矩阵分析与应用
  10. 【正点原子探索者STM32F407开发板例程连载+教学】第44章 FATFS文件系统实验