vb@rchiv
VB Classic
VB.NET
ADO.NET
VBA
C#
TOP-Angebot: 17 bzw. 24 Entwickler-Vollversionen zum unschlagbaren Preis!  
 vb@rchiv Quick-Search: Suche startenErweiterte Suche starten   Impressum  | Datenschutz  | vb@rchiv CD Vol.6  | Shop Copyright ©2000-2025
 
zurück

 Sie sind aktuell nicht angemeldet.Funktionen: Einloggen  |  Neu registrieren  |  Suchen

VB.NET - Ein- und Umsteiger
Re: Verschachtelte Datei auseinandernehmen und anzeigen... 
Autor: ModeratorDaveS (Moderator)
Datum: 03.02.10 14:47

Also, ein paar Tipps wie ich das vielleicht machen würde. Erstens zwei Klassen

Public Class UnterBlock
    Public Typ As String
    Public Name As String
    Public Modell As String
End Class
 
Public Class BlockName
    Public Name As String
    Public Nummer As Integer
    Public Position As Integer
    Public [Option] As Integer
 
    Public Unterblocks As New List(Of UnterBlock)
    Public BlockNames As New List(Of BlockName)
End Class
Dann merken wir, dass alles in der Form keyword = wert vorliegt (wo wert auch eine ganze Gruppe mit Untergruppen zwischen "{" und "}" sein kann). Daher eine Klasse um solche Werte auszulesen

Public Class KeyGroupReader
 
    Private npos As Integer
    Private data As String
 
    Public Sub New(ByVal data As String)
        Me.data = data
    End Sub
 
    Public Function GetKeywordParameter(ByVal name As String, ByVal t As Type) _
      As String
        Dim pn As String = getToken()
        Dim sep As String = getToken()
        Dim val As String = getToken()
 
        Dim b1 As Boolean = (name <> "?" AndAlso name <> pn)
        If (name <> "?" AndAlso name <> pn) OrElse sep <> "=" OrElse val = _
          String.Empty Then
            MsgBox("Wrong!")
            Return String.Empty
        End If
        Return val
    End Function
 
    Dim seps As Char() = {vbCr, vbLf, "=", "{", "}", " "}
 
    Private Function getToken() As String
        skipWhiteSpace()
 
        Dim spos As Integer = npos
 
        Select Case data(npos)
            Case """"
                Return getQuotedStringToken()
            Case "{"
                Return getBlockDataToken()
 
            Case "="
                npos += 1
                Return data(npos - 1)
            Case Else
        End Select
 
        Do While npos < data.Length AndAlso Not seps.Contains(data(npos))
            npos += 1
        Loop
        Return data.Substring(spos, npos - spos)
 
    End Function
 
    Private Function getQuotedStringToken() As String
        Dim spos = npos
        npos += 1
        Dim res As String = String.Empty
        While npos < data.Length
            If npos = data.Length OrElse data(npos) = """" Then
                npos += 1
                If npos < data.Length AndAlso data(npos) = """" Then
                    npos += 1
                    Continue While
                End If
                res = data.Substring(spos, npos - spos)
                Exit While
            End If
            npos += 1
        End While
        Return res
    End Function
 
    Private Function getBlockDataToken() As String
        Dim spos As Integer = npos
        Dim level As Integer
 
        If data(npos) = "{" Then
            npos += 1
            level += 1
            While npos < data.Length
                Select Case data(npos)
                    Case """"
                        getQuotedStringToken()
                    Case "{"
                        level += 1
                    Case "}"
                        level -= 1
                        If level = 0 Then Exit While
                End Select
                npos += 1
            End While
            npos += 1
            Return data.Substring(spos, npos - spos)
        Else
            If npos <> data.Length Then
                MsgBox("Invalid!!!")
            End If
        End If
        Return String.Empty
 
    End Function
 
    Private Sub skipWhiteSpace()
        While npos < data.Length AndAlso Char.IsWhiteSpace(data(npos))
            npos += 1
        End While
    End Sub
 
End Class
Dann die Hauptroutine

    Private BlockNames As New List(Of BlockName)
 
    Private Sub ReadBlockNames(pfad As String)
 
        Dim sr As New IO.StreamReader(pfad)
        Dim data As String = sr.ReadToEnd()
        sr.Close()
 
        Dim kgr As New KeyGroupReader(data)
        Dim blockNameData As String
 
        ' Process main blocks
        Do
            blockNameData = kgr.GetKeywordParameter("Blockname", Nothing)
            If blockNameData <> String.Empty Then
                Dim bn As New BlockName
 
                Debug.WriteLine(blockNameData)
                Dim kgrbn As New KeyGroupReader(blockNameData.Substring(1, _
                  blockNameData.Length - 2))
 
                Dim val = kgrbn.GetKeywordParameter("Name", Nothing)
                bn.Name = val
                val = kgrbn.GetKeywordParameter("Nummer", Nothing)
                bn.Nummer = val
                val = kgrbn.GetKeywordParameter("Position", Nothing)
                bn.Position = val
                val = kgrbn.GetKeywordParameter("Option", Nothing)
                bn.Option = val
 
                ' Unterblöcke behandeln
 
                ' Sub-Blocknamen behandeln
 
                BlockNames.Add(bn)
 
            End If
        Loop While blockNameData <> String.Empty
    End Sub
Also, das ist alles sehr schnell geschrieben und kaum ausführlich getestet. Es gibt kaum Fehlerbehandlung, und man sollte besser Klassen für die Analyse von Blocknamen, Unterblocks usw. haben. Aber vielleicht hilft das ein wenig. Und ich habe nur Blockname und die ersten vier Werte programmiert. Unterblöcke und Sub-Blocknamen kann man ganz ähnlich programmieren.

________
Alle Angaben ohne Gewähr. Keine Haftung für Vorschläge, Tipps oder sonstige Hilfe, falls es schiefgeht, nur Zeit verschwendet oder man sonst nicht zufrieden ist

alle Nachrichten anzeigenGesamtübersicht  |  Zum Thema  |  Suchen

 ThemaViews  AutorDatum
Verschachtelte Datei auseinandernehmen und anzeigen...1.649Darth03.02.10 08:49
Re: Verschachtelte Datei auseinandernehmen und anzeigen...1.117ModeratorDaveS03.02.10 11:02
Re: Verschachtelte Datei auseinandernehmen und anzeigen...1.145Darth03.02.10 13:46
Re: Verschachtelte Datei auseinandernehmen und anzeigen...1.068ModeratorRalfE03.02.10 13:51
Re: Verschachtelte Datei auseinandernehmen und anzeigen...1.232ModeratorDaveS03.02.10 14:47
Re: Verschachtelte Datei auseinandernehmen und anzeigen...1.068ModeratorDaveS04.02.10 10:17
Re: Verschachtelte Datei auseinandernehmen und anzeigen...1.052Manfred X04.02.10 11:08
Re: Verschachtelte Datei auseinandernehmen und anzeigen...1.054ModeratorDaveS04.02.10 11:27
Re: Verschachtelte Datei auseinandernehmen und anzeigen...1.130ModeratorDaveS04.02.10 11:32
Re: Verschachtelte Datei auseinandernehmen und anzeigen...1.031ModeratorFZelle04.02.10 11:49
Re: Verschachtelte Datei auseinandernehmen und anzeigen...1.088ModeratorDaveS04.02.10 11:50
Re: Verschachtelte Datei auseinandernehmen und anzeigen...1.137ModeratorFZelle04.02.10 13:18
Re: Verschachtelte Datei auseinandernehmen und anzeigen...1.199ModeratorDaveS04.02.10 13:59

Sie sind nicht angemeldet!
Um auf diesen Beitrag zu antworten oder neue Beiträge schreiben zu können, müssen Sie sich zunächst anmelden.

Einloggen  |  Neu registrieren

Funktionen:  Zum Thema  |  GesamtübersichtSuchen 

nach obenzurück
 
   

Copyright ©2000-2025 vb@rchiv Dieter Otter
Alle Rechte vorbehalten.
Microsoft, Windows und Visual Basic sind entweder eingetragene Marken oder Marken der Microsoft Corporation in den USA und/oder anderen Ländern. Weitere auf dieser Homepage aufgeführten Produkt- und Firmennamen können geschützte Marken ihrer jeweiligen Inhaber sein.

Diese Seiten wurden optimiert für eine Bildschirmauflösung von mind. 1280x1024 Pixel