background image

    CloseFile
End Sub

---- 

 

二、替换单元类

----   做为一个通用的工具,我们现在并不知道要将什么替换为什么,这些信息是要在使用者使用时告诉程
序的,这就需要将各种替换任务进行参数化,用最简单明确的方式描述出来。这里我们实现的个替换单元类

reUnit

 

),用它来接受参数并完成替换任务。

---- 

 

  1、替换条件的描述及初始化

---- 

  为了能在一次处理中,实现多种替换,定义一个 替换单元 类:

reUnit,来承担主要的替换任务。这

 

个类中定义了替换的条件:

Dim headChr As String

'启始符

Dim tailChr As String

'结束符

Dim reStr As String

'替换为

Dim mapObj as Object

'映射对象

----   通过上面三个变量来描述替换条件:headChr 和 tailChr 代表检索的起点和终点,当 tailChr 为零
长时,表示只对某字符串进行替换。

reStr 是替换后的字符串,为零长时即表示清除。该类用下面两个函数来设

 

置上面的三个变量:

Public Sub Init(ByVal S As String)

    headChr = EscStr(StrHead(S, ","))
    tailChr = EscStr(StrHead(S, ","))

    reStr = EscStr(S)
    If Left(reStr,1)="@" Then

'第一个字符是"@",它所代表的是一个映射类
Set mapObj = CreateObject(Mid(reStr,2))

    End If
End Sub

Private Function EscStr(ByVal S As String) As String

    Dim h As Long
    EscStr = ""

    Do While Len(S) > 0
        EscStr = EscStr & StrHead(S, "&")

        If Len(S) > 0 Then
            h = "&H" & StrHead(S, ";")

            EscStr = EscStr & Chr(h)
        End If

    Loop
End Function

----   函数 Init 接受一个字符串 S

” “

,其中应包含 起点 、 终点 和替换后的字符串,他们之间用逗号分隔。

为了能将非键盘字符加入其中,可以用

&HHHH;”的形式将任意字符插入其间,HHHH 表示一个十六进制数,通过

EscStr

 

函数来完成这种替代。

----   这里需要说明的是,类中定义了一个 mapObj

变量,它是为了实现 特殊标识符之间的文字按照某种规

律进行转换 而设计的。因为这种规律性现在我们并不知道,我们只能在这里为今后留下的个接口,假设一个类实

 

现了某种规律的映射,并通过下面这样的函数来提供这种映射:

Public Function Map(Byval ss as String) as String

----   我们规定,如果 reStr 的第一个字符是"@"的话,它所代表的就不是一直接替换为的字符串,而是的
个映射类的标识名,我们将通过

CreateObject 函数来建立这个对象,在替换时调用它的 Map

 

函数。

---- 

 

  2、替换函数

----   该类的 Replice 函数完成对字符串的替换任务,由于是对文件中的数据以一行为单位依次调用该函数

” “

 

的,所以要考虑到 起点 与 终点 不在同一行上的情况,所以首先定义一个标记变量: