Mehrere Text zwischen zwei Schlüsselbegriffen und in eine neue Textdatei exportieren.

  • VB.NET

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

    Mehrere Text zwischen zwei Schlüsselbegriffen und in eine neue Textdatei exportieren.

    Hallo,

    vielleicht kann man mir bitte helfen, ob das für einen Laien wie mich überhaupt möglich ist binnen kurzer Zeit zu realisieren oder ob das einen fähigen Programmierer braucht, ich bin eben Handwerker :)
    Ich habe mir Visual Basic 2010 organisiert und versucht das zu lösen, aber komme überhaupt nicht weiter, liegt leider schon zu lange zurück. Oder gibt es dafür schon ein Programm? Ein Kumpel hatte mir versprochen zu helfen, aber auf den ist nicht Verlass :\

    Ausgangssituation:

    Ich habe eine Textdatei, aus der ich den Text zwischen Schlüsselbegriffen auslesen und am besten in neue Exceltabelle schreiben möchte, inklusive Zeilenumbrüche.

    Die Textdatei sieht so aus:

    _ANFANG_
    'Text über 1000 Zeichen'
    _ENDE_

    oder

    _ANFANG2_
    'Text über 1000 Zeichen'
    _ENDE_

    Für Hilfe wäre ich dankbar.

    *Topic verschoben*

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Marcus Gräfe“ ()

    Nun, wie weit kennst Du Dich denn mit VB im allgemeinen aus? Programmiergrundkenntnisse sind da? Wie sieht es mit Excel-aus-VisualStudio-heraus-öffnen aus? Letztenendes ist die Herangehensweise (anscheinend) leicht:
    • Datei öffnen
    • nach dem Anfangstext suchen
    • Zeilen einlesen, bis Endtext kommt
    • Exceldatei erstellen öffnen
    • relevante Zeilen einfügen
    Bei welchem Punkt kommst Du nicht weiter? Bzw. welche sind für Dich kein Problem?
    btw: Warum VS2010 und nicht VS2017?
    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.
    Ehrlicherweise habe ich mir einfach paar Fragmente aus dem Internet herausgesucht, aber damit läuft es nicht.
    Ich habe es so versucht:

    Module Module1

    Sub Main()
    Dim strZeile As String
    Dim Start As String
    Dim Ende As String
    Dim i As Long
    Start = "_Anfang_"
    Ende = "_Ende_"
    OPEN "D:\input.txt" FOR INPUT AS #1
    OPEN "D:\output.txt" FOR OUTPUT AS #2
    i = 0
    While Not EOF(1)
    LINE INPUT #1, strZeile

    If i Then
    PRINT #2, strZeile
    End If

    If InStr(strZeile, Start) Then
    PRINT #2, strZeile
    i = 1
    End If
    If InStr(strZeile, Ende) Then
    i = 0
    End If
    End While
    CLOSE #1
    CLOSE #2
    End Sub

    End Module
    Nur damit wir nicht aneinander vorbeireden: Womit arbeitest Du? Dein Code sieht nach VBA aus (VB in z.B. Excel), Dein ThreadTag sagt VBScript, Du schreibst was von Visual Studio 2010. In welcher Umgebung befinden wir uns? Das ist entscheidend.
    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.
    OK, Dein Code ist im Ansatz grundsätzlich nicht sooo falsch, wird aber mit VB.Net etwas anders angegangen:

    VB.NET-Quellcode

    1. Private Function GetLinesFromFile(FilePath As String, StartText As String, EndText As String) As IEnumerable(Of String)
    2. If Not IO.File.Exists(FilePath) Then Return Nothing
    3. Dim TextLineList As New List(Of String)
    4. Dim SaveTextLines = False
    5. For Each TextLine In IO.File.ReadAllLines(FilePath)
    6. If TextLine = StartText Then
    7. SaveTextLines = True
    8. Continue For
    9. End If
    10. If TextLine = EndText Then Exit For
    11. If SaveTextLines Then TextLineList.Add(TextLine)
    12. Next
    13. Return TextLineList
    14. End Function

    Versuch mal, ob Du damit ne Liste über Deine auszulesenden Daten bekommst.
    EDIT: kleine Korrektur vorgenommen
    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.

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

    Nun, indem Du die gepostete Funktion entsprechend aufrufst.
    Zieh Dir z.B. einen Button auf Deine Form, mach einen Doppelklick drauf, dann kommst Du in die Prozedur Private Sub Button1_Click und da schreibst Du dann z.B. rein:

    VB.NET-Quellcode

    1. Dim TextLines = GetLinesFromFile(HierKommtDeinTatsächlicherDateinameRein, "_Anfang_", "_Ende_")
    2. Stop
    Sobald der Debugger zu Stop kommt, unterbricht er das Programm und Du kannst in die Variable TextLines reinschauen, indem Du die Maus darüberfährst. Dort sollten dann Deine Textzeilen auftreten. Ist dem so?

    btw. Hab im Code noch zwei Zeilen vertauscht. Zuvor wurde die Abschlusszeile "_Ende_" noch mit in die Textzeilenliste aufgenommen. Nun nicht mehr.
    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.
    Das wiederum ist etwas wenig Info, denn bei mir klappt es. Poste mal bitte Deinen bisherigen Code - nur zum Vergleich. An welcher Stelle funktioniert was genau nicht? Fehlermeldung? Kein Text in der Variablen? Findet er Deine Datei nicht? Existiert die Datei denn dort, wo Du sie vermutest bzw. hast Du den Speicherort der Datei an die Funktion korrekt weitergegeben? Sind die anderen beiden Parameter in Deiner Datei auch genau so zu finden, wie Du sie in der Funktion als Parameter angegeben hast?
    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.
    Danke Dir sehr für Deine Hilfe.

    Ich glaube ich bin einfach zu blöd / mittlerweile einfach zu alt dafür. Das mit der zusätzlichen Schaltfläche hat mich zunehmend verwirrt.
    Mit den (für mich neuen) Befehlen komme ich auch nicht recht zu Recht. Ein einfaches Skript bräuchte ich, Dateneingang - Datenausgang. :/

    Mir ist das Thema wirklich zu komplex. Wie gesagt, ich bin halt Handwerker, kein Programmierer.
    Ohje, ein "einfaches Script" in Visual Basic ist da nicht möglich. So funktioniert Visual Basic nicht. Vielleicht wär das noch innerhalb von Excel möglich, da man da keine Form zusammenbauen muss. Aber dann funktioniert der Code nicht mehr, da VBA im Vergleich zu VB.Net etwas eingestaubter ist. Sorry.
    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.
    Na zum Glück hatte ich noch irgendwo ne VB2010-Version.
    In dem Projekt muss im Code noch Quell- und Zielpfad an die tatsächlichen Pfade angepasst werden.
    Versuch erstmal mit diesem Code klarzukommen. MSDN und auch die Forensuche sind da sehr hilfreich, wenn Du nicht weiterkommst. Bei größeren Verständnisschwierigkeiten kannst Du Dich natürlich melden. Aber es wär erstmal wichtig, das bisherige zu verstehen. Excel noch einzubauen ist für den Geübten (meist) nicht sonderlich schwierig. Aber für "Hobbybastler" ein kleines, mittelschwieriges Sudoku in der Größe 15x15.
    Dateien
    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.
    Ehrlicherweise habe ich mir einfach paar Fragmente aus dem Internet herausgesucht, aber damit läuft es nicht.


    Das liegt wohl daran, das _ANFANG_ (wie in deinem Beispiel) nichr mit _Anfang_ (wie in deinem Code) übereinstimmt.

    Da du ja den Text in Exel einfügen willst, kannst du auch VBA verwenden.

    Hier ein funktionierendes VBA Beispiel:
    Test-Textdatei:
    aaa
    bbb
    _ANFANG_
    Text über 1000 Zeichen'
    111
    222
    999
    000
    _ENDE_
    xxx
    yyy


    Visual Basic-Quellcode

    1. Sub Main()
    2. Dim strZeile As String
    3. Dim Start As String
    4. Dim Ende As String
    5. Dim i As Long
    6. Start = "_ANFANG_"
    7. Ende = "_ENDE_"
    8. Open "D:\input.txt" For Input As #1
    9. Open "D:\output.txt" For Output As #2
    10. i = 0
    11. While Not EOF(1)
    12. Line Input #1, strZeile
    13. If i Then
    14. Print #2, strZeile
    15. End If
    16. If InStr(strZeile, Start) Then
    17. Print #2, strZeile
    18. i = 1
    19. End If
    20. If InStr(strZeile, Ende) Then
    21. i = 0
    22. End If
    23. Wend
    24. Close
    25. End Sub