Datei auslesen und bestimmte Abschnitte ignorieren.

  • Allgemein

Es gibt 7 Antworten in diesem Thema. Der letzte Beitrag () ist von Beatsleigher.

    Datei auslesen und bestimmte Abschnitte ignorieren.

    Moin, moin - Oder doch eher Abend?

    Ich arbeite derzeit an ein Patch-System fuer mein Programm und moechte, dass die Version aus einer Datei herausgelesen wird, aber in dieser Datei stehen auch Infos fuer den Benutzer.
    Nun, ich habe in dieser Datei Abschnitte, wo File.Ignore und File.Ignore_End stehen. Diese Abschnitte soll das Programm ignorieren, wie das Apostroph in VB.
    Hier ist das, was in der Datei steht:
    Spoiler anzeigen

    Quellcode

    1. ############File.Ignore############
    2. ##
    3. ## Do not move, change or modify this file and/or its content.
    4. ##
    5. ## .Version file.
    6. ## This file is intended for use only
    7. ## with Universal Android Toolkit
    8. ## by Team M4gkBeatz.
    9. ##
    10. ## It may be used by other files/programs.
    11. ##
    12. ## This file is modified with/by the
    13. ## Universal Android Toolkit Patcher.
    14. ## By editing the contents of this file,
    15. ## you will remove any and every form of warranty,
    16. ## that may come with the use of this file.
    17. ############File.Ignore_End############
    18. ############File.NotIgnore############
    19. #
    20. ############File.UAT-Lib.Version############
    21. ##
    22. ##
    23. ## Major Version: 0
    24. ## Minor Version: 2
    25. ## Build Version: 0
    26. ## Revision Version: 4
    27. ##
    28. ##
    29. ############File.UAT-Lib.Version_End############
    30. #
    31. ############File.NotIgnore_End############
    32. ############File.Ignore############
    33. ############Program.Info############
    34. ##
    35. ############Universal Android Toolkit############
    36. ## This program will be patched via a .zip file
    37. ## which is downloaded as a temp. file and
    38. ## extracted to \Application.
    39. ##
    40. ############Universal Android Toolkit_End############
    41. ##
    42. ############Universal Android Toolkit Patcher############
    43. ## The Patching program provided with this software will
    44. ## be installed via an installer.
    45. ## The Patcher will be shut down, only to then activate
    46. ## the installer. Once the installer has exited, the Patcher
    47. ## will start up and once again check for patches and updates.
    48. ############Universal Android Toolkit Patcher_End############
    49. ##
    50. ############Program.Info_End############
    51. ############File.Ignore_End############



    Ich hatte mit dem Gedanken gespielt, File.ReadAllText zu nutzen, aber dann kam mir in den Sinn, dass ich damit nichts 'ignorieren' kann, wie Compiler.
    Waere toll wenn ihr mir ein paar Vor- und Ratschlaege geben koenntet :)

    LG,
    Beatsleigher.
    Das Kommentarsystem von Compilern funktioniert anders. Sie werten eine Zeile nur soweit aus, bis sie auf ein bestimmtes Zeichen stoßen (in VB das '). Wenn du auch dieses System verwenden würdest, dann wäre das mit ein paar Zeilen Code implementiert.
    Eine standard INI-Datei hat z.B. das "#" als Kommentarzeichen. Demzufolge gilt dort das:

    Quellcode

    1. name1 = value1
    2. name2 = value2
    3. # Kommentar 1
    4. name3 = value3 # Kommentar 2

    Also alles, was hinter einem "#" kommt, wird nicht ausgewertet. Wenn das "#" am Anfang der Zeile steht, dann wird die komplette Zeile ignoriert.

    Die einfachste Vorgehensweise ist dabei ein zeilenweises auslesen der Datei. Wenn die Zeile mit "#" beginnt, tust du gar nichts. Andernfalls prüfst du, ob die Zeile ein "#" enthält. Wenn ja, schneidest du alles in der Zeile ab diesem Zeichen ab. Übrig bleibt der richtige Code, den du dann auswerten kannst.
    Ja, das verstehe ich ja. Aber ich habe ueberall in der Datei Hashes. Und ich will ja ganze Ausschnitte nicht ausgelesen haben.

    Z.B.:
    Das hier soll ignoriert werden, weil es zwischen ############File.Ignore############ und ############File.Ignore_End############ ist.

    Quellcode

    1. ############File.Ignore############
    2. ##
    3. ## Do not move, change or modify this file and/or its content.
    4. ##
    5. ## .Version file.
    6. ## This file is intended for use only
    7. ## with Universal Android Toolkit
    8. ## by Team M4gkBeatz.
    9. ##
    10. ## It may be used by other files/programs.
    11. ##
    12. ## This file is modified with/by the
    13. ## Universal Android Toolkit Patcher.
    14. ## By editing the contents of this file,
    15. ## you will remove any and every form of warranty,
    16. ## that may come with the use of this file.
    17. ############File.Ignore_End############


    Und das hier soll nicht ignoriert werden.

    Quellcode

    1. ############File.NotIgnore############
    2. #
    3. ############File.UAT-Lib.Version############
    4. ##
    5. ##
    6. ## Major Version: 0
    7. ## Minor Version: 2
    8. ## Build Version: 0
    9. ## Revision Version: 4
    10. ##
    11. ##
    12. ############File.UAT-Lib.Version_End############
    13. #
    14. ############File.NotIgnore_End############

    Weisst du, wie ich das meine?
    Wie wäre es damit ?:

    VB.NET-Quellcode

    1. Imports System.IO
    2. Public Class Form1
    3. Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Start.Click
    4. Using r As StreamReader = New StreamReader("test.txt")
    5. Dim line As String = " "
    6. Dim reading_enabled As Boolean = True
    7. Do While (line IsNot Nothing)
    8. line = r.ReadLine
    9. If line IsNot Nothing AndAlso line.Contains("File.Ignore") Then reading_enabled = False
    10. If reading_enabled = True Then TextBox1.Text &= line & vbCrLf
    11. If line IsNot Nothing AndAlso line.Contains("File.Ignore_End") Then reading_enabled = True
    12. Loop
    13. End Using
    14. End Sub
    15. End Class
    »There's no need to "teach" atheism. It's the natural result of education without indoctrination.« — Ricky Gervais
    In dem Fall solltest du nochmal zwischen Kommentaren und Anschnitten unterscheiden. Das erste wäre ein Kommentar, den du mit der oben genannten Methode ignorieren könntest. Für die restlichen Abschnitte solltest du dir ein anderes Pattern überlegen, zB.:

    Quellcode

    1. [Blockname]
    2. {
    3. hier der Inhalt
    4. }