📄 子字符串的筛选.bas
字号:
Attribute VB_Name = "Module4"
Option Explicit
Public ChildNum(0 To 30) As String '表示子字符串中","间的一个一个数据值
Public Cnum As Integer '表示子字符串中","间的数据的总个数
Public Direction As Integer '返回Abstract中所乘坐的公交车的运行方向
'返回用于地图显示所需的
'在两个公交站点之间乘坐某趟公交车经过的所有公交站点号
Public Sub Abstract1(BusNum As String, StationNum1 As String, _
StationNum2 As String)
Dim i As Integer
Dim j As Integer
Dim k As Integer
Dim Mystr(0 To 1) As String
Dim loc1, loc2 As Integer
Dim partstr As String
Dim str1 As String
Dim Direction As Integer
'初始化
Cnum = 0
For i = 0 To 30
ChildNum(i) = ""
Next i
Mystr(0) = CXBusnumStationnumsStr(BusNum, 0)
Mystr(1) = CXBusnumStationnumsStr(BusNum, 1)
For i = 0 To 1
loc1 = 0
loc2 = 0
For j = 1 To Len(Mystr(i))
If Mid(Mystr(i), j, Len(StationNum1) + 2) = "," & StationNum1 & "," Then
loc1 = j '所要搜寻的第一个数据在字符串中的位置
End If
If Mid(Mystr(i), j, Len(StationNum2) + 2) = "," & StationNum2 & "," Then
loc2 = j + Len(StationNum2) + 1 '所要搜寻的第二个数据结束时在字符串中的位置
End If
Next j
If (loc1 > 0) And (loc2 > loc1) Then
Direction = i
GoTo 1000
End If
Next i
1000:
If (loc1 > 0) And (loc2 > loc1) Then
For i = loc1 To loc2
'介于所定义的两个数据间的整个子字符串
partstr = partstr & Mid(Mystr(Direction), i, 1)
Next i
End If
'实现字符串的有效字符分离
k = 0
For i = 1 To Len(partstr)
If Mid(partstr, i, 1) <> "," Then
str1 = str1 & Mid(partstr, i, 1)
'考虑要求从人民广场---长春站的转换乘得到的结果是: _
人民广场......长春站.....东广场...长春站,此不合理--- _
------------也不能中途绕回起点站-----------
ElseIf ((i < Len(partstr) - 2) And (str1 = CStr(EndNum))) Or _
((i > Len(StartNum) + 4) And (str1 = CStr(StartNum))) Then
Cnum = 0
GoTo 10000
'-------------------------------------------------------------(后加)-------
Else
ChildNum(k) = str1
k = k + 1
str1 = ""
End If
Next i
Cnum = k - 1
If Cnum = -1 Then '---目的:当没有能提出的中间公交站点时,使记录个数的变量Cnum=0
Cnum = 0
End If
10000:
End Sub
'返回用于地图显示所需的
'在两个公交站点之间乘坐某趟公交车经过的所有公交站点号
Public Sub Abstract2(BusNum As String, StationNum1 As String, _
StationNum2 As String)
Dim t1, t2 As Integer
Dim i, j, k, m, n As Integer
Dim Mystr(0 To 1) As String
Dim loc1, loc2 As Integer
Dim partstr, pstr As String
Dim str1(1 To 10), str2(1 To 10) As String
'初始化
Cnum = 0
For i = 0 To 30
ChildNum(i) = ""
Next i
If Val(StationNum1) > 1000 Then
Call Separate(SamenameStationStr(StationNum1))
t1 = Lnum
For i = 1 To t1
str1(i) = Mynum(i)
Next i
Else
t1 = 1
str1(1) = StationNum1
End If
If Val(StationNum2) > 1000 Then
Call Separate(SamenameStationStr(StationNum2))
t2 = Lnum
For i = 1 To t2
str2(i) = Mynum(i)
Next i
Else
t2 = 1
str2(1) = StationNum2
End If
'同名站点总个数---进行循环---当同名的两个公交站点相距较远时,此会造成"乘车断档"
For m = 1 To t1
For n = 1 To t2
'以下内容相当于Call Abstract1(BusNum, str1(i), str2(j))
Mystr(0) = XSBusnumStationnumsStr(BusNum, 0)
Mystr(1) = XSBusnumStationnumsStr(BusNum, 1)
For i = 0 To 1
loc1 = 0
loc2 = 0
For j = 1 To Len(Mystr(i))
If Mid(Mystr(i), j, Len(str1(m)) + 2) = "," & str1(m) & "," Then
loc1 = j '所要搜寻的第一个数据在字符串中的位置
End If
If Mid(Mystr(i), j, Len(str2(n)) + 2) = "," & str2(n) & "," Then
loc2 = j + Len(str2(n)) + 1 '所要搜寻的第二个数据结束时在字符串中的位置
End If
Next j
If (loc1 > 0) And (loc2 > loc1) Then
Direction = i
GoTo 1001
End If
Next i
1001:
If (loc1 > 0) And (loc2 > loc1) Then
For i = loc1 To loc2
'介于所定义的两个数据间的整个子字符串
partstr = partstr & Mid(Mystr(Direction), i, 1)
Next i
End If
'实现字符串的有效字符分离
k = 0
For i = 1 To Len(partstr)
If Mid(partstr, i, 1) <> "," Then
pstr = pstr & Mid(partstr, i, 1)
Else
'避免"已经到达终点站未下车,绕一圈后才到达终点站------------------- _
--------------也不能中途绕回起点站-------------------------------- _
所以需要检测终点站同名站点序列SameNameStr(EndNum) 是否like *,pstr,*
If EndNum > 1000 Then
If (i < Len(partstr) - 2) And _
(SamenameStationStr(EndNum) Like "*," & pstr & ",*") Then
Cnum = 0
GoTo 10001
End If
Else
If (i < Len(partstr) - 2) And _
(pstr = CStr(EndNum)) Then
Cnum = 0
GoTo 10001
End If
End If
If StartNum > 1000 Then
If (i > Len(StartNum) + 4) And _
(SamenameStationStr(StartNum) Like "*," & pstr & ",*") Then
Cnum = 0
GoTo 10001
End If
Else
If (i > Len(StartNum) + 4) And _
(pstr = CStr(StartNum)) Then
Cnum = 0
GoTo 10001
End If
End If
'--------------------------------------
ChildNum(k) = pstr
k = k + 1
pstr = ""
End If
Next i
Cnum = k - 1
Next n
Next m
If Cnum = -1 Then '-------------目的同上
Cnum = 0
End If
10001:
End Sub
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -