Textdatei auslesen

  • VB.NET

Es gibt 14 Antworten in diesem Thema. Der letzte Beitrag () ist von Cr4ckY.

    Textdatei auslesen

    Hi hab ein Problem beim Auslesen einer Textdatei. Ich versuchs mal zu erklären: also in einer .txt-Datei sind etwa 150 Einträge / Zeilen mit Registry-Pfaden zu verschiedenen Spiele-Serials. So sieht das aus, als Beispiel Call of Duty 2:

    "Call of Duty 2,HKLM,Software\Activision\Call of Duty 2,codkey" Das ist jetzt eine Zeile in der .txt-Datei. Wie gesagt hab ich darin über 150 Spiele und das könnte etwas dauern wenn ich alle einzeln bearbeite. Auf meiner Form ist eine ListView und beim Form_Load Event steht folgendes:

    VB.NET-Quellcode

    1. Dim Path As RegistryKey
    2. Dim Serial As String
    3. 'Call of Duty 2
    4. Path = Registry.LocalMachine.OpenSubKey("SOFTWARE\Activision\Call of Duty 2")
    5. Serial = Path.GetValue("codkey")
    6. Path.Close()
    7. ListView1.Items.Add("Call of Duty 2")
    8. ListView1.Items(0).SubItems.Add(Serial)

    Ja, so müsste ich das dann mit allen 150 Spielen machen. Gibt es irgendeine Funktion die diese Textdatei ausliest und dann prüft, ob es diesen Pfad in der Registry gibt? Wenn ja, dann soll es in die ListView eintragen werden, wenn nicht dann den nächsten Pfad suchen.
    Du liest deine Datei ein

    VB.NET-Quellcode

    1. Dim lines() As String = IO.File.ReadAllLines("die_datei.txt")

    dann machst du eine Schleife fuer jede Zeile

    VB.NET-Quellcode

    1. Dim lines() As String = IO.File.ReadAllLines("die_datei.txt")
    2. For Each Zeile As String In lines
    3. ' jetzt hast du deine Zeile in der Variablen Zeile
    4. ' damit kannst du weiter arbeiten
    5. Next
    Erstmal danke für deine Antwort. Aber ich versteh nicht ganz, wie ich das dann richtig auslesen soll. Also ich meine bei COD2 steht ja "Call of Duty 2,HKLM,Software\Activision\Call of Duty 2,codkey". Und im Code muss ich dann die Wörter nach dem 2 Komma auslesen also

    VB.NET-Quellcode

    1. Path = Registry.LocalMachine.OpenSubKey('Hier müssen dann die Wörter nach dem 2 Komma, also: Software\Activision\Call of Duty 2)
    Dann das nächste:

    VB.NET-Quellcode

    1. Serial = Path.GetValue('Hier muss das Wort nach dem 3 Komma rein, also codkey)

    das versteh ich nicht ganz..hoffentlich verstehst du was ich meine

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

    dann musst du weiter runter brechen
    Beispiel:
    Spoiler anzeigen

    VB.NET-Quellcode

    1. Dim lines() As String = IO.File.ReadAllLines("die_datei.txt")
    2. For Each Zeile As String In lines
    3. ' jetzt hast du deine Zeile in der Variablen Zeile
    4. ' damit kannst du weiter arbeiten
    5. ' Dann musst du weiter mit Splitt deine Zeilen in kleinere Teile unterteilen
    6. '"Call of Duty 2,HKLM,Software\Activision\Call of Duty 2,codkey".
    7. Dim parts() As String = Split(Zeile, ",")
    8. Dim Part0 As String = parts(0) ' "Call of Duty 2
    9. Dim Part1 As String = parts(1) ' HKLM
    10. Dim Part2 As String = parts(2) ' Software\Activision\Call of Duty 2
    11. Dim Part3 As String = Part0(3) ' codkey"
    12. Next

    bei part 0 und 3 befinden sich noch " . die solltest du dann noch mit replace rausholen.
    Ok, also alles geht jetz außer

    VB.NET-Quellcode

    1. Dim Part3 As String = parts(3) ' codkey

    Da kommt folgender Fehler: Der Objektverweis wurde nicht auf eine Objektinstanz festgelegt.Hier der Form_Load Code:

    VB.NET-Quellcode

    1. Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
    2. Dim Path As RegistryKey
    3. Dim Serial As String
    4. Dim lines() As String = IO.File.ReadAllLines("C:\Users\Aleksej\Desktop\serials.txt")
    5. For Each Zeile As String In lines
    6. Dim parts() As String = Split(Zeile, ",")
    7. Dim Part0 As String = parts(0) ' "Call of Duty 2
    8. Dim Part1 As String = parts(1) ' HKLM
    9. Dim Part2 As String = parts(2) ' Software\Activision\Call of Duty 2
    10. Dim Part3 As String = parts(3) ' codkey
    11. Path = Registry.LocalMachine.OpenSubKey(Part2)
    12. Serial = Path.GetValue(Part3)
    13. Path.Close()
    14. ListView1.Items.Add(Part0)
    15. ListView1.Items(0).SubItems.Add(Serial)
    16. Next
    17. End Sub
    dann gibt es den parts(3) auch nicht.
    du musst in deiner datei sicherstellen das auch jede Zeile geleich ist.

    Zeile1
    0 , 1 , 2, 3
    Call of Duty 2,HKLM,Software\Activision\Call of Duty 2,codkey
    Spiel, HKLM, Pfad\Name\Spiel , codekey

    wenn leere Felder dann trotzdem mit komma trennen
    zum schluss müssen in jede Zeile die gleiche Menge an kommas sein.
    So ok, klappt nun, wenn in der txt-Datei Call of Duty 2,HKLM,Software\Activision\Call of Duty 2,codkey steht, aber wenn ich dann noch eine Zeile einfügen, z.B. Call of Duty 4,HKLM,Software\Activision\Call of Duty 4,codkey dann wird in der ListView nur der Name, des Spiels eingetragen, aber nicht der Key. Und beim Pfad bin ich mir ziemlich sicher. Muss man da vllt auch For Each bei

    VB.NET-Quellcode

    1. Path = Registry.LocalMachine.OpenSubKey(Part2)
    2. Serial = Path.GetValue(Part3)
    3. Path.Close()
    4. ListView1.Items.Add(Part0)
    5. ListView1.Items(0).SubItems.Add(Serial)
    benutzen?

    Die Textdatei sieht so aus:

    Quellcode

    1. Call of Duty 2,HKLM,SOFTWARE\Activision\Call of Duty 2,codkey
    2. Call of Duty 4,HKLM,Software\Activision\Call of Duty 4,codkey


    Wenn ich Call of Duty 4 durch Call of Duty 2 ersetze, dann wird der Key angezeigt, wenn ich aber beide Zeilen in der TextDatei habe, dann wird nur der Key von der 1. Zeile angezeigt..

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

    ListView Besipiel:
    Spoiler anzeigen

    VB.NET-Quellcode

    1. Dim lines() As String = IO.File.ReadAllLines("die_datei.txt")
    2. For Each Zeile As String In lines
    3. ' jetzt hast du deine Zeile in der Variablen Zeile
    4. ' damit kannst du weiter arbeiten
    5. ' Dann musst du weiter mit Splitt deine Zeilen in kleinere Teile unterteilen
    6. '"Call of Duty 2,HKLM,Software\Activision\Call of Duty 2,codkey".
    7. Dim parts() As String = Split(Zeile, ",")
    8. Dim Part0 As String = parts(0) ' "Call of Duty 2
    9. Dim Part1 As String = parts(1) ' HKLM
    10. Dim Part2 As String = parts(2) ' Software\Activision\Call of Duty 2
    11. Dim Part3 As String = Part0(3) ' codkey"
    12. Dim item1 As New ListViewItem(Part0)
    13. ListView1.Items.Add(item1)
    14. item1.SubItems.Add(Part1)
    15. item1.SubItems.Add(Part2)
    16. item1.SubItems.Add(Part3)
    17. Next

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „ChaosBernd“ ()

    Edit: Tut mir leid, aber ich bin nich besonders gut in Codes lesen, aber ich hab grad versucht die ListView durch eine ListBox zu ersetzen und als ListBox Eintrag hab ich dann

    VB.NET-Quellcode

    1. ListBox1.Items.Add(Part0 & " " & Serial)
    und es werden nun auch beide Namen + Keys angezeigt..wieso geht es dann aber nich mit einer ListView?

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

    Ich habe mit ListViews nicht viel am Hut. Ich finde DataGridViews besser.
    vieleicht so:
    Spoiler anzeigen

    VB.NET-Quellcode

    1. Dim lines() As String = IO.File.ReadAllLines("die_datei.txt")
    2. For Each Zeile As String In lines
    3. ' jetzt hast du deine Zeile in der Variablen Zeile
    4. ' damit kannst du weiter arbeiten
    5. ' Dann musst du weiter mit Splitt deine Zeilen in kleinere Teile unterteilen
    6. '"Call of Duty 2,HKLM,Software\Activision\Call of Duty 2,codkey".
    7. Dim parts() As String = Split(Zeile, ",")
    8. Dim Part0 As String = parts(0) ' "Call of Duty 2
    9. Dim Part1 As String = parts(1) ' HKLM
    10. Dim Part2 As String = parts(2) ' Software\Activision\Call of Duty 2
    11. Dim Part3 As String = Part0(3) ' codkey"
    12. Dim item1 As New ListViewItem(Part0)
    13. ListView1.Items.Add(item1)
    14. item1.SubItems.Add(Part1)
    15. item1.SubItems.Add(Part2)
    16. item1.SubItems.Add(Part3)
    17. Next
    Ja das klappt auch, aber das wird dann in so eine Art "Icons" angezeigt. Mir wäre eine ListView mit GridLines lieber, also eine Tabelle. Hab Post #9 nochmal bearbeitet, vielleicht könntest du mir darauf eine Antwort geben

    Edit: Vielleicht weil Serial als SubItem von ListView1.Items(0) ist. Also von der ersten Zeile..
    Sag ich doch.
    DataGridView ist das mit Linien und vielen schönen sachen.

    aber ListView geht auch

    VB.NET-Quellcode

    1. ListView1.View = View.Details
    2. ListView1.LabelEdit = True
    3. ListView1.AllowColumnReorder = True
    4. ListView1.FullRowSelect = True
    5. ListView1.GridLines = True
    6. ListView1.Sorting = SortOrder.Ascending
    Habs jetzt endlich!

    VB.NET-Quellcode

    1. Dim Path As RegistryKey
    2. Dim Serial As String
    3. Dim lines() As String = IO.File.ReadAllLines("serials.txt")
    4. For Each Zeile As String In lines
    5. Dim parts() As String = Split(Zeile, ",")
    6. Dim Part0 As String = parts(0) ' Name
    7. Dim Part1 As String = parts(1) ' Registry-Ordner
    8. Dim Part2 As String = parts(2) ' Pfad
    9. Dim Part3 As String = parts(3) ' Datei
    10. Path = Registry.LocalMachine.OpenSubKey(Part2)
    11. Serial = Path.GetValue(Part3)
    12. Path.Close()
    13. ListView1.Items.Add(Part0).SubItems.Add(Serial)
    14. Next


    Vielen Dank für deine Bemühungen ChaosBernd!!
    bei Leuten die sich mühe geben, selber probieren und mitdenken

    immer wieder
    danke

    und dann auch noch mit Option Strict on und in der Kurzen Version

    VB.NET-Quellcode

    1. Dim Path As Microsoft.Win32.RegistryKey
    2. Dim Serial As String
    3. Dim lines() As String = IO.File.ReadAllLines("serials.txt")
    4. For Each Zeile As String In lines
    5. Dim parts() As String = Split(Zeile, ",")
    6. Path = Microsoft.Win32.Registry.LocalMachine.OpenSubKey(parts(2))
    7. Serial = CStr(Path.GetValue(parts(3))) ' in Cstr wandeln
    8. Path.Close()
    9. ListView1.Items.Add(parts(0)).SubItems.Add(Serial)
    10. Next

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

    Nächstes Problem, hat aber was mit der Registry zu tun. Die Serial von z.B. Need for Speed Underground 2 ist in: HKLM\SOFTWARE\Electronic Arts\EA Games\Need for Speed Underground 2\ergc Dort ist eine Datei die heißt "(Standard)" bei Typ steht "REG_SZ" und als Wert steht die Serial, aber ich kanns nicht auslesen, weil er die Datei nicht findet?! Wenn ich eine neue Datei mit dem Namen ergc anlege und als Wert die Serial eingebe, dann kann ich es auch auslesen, aber das bringt mir ja nichts weil ich die Datei ja nicht auf einem fremden PC anlegen kann..hab schon in VB ergc, Standard, (Standard), Standart, (Standart) probiert aber nichts klappt.