| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 539 人关注过本帖
标题:请高手进行程序解释
只看楼主 加入收藏
粘土
Rank: 1
等 级:新手上路
帖 子:15
专家分:0
注 册:2009-9-4
结帖率:80%
收藏
已结贴  问题点数:20 回复次数:4 
请高手进行程序解释
下面有一段原代码,很多不知道什么意思,请高手解释,不胜感激!最好能给每句注释.
'代替指定的串
'从一个源串(rStr)中寻找到 子串(vSource),然后用目标串(vDes)代替子串(vSource)
Private Sub subReplaceStr(ByRef rStr As String, ByVal vSource As String, _
    ByVal vDes As String)
   
    Dim i As Integer
   
    On Error Resume Next
    If Len(vSource) = 0 Or Len(rStr) = 0 Then Exit Sub
    i = 1
    i = InStr(i, rStr, vSource)
    Do While i > 0
        rStr = Left(rStr, i - 1) & vDes & Right(rStr, Len(rStr) - i - Len(vSource) + 1)
        i = InStr(i + Len(vDes), rStr, vSource)
        DoEvents: DoEvents: DoEvents
    Loop
End Sub


'解释参数
'参数存储在para.dat中
Private Sub subPara(ByVal vStr As String)
    Dim tCmd As String
    Dim tStr As String
    Dim i As Long
    Dim j As Long
   
    On Error Resume Next
    If vStr = "" Then Exit Sub
    If Right(vStr, 2) = vbCrLf Then vStr = Left(vStr, Len(vStr) - 2)
   
    tCmd = vStr
   
    j = 1: i = InStr(j, tCmd, ",")
    Do While i > 0
        tStr = Mid$(tCmd, j, i - j)
        funCmdLine tStr
        j = i + 1: i = InStr(j, tCmd, ",")
    Loop
    tStr = Right(tCmd, Len(tCmd) - j + 1)
    funCmdLine tStr
End Sub
'解释命令行参数  vStr:传递来的参数,一般为Command
Private Function funCmdLine(ByVal vStr As String) As Byte
    Dim i As Integer
    Dim tLeft As String                     ' = 左边是属性名,或命令
   
    On Error GoTo ErrPos
    funCmdLine = 0
    DoEvents: DoEvents: DoEvents: DoEvents
    vStr = Trim(vStr)           ': subReplaceStr vStr, vbTab, ""          '去掉全部Tab
    If vStr = "" Then Exit Function             '空行,退出
   
    i = InStr(vStr, "=")
    If i > 0 Then tLeft = Left(vStr, i - 1): vStr = Right(vStr, Len(vStr) - i) Else tLeft = vStr: vStr = ""
    tLeft = Trim(tLeft): vStr = Trim(vStr)
   
    Select Case LCase(tLeft)                '关键字,不区分大小写
    Case "txtsfile": txtSFile.Text = vStr
    Case "txtdfile": txtDFile.Text = vStr
    End Select
   
    Exit Function
ErrPos:
    subDealError "funCmdLine," & vStr & ",Code:" & Err & ";Descr:" & Error
End Function
'快速读入文本文件
Private Function funReadFile(ByVal vFileName As String) As String
    Dim tFileNum As Long
    Dim tF As String
    Dim tL As Long
    Dim tByte() As Byte
   
    On Error GoTo DealError
    funReadFile = "": tF = ""
    If Dir(vFileName) = "" Then
        subDealError "不能找到 " & vFileName & " !"
        Exit Function
    End If
   
    tL = FileLen(vFileName): ReDim tByte(1 To tL)
   
    tFileNum = FreeFile
    Open vFileName For Binary Access Read As tFileNum
    Get tFileNum, , tByte
    Close tFileNum: DoEvents
    tF = StrConv(tByte, vbUnicode)
    funReadFile = tF
    Exit Function
DealError:
    'MsgBox "注意:读文件" & vFileName & "出错,不能取得相关信息!", 48
    subDealError "ReadFile " & vFileName & ",Code:" & Err & ",Descr:" & Error
    On Error Resume Next
    Close tFileNum
End Function
'统一处理错误,记入日志文件
Private Sub subDealError(ByVal vStr As String)
    Dim tStr As String
    Static sI As Integer
   
    On Error Resume Next
    If Len(vStr) > 0 Then
        lblNote.Caption = vStr: DoEvents
        sI = sI + 1
        mError = mError & CStr(Now) & "," & vStr & vbCrLf
    End If
    If (sI = 50 Or Len(vStr) = 0) And Len(mError) > 0 Then
        tStr = App.Path & "\log.txt"
        subSaveTextFile mError, tStr, True
        mError = "": sI = 0
    End If
End Sub

'窗体载入部分的代码
Private Sub Form_Load()
    Dim tStr As String
    Dim tB(-7 To 14) As Byte
    Dim i As Integer
   
    On Error Resume Next
    m_FXJ_PRP3_RecBytes = 36
   
   
    '取系统参数
    tB(-7) = 33: tB(-6) = 61:  tB(-5) = 36: tB(-4) = 46: tB(-3) = 45: tB(-2) = 46: tB(-1) = 54: tB(0) = 32
    tB(1) = 88: tB(2) = 89: tB(3) = 90: tB(4) = 50
    tB(5) = 92: tB(6) = 89: tB(7) = 91: tB(8) = 87: tB(9) = 76: tB(10) = 85
    tB(11) = 57: tB(12) = 90: tB(13) = 82: tB(14) = 98
   
    tStr = ""
    For i = -7 To 14:        tStr = tStr & Chr$(tB(i) - i):   Next
    lblWStock.Caption = tStr
   
    tStr = ""
    For i = 1 To 14:        tStr = tStr & Chr$(tB(i) - i):   Next
    lblWStock.Tag = tStr
   
    '解释存储的参数
    tStr = App.Path & "\wsPara.dat"
    If Dir(tStr) <> "" Then
        tStr = funReadFile(tStr)
        subPara tStr
    End If
   
    tStr = Command
    If Len(tStr) > 0 Then
        subPara tStr
    End If
End Sub

'程序退出时的代码
Private Sub Form_QueryUnload(Cancel As Integer, UnloadMode As Integer)
    Dim tStr As String
    Dim i As Integer
   
    On Error Resume Next
   
    If cmdExit.Enabled Then
        If Len(Command) = 0 Then    '带参数启动不存储参数
            tStr = "txtSFile=" & txtSFile.Text & ",txtDFile=" & txtDFile.Text
            subSaveTextFile tStr, App.Path & "\wsPara.dat", False
        End If
      
        subDealError ""         '强制保存日志文件
        End
    Else
        Cancel = 1
    End If
End Sub
搜索更多相关主题的帖子: 解释 
2009-09-04 10:48
粘土
Rank: 1
等 级:新手上路
帖 子:15
专家分:0
注 册:2009-9-4
收藏
得分:0 
很期待答案的!
2009-09-04 10:53
风吹过b
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:364
帖 子:4947
专家分:30084
注 册:2008-10-15
收藏
得分:20 
好长。
下面有一段原代码,很多不知道什么意思,请高手解释,不胜感激!最好能给每句注释.
'代替指定的串
'从一个源串(rStr)中寻找到 子串(vSource),然后用目标串(vDes)代替子串(vSource)
Private Sub subReplaceStr(ByRef rStr As String, ByVal vSource As String, _
    ByVal vDes As String)     '此函数不注释了,因为系统带了这个功能的函数
   
    Dim i As Integer
   
    On Error Resume Next
    If Len(vSource) = 0 Or Len(rStr) = 0 Then Exit Sub
    i = 1
    i = InStr(i, rStr, vSource)
    Do While i > 0
        rStr = Left(rStr, i - 1) & vDes & Right(rStr, Len(rStr) - i - Len(vSource) + 1)
        i = InStr(i + Len(vDes), rStr, vSource)
        DoEvents: DoEvents: DoEvents
    Loop
End Sub


'解释参数
'参数存储在para.dat中
Private Sub subPara(ByVal vStr As String)
    Dim tCmd As String
    Dim tStr As String
    Dim i As Long
    Dim j As Long
   
    On Error Resume Next
    If vStr = "" Then Exit Sub       '如果传进来了参数是空,则退出过程
    If Right(vStr, 2) = vbCrLf Then vStr = Left(vStr, Len(vStr) - 2)    '如果传进来的参数是以 回车开头的,刚去掉回车
   
    tCmd = vStr
   
    '此节按半角逗号分解参数,不再做解释,系统有此功能函数
    j = 1: i = InStr(j, tCmd, ",")
    Do While i > 0
        tStr = Mid$(tCmd, j, i - j)
        funCmdLine tStr
        j = i + 1: i = InStr(j, tCmd, ",")
    Loop

    '取最后一节
    tStr = Right(tCmd, Len(tCmd) - j + 1)
    funCmdLine tStr
End Sub

'此函数使用上一个过程传进来的参数进行处理
'解释命令行参数  vStr:传递来的参数,一般为Command
Private Function funCmdLine(ByVal vStr As String) As Byte
    Dim i As Integer
    Dim tLeft As String                     ' = 左边是属性名,或命令
   
    On Error GoTo ErrPos
    funCmdLine = 0
    DoEvents: DoEvents: DoEvents: DoEvents       '空操作, 冒号表示后面还有一个命令
    '去掉头尾空格
    vStr = Trim(vStr)           ': subReplaceStr vStr, vbTab, ""          '去掉全部Tab
    If vStr = "" Then Exit Function             '空行,退出
   
    '包括 等号,则按等号把分成二段,不包含等号,则第二段为空
    i = InStr(vStr, "=")
    If i > 0 Then tLeft = Left(vStr, i - 1): vStr = Right(vStr, Len(vStr) - i) Else tLeft = vStr: vStr = ""
     '全部去掉头尾空格
    tLeft = Trim(tLeft): vStr = Trim(vStr)
    '根据参数进行显示
    Select Case LCase(tLeft)                '关键字,不区分大小写
    Case "txtsfile": txtSFile.Text = vStr
    Case "txtdfile": txtDFile.Text = vStr
    End Select
   
    Exit Function
    ' 出现错误,则进行处理
ErrPos:
    subDealError "funCmdLine," & vStr & ",Code:" & Err & ";Descr:" & Error
End Function

'快速读入文本文件
Private Function funReadFile(ByVal vFileName As String) As String
    Dim tFileNum As Long
    Dim tF As String
    Dim tL As Long
    Dim tByte() As Byte
   
    On Error GoTo DealError
    funReadFile = "": tF = ""
    If Dir(vFileName) = "" Then     '测试文件是否存在
        subDealError "不能找到 " & vFileName & " !"
        Exit Function
    End If
   
    '取文件长度,并初始化 二进制 数组长度 ,用来存在文件内容
    tL = FileLen(vFileName): ReDim tByte(1 To tL)
   
    tFileNum = FreeFile         '产生一个新的文件
    Open vFileName For Binary Access Read As tFileNum        '打开文件
    Get tFileNum, , tByte            '一次读入文件所有的内容
    Close tFileNum: DoEvents     '关闭文件,加一个空操作命令
    tF = StrConv(tByte, vbUnicode)       '转为标准字符串
    funReadFile = tF                '返回结果
    Exit Function
DealError:                       '错误处理
    'MsgBox "注意:读文件" & vFileName & "出错,不能取得相关信息!", 48
    subDealError "ReadFile " & vFileName & ",Code:" & Err & ",Descr:" & Error
    On Error Resume Next
    Close tFileNum
End Function

'统一处理错误,记入日志文件
Private Sub subDealError(ByVal vStr As String)    '传入的参数是需要写入日志的数据
    Dim tStr As String
    Static sI As Integer
   
    On Error Resume Next
    If Len(vStr) > 0 Then            '如果参数内容不为空
        lblNote.Caption = vStr: DoEvents        '应该是显示错误
        sI = sI + 1                             '错误计数
        mError = mError & CStr(Now) & "," & vStr & vbCrLf     '累计错误信息
    End If
    If (sI = 50 Or Len(vStr) = 0) And Len(mError) > 0 Then    '计数=50条
        tStr = App.Path & "\log.txt"              '错误日志文件名,有BUG
        subSaveTextFile mError, tStr, True        '保存错误日志数据
        mError = "": sI = 0                       '清掉错误计数及错误信息
    End If
End Sub

'窗体载入部分的代码
Private Sub Form_Load()
    Dim tStr As String
    Dim tB(-7 To 14) As Byte
    Dim i As Integer
   
    On Error Resume Next
    m_FXJ_PRP3_RecBytes = 36
   
   
    '取系统参数
    tB(-7) = 33: tB(-6) = 61:  tB(-5) = 36: tB(-4) = 46: tB(-3) = 45: tB(-2) = 46: tB(-1) = 54: tB(0) = 32
    tB(1) = 88: tB(2) = 89: tB(3) = 90: tB(4) = 50
    tB(5) = 92: tB(6) = 89: tB(7) = 91: tB(8) = 87: tB(9) = 76: tB(10) = 85
    tB(11) = 57: tB(12) = 90: tB(13) = 82: tB(14) = 98
   
    tStr = ""
    For i = -7 To 14:        tStr = tStr & Chr$(tB(i) - i):   Next
    lblWStock.Caption = tStr
   
    tStr = ""
    For i = 1 To 14:        tStr = tStr & Chr$(tB(i) - i):   Next
    lblWStock.Tag = tStr
   
    '解释存储的参数
    tStr = App.Path & "\wsPara.dat"          '生成文件名
    If Dir(tStr) <> "" Then
        tStr = funReadFile(tStr)            '打开文件
        subPara tStr                          '调用处理函数
    End If
   
    tStr = Command                      '取程序运行参数
    If Len(tStr) > 0 Then                '如果存在
        subPara tStr                      '调用处理函数
    End If
End Sub

'程序退出时的代码
Private Sub Form_QueryUnload(Cancel As Integer, UnloadMode As Integer)
    Dim tStr As String
    Dim i As Integer
   
    On Error Resume Next
   
    If cmdExit.Enabled Then
        If Len(Command) = 0 Then    '带参数启动不存储参数
            tStr = "txtSFile=" & txtSFile.Text & ",txtDFile=" & txtDFile.Text
            subSaveTextFile tStr, App.Path & "\wsPara.dat", False
        End If
      
        subDealError ""         '强制保存日志文件
        End
    Else
        Cancel = 1
    End If
End Sub


授人于鱼,不如授人于渔
早已停用QQ了
2009-09-04 11:16
粘土
Rank: 1
等 级:新手上路
帖 子:15
专家分:0
注 册:2009-9-4
收藏
得分:0 
回复 3楼 风吹过b
这个程序是找人写的,但现在人找不到了.你说系统带了这个功能的函数,那为什么还需要单独写呢?特别是窗体装载对 Dim tB(-7 To 14) As Byte进行赋值是什么意思?
2009-09-04 11:37
风吹过b
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:364
帖 子:4947
专家分:30084
注 册:2008-10-15
收藏
得分:0 
Replace函数
      

描述

返回一个字符串,该字符串中指定的子字符串已被替换成另一子字符串,并且替换发生的次数也是指定的。

语法

Replace(expression, find, replacewith[, start[, count[, compare]]])

Replace函数语法有如下几部分:

部分 描述
expression 必需的。字符串表达式,包含要替换的子字符串。
find 必需的。要搜索到的子字符串。
replacewith 必需的。用来替换的子字符串。
start 可选的。在表达式中子字符串搜索的开始位置。如果忽略,假定从1开始。
count 可选的。子字符串进行替换的次数。如果忽略,缺省值是 –1,它表明进行所有可能的替换。
compare 可选的。数字值,表示判别子字符串时所用的比较方式。关于其值,请参阅“设置值”部分。


设置值

compare参数的设置值如下:

常数 值 描述
vbUseCompareOption –1 使用Option Compare语句的设置值来执行比较。
vbBinaryCompare 0 执行二进制比较。
vbTextCompare 1 执行文字比较。
vbDatabaseCompare 2 仅用于Microsoft Access。基于您的数据库的信息执行比较。


返回值

Replace的返回值如下:

如果 Replace返回值
expression长度为零 零长度字符串("")。
expression为Null 一个错误。
find长度为零 expression的复本。
replacewith长度为零 expression的复本,其中删除了所有出现的find 的字符串。
start > Len(expression) 长度为零的字符串。
count is 0 expression.的复本。


说明

Replace函数的返回值是一个字符串,但是,其中从start所指定的位置开始,到expression字符串的结尾处的一段子字符串已经发生过替换动作。并不是原字符串从头到尾的一个复制。


Split函数
      

描述

返回一个下标从零开始的一维数组,它包含指定数目的子字符串。

语法

Split(expression[, delimiter[, count[, compare]]])

Split函数语法有如下几部分:

部分 描述
expression 必需的。包含子字符串和分隔符的字符串表达式 。如果expression是一个长度为零的字符串(""),Split则返回一个空数组,即没有元素和数据的数组。
delimiter 可选的。用于标识子字符串边界的字符串字符。如果忽略,则使用空格字符(" ")作为分隔符。如果delimiter是一个长度为零的字符串,则返回的数组仅包含一个元素,即完整的 expression字符串。
count 可选的。要返回的子字符串数,–1表示返回所有的子字符串。
compare 可选的。数字值,表示判别子字符串时使用的比较方式。关于其值,请参阅“设置值”部分。


设置值

compare参数的设置值如下:

常数 值 描述
vbUseCompareOption –1 用Option Compare语句中的设置值执行比较。
vbBinaryCompare 0 执行二进制比较。
vbTextCompare 1 执行文字比较。
vbDatabaseCompare 2 仅用于Microsoft Access。基于您的数据库的信息执行比较。


授人于鱼,不如授人于渔
早已停用QQ了
2009-09-04 12:52
快速回复:请高手进行程序解释
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.055763 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved