.ini einträge in Listbox

  • VB.NET

Es gibt 13 Antworten in diesem Thema. Der letzte Beitrag () ist von Unwesen.

    .ini einträge in Listbox

    Hallo,
    ich will die einträge aus einer .ini in einer list box anzeigen lassen aber ohne den kram Wie z.B name = hans also das name = willl ich halt nicht haben sondern nur den namen und auch die region wo das gespeichert wird soll nicht angezeigt werden bitte um hilfe

    VB.NET-Quellcode

    1. Public Class IniParser
    2. Public Property Filename() As String
    3. Private Entries_ As List(Of IniEntry)
    4. Public Sub New(ByVal _Filename As String)
    5. Me.Filename = _Filename
    6. Me.Entries_ = New List(Of IniEntry)
    7. End Sub
    8. Public Sub Parse()
    9. Dim Section As String = "default"
    10. For Each Line As String In System.IO.File.ReadAllLines(Me.Filename)
    11. If Line.StartsWith("[") And Line.EndsWith("]")
    12. Section = Line.Substring(1, Line.Length - 2)
    13. Continue For
    14. End If
    15. If Not Line.Contains("=") Then Continue For
    16. Dim Splitted() As String = Line.Split("="c)
    17. Dim Key As String = Splitted(0)
    18. Dim ValueArray() As String
    19. Array.Copy(Splitted, 1, ValueArray, 0, Splitted.Length - 1)
    20. Dim Value As String = String.Join("=", ValueArray)
    21. Dim NewEntry As New IniEntry(Section, Key, Value)
    22. Me.Entries.Add(NewEntry)
    23. Next
    24. End Sub
    25. Public Function GetValue(ByVal Section As String, ByVal Key As String) As String
    26. For Each Entry As IniEntry In Me.Entries
    27. If Entry.Section = Section And Entry.Key = Key Then Return Entry.Value
    28. Next
    29. Return Nothing
    30. End Function
    31. Public Function GetEntries() As List(Of IniEntry)
    32. Return Me.Entries
    33. End Function
    34. End Class
    35. Public Class IniEntry
    36. Public Property Section() As String
    37. Public Property Key() As String
    38. Public Property Value() As String
    39. Public Sub New(ByVal Section_ As String, ByVal Key_ As String, ByVal Value_ As String)
    40. Section = Section_
    41. Key = Key_
    42. Value = Value_
    43. End Sub
    44. End Class
    Hab dir mal eine kleine Klasse dafür geschrieben.
    Mag nicht 100% performant sein, sollte aber das tun, was sie soll.
    Hier ein Anwendungsbeispiel:

    VB.NET-Quellcode

    1. Dim Datei As String = "datei.ini" ' Deine INI-Datei
    2. Dim Parser As New IniParser(Datei)
    3. Parser.Parse()
    4. Console.WriteLine(Parser.GetValue("section", "key", "value"))
    Viel Spaß damit.

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „haiyyu“ ()

    Es gibt doch meines Wissens in der Kernel32.dll funktionen wie WritePrivateProfilString oder GetPrivateProfilString oder so, wenn du die verwendest sollte es eigentlich auch funktionieren..

    Edit:
    dotnet-snippets.de/dns/klasse-…n-ini-dateien-SID938.aspx
    hier ist ein Anwendungsbeispiel.
    lg.

    LucaWelker
    Zeig mal her, wie du die Klasse eingebaut hast.
    Im Übrigen habe ich den obigen Beitrag ein wenig editiert, so dass er jetzt auch eine Methode besitzt, die dir eine Liste mit allen Einträgen zurückgibt.
    Du hast offensichtlich keine Ahnung von objektorientierter Programmierung.
    Ich würde dir mal ans Herz legen, die Grundlagen zu lernen.
    Ohne die wirst du nicht weit kommen.
    Da kann ich dir noch so viel Code geben...
    Das auslesen von Einträgen aus einer DAT Datei ist einfacher:

    Erst mal die ListBox_Read Eigenschaft setzen

    VB.NET-Quellcode

    1. Public Sub ListBox_Read(ByVal ListBox As ListBox, _
    2. ByVal sFile As String)
    3. ' Inhalt einer ListBox speichern
    4. Dim oStream As IO.StreamReader
    5. Dim sLine As String
    6. ' ListBox löschen
    7. ListBox.Items.Clear()
    8. ' Existsiert die Datei?
    9. Dim oFile As New IO.FileInfo(sFile)
    10. If oFile.Exists() = True Then
    11. oStream = New IO.StreamReader(sFile)
    12. ' Datei zeilenweise auslesen
    13. Do
    14. sLine = oStream.ReadLine()
    15. If IsNothing(sLine) Then Exit Do
    16. ListBox.Items.Add(sLine)
    17. Loop
    18. oStream.Close()
    19. End If
    20. End Sub



    Dann den Read Befehl für die Ausgewählte ListBox in Form.Load oder etc. setzen

    VB.NET-Quellcode

    1. Try
    2. Dim sFile As String
    3. sFile = Application.StartupPath & "\log.dat"
    4. ListBox_Read(ListBox1, sFile)
    5. Catch ex as Exception
    6. End Try



    Ich hoffe das hilft :)

    Mit freundlichen Grüßen,
    Aector
    Deine Datei könnte auch auf .txt enden, das ist relativ egal du ließt ja einfach nur Zeilen weiße ein. Aber was machst du wenn du einen bestimmten Eintrag suchst ;) und dafür nicht die gesamte Datei einlesen willst.
    lg.

    LucaWelker
    Nicht getestet, aber Du könntest mal so versuchen:

    VB.NET-Quellcode

    1. Private Sub ReadIniToListBox(iniFile As String, lstbox As ListBox)
    2. lstbox.Items.Clear()
    3. If Not IO.File.Exists(iniFile) Then
    4. MessageBox.Show("Ini-Datei nicht gefunden!")
    5. Return
    6. End If
    7. For Each zeile As String In IO.File.ReadAllLines(iniFile)
    8. If zeile.Trim Like "[*]" Then ' Bereich
    9. lstbox.Items.Add(zeile)
    10. Else
    11. Dim eintrag() As String = zeile.Split("="c)
    12. If eintrag.Length = 2 Then lstbox.Items.Add(eintrag(1))
    13. End If
    14. Next
    15. End Sub
    Du könntest auch noch RegEx verwenden um die Strings zu filtern.

    Oder einfach mit der Klasse String an sich, die ja einige Funktionen bereits mitliefert (.Contains, .IndexOf, SubString.......)

    Und vorher hald einfach mit nem StreamReader zeilenweise lesen.

    Nazas schrieb:

    Hallo,
    ich will die einträge aus einer .ini in einer list box anzeigen lassen aber ohne den kram Wie z.B name = hans also das name = willl ich halt nicht haben sondern nur den namen und auch die region wo das gespeichert wird soll nicht angezeigt werden bitte um hilfe

    VB.NET-Quellcode

    1. Dim arr() As String = IO.File.ReadAllLines(PfadZurIni)
    2. For Each item As String In arr
    3. If item.Contains("=") Then
    4. Dim param() As String = item.Split("="c)
    5. ListBox1.Items.Add(param(1))
    6. End If
    7. Next

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Unwesen“ ()