⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 子字符串的筛选.bas

📁 vb开发的公交查询系统
💻 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 + -