cs Datei Text auslesen

  • VB.NET
  • .NET (FX) 4.5–4.8

Es gibt 20 Antworten in diesem Thema. Der letzte Beitrag () ist von RodFromGermany.

    cs Datei Text auslesen

    Hallo,
    ich möchte gerne von mehreren .cs Dateien die Version auslesen.
    Das Problem für mich dabei ist, das die Version leider nicht in

    VB.NET-Quellcode

    1. FileVersionInfo.GetVersionInfo
    zu finden ist sondern nur im Text der Datei.

    VB.NET-Quellcode

    1. ......
    2. ......
    3. ......
    4. [Info("FurnaceLevels", "SinKoh & David", "1.2.8")]
    5. ......
    6. ......
    7. ......

    Es ist nicht immer dieselbe Zeile und auch die Länge der Zeile variiert.
    Der Aufbau der Zeile ist immer gleich, angefangen mit [Info("PluginName", "Entwickler", "Version")]
    Die Line finde ich so, aber weiß nicht wie ich weiter machen kann, damit ich nur die Version bekomme und nicht die ganze Line.

    VB.NET-Quellcode

    1. For Each Line As String In IO.File.ReadAllLines("E:\Backup\Test Server\oxide\plugins\FurnaceLevels.cs")
    2. If Line.Contains("Info") Then
    3. Label1.Text = Line
    4. End If
    5. Next


    Wie kann ich das am besten machen?

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

    @Pixxxas Dann musst Du die Datei zeilenweise auslesen und jede Zeile mit .Contains("...") überprüfen.
    Wenn gefunden, dann feddich.
    Und:
    Solch ne Frage nach 756 Posts im Forum?
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Deine Beispielzeile: [Info("FurnaceLevels", "SinKoh & David", "1.2.8")]
    Da erstmal den Anfang und das Ende entfernen, indem Du mit Substring arbeitest. Also

    VB.NET-Quellcode

    1. Dim DeineGekürzteZeile = DeineZeile.Substring(xyz) 'xyz = die korrekten Parameter, siehe Doku

    Dann am Komma aufteilen

    VB.NET-Quellcode

    1. Dim DieEinzelteile = DeineGekürzteZeile.Split(korrekteParameter)

    Dann den richtigen Teil hernehmen (den 3.) und ggf. noch die "" entfernen.
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.
    @Pixxxas Dann splitte die Zeile an den Apostrophen und hole Dir Deinen String aus dem richtigen Index des Resultat-Arrays:

    VB.NET-Quellcode

    1. Dim line = "[Info(""FurnaceLevels"", ""SinKoh & David"", ""1.2.8"")]"
    2. Dim parts = line.Split(""""c)
    3. MessageBox.Show(parts(5))
    Ich gehe mal davon aus, dass Du die richtige Zeile schon gefunden hast.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Ich hab das jetzt so gemacht

    VB.NET-Quellcode

    1. Dim Test As String = Label1.Text
    2. Dim SubTest = Test.Split(","c)(2)


    und dann das erste und die letzten beiden zeichen entfernt.



    Warum kommt der Fehler bei der letzten Datei? alle Davor gehen nur nicht die letzte Datei.

    HTML-Quellcode

    1. Message=Der Index war außerhalb des Arraybereichs.


    VB.NET-Quellcode

    1. Dim dateien As Array = My.Computer.FileSystem.GetFiles("C:\oxide").ToArray
    2. For Each datei In dateien
    3. For Each Line As String In IO.File.ReadAllLines(datei)
    4. If Line.Contains("Info") Then
    5. Dim Test As String = Line
    6. Dim parts = Line.Split(""""c)
    7. MessageBox.Show(parts(5))
    8. End If
    9. Next
    10. Next


    Beiträge zusammengefügt. ~Thunderbolt
    Bilder
    • 1.png

      23,87 kB, 895×388, 46 mal angesehen

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

    @Pixxxas Sieh Dir die Variablen Line und parts an.
    Mouse HOvere über dieser Variable
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Hab jetzt ne weile gesucht und getan aber ich versteh es nicht wiso und warum :/

    VB.NET-Quellcode

    1. Dim dateien As Array = My.Computer.FileSystem.GetFiles("C:\oxide").ToArray
    2. For Each datei In dateien
    3. For Each Line As String In IO.File.ReadAllLines(CType(datei, String))
    4. If Line.Contains("Info") Then
    5. Dim parts = Line.Split(""""c)
    6. MessageBox.Show(parts(5))
    7. End If
    8. Next
    9. Next
    @Pixxxas Die letzte Zeile hat wohl ein anderes Format.
    Vergewissere Dich davon.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    In dem Zustand, wo die Exception zuschlägt, hoverst Du die genannten Variablen, nachdem Du die Studio-Meldung weggeklickt hast.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!

    RodFromGermany schrieb:

    In dem Zustand, wo die Exception zuschlägt, hoverst Du die genannten Variablen, nachdem Du die Studio-Meldung weggeklickt hast.
    vb-paradise.de/index.php/Attac…d0d8e384d7b88ebcfeeea5800


    Den fehler seh ich doch jedes mal oder was meinst du? Ich check jetzt gar nichts mehr.
    Bzw. wie lasse ich mir die Version im Label anzeigen?
    Würde mich freuen wenn mir ein weiter helfen könnte und es richtig erklären könnte.

    VB.NET-Quellcode

    1. Dim dateien As Array = My.Computer.FileSystem.GetFiles("C:\oxide").ToArray
    2. For Each datei In dateien
    3. For Each Line As String In IO.File.ReadAllLines(CType(datei, String))
    4. If Line.Contains("Info") Then
    5. Dim parts = Line.Split(""""c)
    6. MessageBox.Show(parts(5))
    7. End If
    8. Next
    9. Next

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

    @Pixxxas Ich präsentiere den Holzhammer:
    Spoiler anzeigen

    VB.NET-Quellcode

    1. Dim dateien As Array = My.Computer.FileSystem.GetFiles("C:\oxide").ToArray
    2. For Each datei In dateien
    3. For Each Line As String In IO.File.ReadAllLines(CType(datei, String))
    4. If Line.Contains("Info") Then
    5. Dim parts = Line.Split(""""c)
    6. Try
    7. MessageBox.Show(parts(5))
    8. Catch ex As Exception
    9. MessageBox.Show(Line)
    10. MessageBox.Show(parts.Length.ToString())
    11. End Try
    12. End If
    13. Next
    14. Next
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    @RodFromGermany
    Soweit habe ich es auch geschafft. ABER
    3 Dateien sind im Ordner, die Versionen werden mir auch nacheinander ausgeben. Bis auf Nummer 3, da kommt dann der Code aus irgend einer stelle von Datei 1.
    Bilder
    • 3.png

      43,57 kB, 1.002×630, 44 mal angesehen
    Dateien
    • Line.rar

      (177,41 kB, 38 mal heruntergeladen, zuletzt: )
    Das ist doch Unfug. Das ist Teil der 2. Datei. Das liegt daran, dass in der Datei eben noch eine Zeile mit dem Wort Info vorkommt.
    Es gibt mehrere Möglichkeiten. Entweder Du brichst die Verarbeitung der Datei nach Auffinden der entsprechenden Zeile ab oder Du suchst spezifischer: Statt If Line.Contains("Info") Then eben z.B. If Line.Trim.StartsWith("[Info(") Then
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.