vb6 拆分命令行手册中的输出参数
来源:互联网 发布:win10碎片整理软件 编辑:程序博客网 时间:2024/06/05 22:53
INGRESS:首节点nodeid
test
EGRESS:末节点nodeid
首末节点不能相同(注:下同)
INDEX:索引需要按冒号拆分为3个参数。
‘-----------------------------------------------------------------------------------------------------------------------
Option Explicit
'得到 字符串 数组的最大下标
Public Function GetArrayBound_String(ByRef ArrayName() As String) As Long
On Error GoTo ArrayIsEmpty
GetArrayBound_String = UBound(ArrayName)
Exit Function
'--------数组为空--------------------
ArrayIsEmpty:
GetArrayBound_String = -1
End Function
Public Function GetHeadTail(ByVal strSour As String, ByVal strSplit As String _
, ByRef strHead As String, ByRef strTail As String) As Boolean
Dim nStartPos As Long
Dim strReturn As String '返回值
nStartPos = InStr(1, strSour, strSplit)
If nStartPos > 0 Then
strHead = Left(strSour, nStartPos - 1)
strTail = Mid(strSour, nStartPos + Len(strSplit))
GetHeadTail = True
Else
GetHeadTail = False
End If
End Function
‘-----------------------------------------------------------------------------------------------------------------------
Attribute VB_Name = "Module1"
Option Explicit' 命令行手册中的输出参数
Public Type OUT_PARA_TYPE
name As String ' 参数名
value As String ' 参数值
End Type
'得到 OUT_PARA_TYPE 数组的最大下标
Public Function GetArrayBound_OUT_PARA_TYPE(ByRef ArrayName() As OUT_PARA_TYPE) As Long
On Error GoTo ArrayIsEmpty
GetArrayBound_OUT_PARA_TYPE = UBound(ArrayName)
Exit Function
'--------数组为空--------------------
ArrayIsEmpty:
GetArrayBound_OUT_PARA_TYPE = -1
End Function
'判断一个字符串是否都是由字母或者数字或者下划线组成
Function is_can_as_var_name(lstr As String) As Boolean
If lstr = "" Then Exit Function
Dim lstrlen As Long
Dim i As Long
lstrlen = Len(lstr)
For i = 1 To lstrlen
Dim ch As String
ch = Mid(lstr, i, 1)
Dim ascnum As Long
ascnum = Asc(ch)
Dim is_letter As Boolean
is_letter = (ascnum > 64 And ascnum < 91) Or (ascnum > 96 And ascnum < 123)
Dim is_num As Boolean
is_num = (ascnum >= 48 And ascnum <= 57)
If Not (is_letter Or is_num Or (ascnum = 95)) Then
is_can_as_var_name = False
Exit Function
End If
Next
is_can_as_var_name = True
End Function
' 判断一个字符串是否是一个参数名
Private Function is_para_name(ByVal name As String) As Boolean
Dim first_char As String
first_char = Left(name, 1)
' 首字符不能为数字
If IsNumeric(first_char) Then
is_para_name = False
Exit Function
End If
is_para_name = is_can_as_var_name(name)
End Function
' 判断一行字符串是否是一个参数的开始
Private Function is_para_begin(ByVal strline As String) As Boolean
Dim npos As Long
Dim name As String
npos = InStr(strline, ":")
If npos > 0 Then
name = Left(strline, npos - 1)
End If
is_para_begin = is_para_name(name)
End Function
' 添加一个参数到 obj
Private Sub add_one_para(ByVal str As String, ByRef obj As OUT_PARA_TYPE)
GetHeadTail str, ":", obj.name, obj.value
obj.name = Trim(obj.name)
obj.value = Trim(obj.value)
' 去掉回车
obj.name = Replace(obj.name, vbCr, "")
obj.value = Replace(obj.value, vbCr, "")
End Sub
' 拆分命令行手册中的输出参数
Public Sub split_outpara(ByVal str_in As String, ByRef outarray() As OUT_PARA_TYPE)
Erase outarray
Dim arr() As String
arr = Split(str_in, vbLf)
Dim nBound As Long
nBound = GetArrayBound_String(arr)
Dim i As Long
Dim j As Long
Dim new_bound As Long
new_bound = -1
For i = 0 To nBound
Dim str As String
str = arr(i)
For j = i + 1 To nBound
Dim strline As String
strline = arr(j)
If is_para_begin(strline) Then
new_bound = new_bound + 1
ReDim Preserve outarray(new_bound)
add_one_para str, outarray(new_bound)
str = ""
i = j - 1
Exit For
Else
str = str & vbCrLf & strline
End If
Next j
Next i
If Len(str) > 0 Then
new_bound = new_bound + 1
ReDim Preserve outarray(new_bound)
add_one_para str, outarray(new_bound)
End If
Erase arr
End Sub
Public Sub unittest()
Dim str As String
Dim arr() As OUT_PARA_TYPE
str = "INGRESS: 首节点nodeid"
str = str & vbCrLf & "EGRESS: 末节点nodeid"
str = str & vbCrLf & "INDEX: 索引"
split_outpara str, arr
Dim nBound As Long
nBound = GetArrayBound_OUT_PARA_TYPE(arr)
Debug.Assert nBound = 2
Debug.Assert arr(0).name = "INGRESS"
Debug.Assert arr(0).value = "首节点nodeid"
Debug.Assert arr(1).name = "EGRESS"
Debug.Assert arr(1).value = "末节点nodeid"
Debug.Assert arr(2).name = "INDEX"
Debug.Assert arr(2).value = "索引"
str = "INGRESS: 首节点nodeid"
str = str & vbLf & "EGRESS: 末节点nodeid"
str = str & vbCrLf & "INDEX: 索引"
split_outpara str, arr
nBound = GetArrayBound_OUT_PARA_TYPE(arr)
Debug.Assert nBound = 2
Debug.Assert arr(0).name = "INGRESS"
Debug.Assert arr(0).value = "首节点nodeid"
Debug.Assert arr(1).name = "EGRESS"
Debug.Assert arr(1).value = "末节点nodeid"
Debug.Assert arr(2).name = "INDEX"
Debug.Assert arr(2).value = "索引"
'INGRESS: 首节点nodeid
'test
'EGRESS: 末节点nodeid
'首末节点不能相同(注:下同)
'INDEX: 索引
str = "INGRESS: 首节点nodeid"
str = str & vbCrLf & "test"
str = str & vbCrLf & "EGRESS: 末节点nodeid"
str = str & vbCrLf & "首末节点不能相同(注:下同)"
str = str & vbCrLf & "INDEX: 索引"
split_outpara str, arr
nBound = GetArrayBound_OUT_PARA_TYPE(arr)
Debug.Assert nBound = 2
Debug.Assert arr(0).name = "INGRESS"
'Debug.Assert arr(0).value = "首节点nodeid" & vbCrLf & "test"
Debug.Assert arr(1).name = "EGRESS"
'Debug.Assert arr(1).value = "末节点nodeid" & vbCrLf & "首末节点不能相同(注:下同)"
Debug.Assert arr(2).name = "INDEX"
Debug.Assert arr(2).value = "索引"
End Sub
‘-----------------------------------------------------------------------------------------------------------------------
If m_regEx.Test(ver) Then
is_valid_version = True
End If
End Function
Private Sub Form_Load()
Set m_regEx = CreateObject("VBScript.RegExp") ' &&建立正则表达式对象
m_regEx.IgnoreCase = True ' &&设置是否区分字符大小写
m_regEx.Global = True ' &&设置全局可用性
' 设置模式
m_regEx.Pattern = "\d+.\d+.\d+.\d+"
Text1.Text = "5.99.10.2"
Debug.Assert is_valid_version("5.99.10.2")
Debug.Assert Not is_valid_version("5")
Debug.Assert Not is_valid_version("5.99")
Debug.Assert Not is_valid_version("5.99.10")
Debug.Assert Not is_valid_version("5.99.10.B10")
End Sub
- vb6 拆分命令行手册中的输出参数
- 输出命令行参数
- MATLAB中的命令行输出
- nim中的命令行参数
- linux内核命令行参数速查手册
- 如何获取Windows命令行参数信息(和Linux中的ps -ef的输出相似)
- C# 调用带参数的控制台程序 并将命令行输出的内容实时输出至窗体中的显示控件
- 命令行输出php 并传递参数
- 命令行参数中的双引号转义
- 主函数中的命令行参数
- C语言中的命令行参数
- shell中的命令行参数处理
- CMD 命令行中的 tree 样式输出
- Linux shll中的$符号 -- 读取命令行参数
- 命令行参数在VB中的利用
- Linux命令行参数在栈中的分布
- Linux shll中的$符号 -- 读取命令行参数
- visual studio 2010 输出对象内存结果命令行参数
- C/C++中可变参数的原理
- uva 1326 - Jurassic Remains(暴力+位运算+中间相遇法)
- linux订制安装及Linux常见命令
- C++中实现回调机制的几种方式
- 经典问题总结(二)
- vb6 拆分命令行手册中的输出参数
- 理解ATL中的一些汇编代码
- ios学习之给app评分以及app id
- 失落的C语言结构体封装艺术
- OCP-1Z0-053-200题-135题-150
- 新年目标
- 如何学习WindDbg
- OCP-1Z0-053-200题-134题-4
- FusionCharts实例,改变之网络