【问题标题】:Advance search of text files文本文件的高级搜索
【发布时间】:2014-07-23 03:53:09
【问题描述】:

有谁知道如何读取文件中的文本块?这就是我要找的...

该文件将类似于以下内容:

...

STANDARD 1.abc def 1.000 \
        STAMP="0A7B 1258 AC82 470F 682B D06A 4FD5 \
        A108 5A1B 474B A5D5 F241 B9C8 04A9 6455 0B0C E3B4 AFF6 39E5 \
        A5AE F951 FF30 0870 288C F900 6C53 12B6 EBB3 3A3D 57A2" \

ADVANCED 1.abc ghi 1.000 \
        STAMP="076F 1C48 BBC2 0779 EB13 2063 E61D 1DB4 \
        DE9A 6BFF 0E5E 06BE 477D EECF 83D6 069E ADAA 5BDC 8947 9A9B \
        30F7 4042 C4EA BFC6 4ECF 993A EEE4 9180 13FE C8C7"

...

这种模式在整个文件中重复出现,在“STAMP”部分之后还有一个“STAMP2=”部分。此外,ADVANCED 取决于 STANDARD,这意味着两者都必须存在。我需要找到 Standard 部分(这是一个简单的过程),然后找到分配的 ADVANCED 部分并将 STAMP 值(引号之间的所有内容)分配给字符串变量。

有没有简单的方法来完成这项任务,如果有,请分享。

谢谢!

【问题讨论】:

    标签: vb.net filestream


    【解决方案1】:

    这样的事情会帮助你。您需要嵌套检查以找出正在读取的部分。

    注意:这不是一个完整的代码,它只是一个让你有想法的开始。

    Const STANDARD As String = "STANDARD"
    Const ADVANCE As String = "ADVANCE"
    Dim sectionIdentifier As String
    
    Dim standardSection As New StringBuilder
    Dim advanceSection As New StringBuilder
    
    Private Sub Form1_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load
        ReadFile("YourFilePathHere")
    End Sub
    
    Sub ReadFile(ByVal path As String)
        Dim reader As New StreamReader(path)
        Dim line As String = String.Empty
        While Not reader.EndOfStream
            line = reader.ReadLine()
            If (line.StartsWith(STANDARD)) Then
                sectionIdentifier = line.Replace(STANDARD, "").Trim
                ReadStandardSection(reader)
            End If
        End While
        reader.Close()
    End Sub
    
    Sub ReadStandardSection(ByRef reader As StreamReader)
        Dim line As String = String.Empty
        While Not reader.EndOfStream
            line = reader.ReadLine()
            If (line.TrimStart().StartsWith("ADVANCE")) Then
                Dim sectionidentiferAdv As String = line.Replace(ADVANCE, "").Trim
                If (sectionIdentifier <> sectionidentiferAdv) Then
                    ' display alert advance section for identifier not found
                    ' possibly return from here, since file structure is not expected.
                End If
                Debug.Print(standardSection.ToString())
                Debug.Print("standard end")
                standardSection.Clear()
                '' standard data can be use and clear
                ReadAdvanceSection(reader)
            Else
                standardSection.AppendLine(line)
            End If
        End While
    End Sub
    
    Sub ReadAdvanceSection(ByRef reader As StreamReader)
        Dim line As String = String.Empty
        While Not reader.EndOfStream
            line = reader.ReadLine()
            If (line.StartsWith(STANDARD)) Then
                Debug.Print(advanceSection.ToString())
                Debug.Print("advance end")
                advanceSection.Clear()
                '' advance section data can be use and clear
                Return
            End If
            advanceSection.AppendLine(line)
        End While
        If (reader.EndOfStream) Then
            Debug.Print(advanceSection.ToString())
            Debug.Print("advance end")
        End If
    End Sub
    

    控制台日志:

            STAMP="0A7B 1258 AC82 470F 682B D06A 4FD5 \
            A108 5A1B 474B A5D5 F241 B9C8 04A9 6455 0B0C E3B4 AFF6 39E5 \
            A5AE F951 FF30 0870 288C F900 6C53 12B6 EBB3 3A3D 57A2" \
            STAMP2="0A7B 1258 AC82 470F 682B D06A 4FD5 \
            A108 5A1B 474B A5D5 F241 B9C8 04A9 6455 0B0C E3B4 AFF6 39E5 \
            A5AE F951 FF30 0870 288C F900 6C53 12B6 EBB3 3A3D 57A2" \
    
    
    standard end
            STAMP="076F 1C48 BBC2 0779 EB13 2063 E61D 1DB4 \
            STAMP="076F 1C48 BBC2 0779 EB13 2063 E61D 1DB4 \
            DE9A 6BFF 0E5E 06BE 477D EECF 83D6 069E ADAA 5BDC 8947 9A9B \
            30F7 4042 C4EA BFC6 4ECF 993A EEE4 9180 13FE C8C7"
            STAMP2="076F 1C48 BBC2 0779 EB13 2063 E61D 1DB4 \
            STAMP2="076F 1C48 BBC2 0779 EB13 2063 E61D 1DB4 \
            DE9A 6BFF 0E5E 06BE 477D EECF 83D6 069E ADAA 5BDC 8947 9A9B \
            30F7 4042 C4EA BFC6 4ECF 993A EEE4 9180 13FE C8C7"
    
    
    advance end
            STAMP="0B7B 1258 AC82 470F 682B D06A 4FD5 \
            A108 5A1B 474B A5D5 F241 B9C8 04A9 6455 0B0C E3B4 AFF6 39E5 \
            A5AE F951 FF30 0870 288C F900 6C53 12B6 EBB3 3A3D 57A2" \
            STAMP2="0B7B 1258 AC82 470F 682B D06A 4FD5 \
            A108 5A1B 474B A5D5 F241 B9C8 04A9 6455 0B0C E3B4 AFF6 39E5 \
            A5AE F951 FF30 0870 288C F900 6C53 12B6 EBB3 3A3D 57A2" \
    
    
    standard end
            STAMP="A76F 1C48 BBC2 0779 EB13 2063 E61D 1DB4 \
            STAMP="A76F 1C48 BBC2 0779 EB13 2063 E61D 1DB4 \
            DE9A 6BFF 0E5E 06BE 477D EECF 83D6 069E ADAA 5BDC 8947 9A9B \
            30F7 4042 C4EA BFC6 4ECF 993A EEE4 9180 13FE C8C7"
            STAMP2="076F 1C48 BBC2 0779 EB13 2063 E61D 1DB4 \
            STAMP2="076F 1C48 BBC2 0779 EB13 2063 E61D 1DB4 \
            DE9A 6BFF 0E5E 06BE 477D EECF 83D6 069E ADAA 5BDC 8947 9A9B \
            30F7 4042 C4EA BFC6 4ECF 993A EEE4 9180 13FE C8C7"
    
    advance end
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-03-15
      • 1970-01-01
      • 1970-01-01
      • 2012-09-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多