分段循环处理的经典写法

 Private Sub DecodeScanLog(ByVal lines As List(Of String), ByRef lst As List(Of ScanInfo))
        Dim count = 0
        Dim startIndex = lines.FindIndex(Function(s) s.Contains("Cell") And s.Contains("Address"))
        Dim partLines As List(Of String) = Nothing
        If startIndex <> -1 Then
            Do
                Dim endIndex = -1
                If startIndex <> -1 Then
                    endIndex = lines.Skip(startIndex + 1).ToList().FindIndex(Function(s) s.Contains("Cell") And s.Contains("Address"))

                    If endIndex <> -1 Then
                        partLines = lines.Skip(startIndex).Take(endIndex - startIndex + 2).ToList()
                    Else
                        partLines = lines.Skip(startIndex).ToList()
                    End If
                    Dim scan = New ScanInfo()
                    scan.Index = (count + 1).ToString()
                    If DecodePartScanLog(partLines, scan) Then
                        lst.Add(scan)
                    End If

                End If
                Dim prossedLines = startIndex + partLines.Count()
                startIndex = lines.Skip(prossedLines).ToList().FindIndex(Function(s) s.Contains("Cell") And s.Contains("Address"))
                If startIndex = -1 Then
                    Exit Do
                Else
                    lines = lines.Skip(prossedLines).ToList()
                End If
                count += 1
            Loop
        End If


    End Sub


    Private Function DecodePartScanLog(ByVal lines As List(Of String), ByRef scan As ScanInfo) As Boolean
        Try
            scan.BSSID = lines.Where(Function(s) s.Contains("Address:")).FirstOrDefault().Split(":", 2, StringSplitOptions.RemoveEmptyEntries)(1)
            scan.SSID = lines.Where(Function(s) s.Contains("ESSID:")).FirstOrDefault().Split(":")(1).Trim("""")
            scan.Frequency = lines.Where(Function(s) s.Contains("Frequency:")).FirstOrDefault().Split(":")(1).Split("(")(0).Replace(" ", "")
            scan.Channel = lines.Where(Function(s) s.Contains("Frequency:")).FirstOrDefault().Split(":")(1).Split("(")(1).Trim(")").Split(" ")(1)
            Dim line = lines.Where(Function(s) s.Contains("Signal level=")).FirstOrDefault()
            scan.Signal = line.Substring(line.IndexOf("Signal level=")).Split("=")(1).Replace(" ", "")
            scan.Encryption = lines.Where(Function(s) s.Contains("Encryption key:")).FirstOrDefault().Split(":")(1)
            Return True
        Catch ex As Exception
            Return False
        End Try

    End Function

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值