Visual Basic: Programm zur Bearbeitung einer TXT Datei

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

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

    Visual Basic: Programm zur Bearbeitung einer TXT Datei

    Hallo zusammen,

    wie ihr sicherlich sehen könnt, bin ich neu hier im Forum, daher vielleicht erst mal ein paar generelle Worte von und zu mir :)
    Meine Erfahrungen mit Programmiersprachen beschränken sich rein auf Visual Basic, und das auch nur als Grundlagen. Wir hatten eine Veranstaltung "Grundlagen der EDV" wo mit VB vor allem als Konsolenanwendung ein paar kleinere Programme geschrieben wurden.
    Diese Veranstaltung ist zudem auch schon "ein Weilchen" her :P

    Mir ist bewusst, dass speziell die Seiten von Microsoft eigentlich super sind, und dass vermutlich 9 von 10 meiner Fragen innerhalb von 3 Sekunden per Google zu klären wären. Nur sind diese Seiten eben leider eher für fortgeschrittene Nutzer, ich verstehe dort oft nur Bahnhof, und wenn ich die Vorschläge von dort einfach Copy&Paste um einfach mal zu sehen was passiert, dann hagelt es Fehlermeldungen weil es eben oft an Deklarationen, Definitionen, Freischaltungen etc. hapert. Ich würde daher euch bitten etwas Rücksicht zu nehmen und "für Dummies" (also mich :D ) zu erklären, gerne auch etwas ausschweifender.

    Wenn sich vielleicht sogar wer finden würde, der mir etwas Starthilfe geben kann & mag, wäre ich natürlich jederzeit bereit auch per PM und andere Wege Informationen zu tauschen.


    So, nun aber zu meinem Problemchen.
    Ich muss oftmals eine riesige und für das menschliche Auge verwirrende TXT Datei modifizieren. Hier kam mir der Gedanke "Hey, das sind immer die gleichen Schritte, ein Programm wäre doch super".
    Und da bin ich nun, denn so einfach ist es eben doch nicht.

    Das Programm soll aus 3 Teilen bestehen bzw. 3 Funktionen haben und per VB / Forms geschrieben werden.
    Ich würde gerne hinten anfangen, denn die Teile bereiten mir aktuell wenig bis keine Probleme und können - zumindest vorerst - ausgeklammert werden, denke ich.

    3) Der letzte Punkte ist eine "Speichern unter" Funktion, wobei diese schon funktioniert
    --> Können wir einklammern.

    2) Es gibt ca. 10 feste Texte die immer gleich bleiben und jeweils in einer eigenen TXT Datei vorliegen. Diese sind nicht immer alle nötig, daher habe ich Checkboxen die bei Aktivierung die dazugehörigen TXT Dateien einfach anfügen. Ich habe also in meiner Anwendung rechts ein paar Checkboxen die ich aktivieren kann. Wenn ich meine Auswahl getroffen habe und auf einen "Zusammenführen" Button klicke, dann kriege ich die gewünschten Textbausteine in einer Richtextbox aneinandergereiht angezeigt. Das passt soweit auch.
    --> Können wir einklammern.

    1) Hier hapert es nun gewaltig und ich würde eure Hilfe brauchen.
    Es geht um folgende Problemstellung. Auf meinem PC liegt an einem beliebigen Ort eine TXT Datei ab. Diese müsste eingelesen und an 3 Stellen modifiziert werden. Die Datei selbst ist wie gesagt recht groß und verwirrend, daher nehmen wir hier mal einen Dummy, der aber vollkommen ausreicht um meine Probleme zu verdeutlichen. Die Datei hat also den folgenden Inhalt:

    =======================================================================================
    Prog10
    67
    Kopfzeile 1
    Kopfzeile 2
    Kopfzeile 3
    Normaler Text Teil A Zeile 1
    Normaler Text Teil A Zeile 2
    Normaler Text Teil A Zeile 3
    Normaler Text Teil A Zeile 4
    M30
    Normaler Text Teil B Zeile 1
    Normaler Text Teil B Zeile 2
    Normaler Text Teil B Zeile 3
    Normaler Text Teil B Zeile 4
    M30
    =======================================================================================
    • Ich bräuchte also einen "Datei Öffnen" Dialog um die TXT Datei mit obigem Inhalt einzulesen.
    • Im ersten Schritt müssten nun die oben sichtbaren Kopfzeilen 1 bis 3 gelöscht und durch neue Kopfzeilen aus einer vorhandenen TXT Datei ersetzt werden. Ich bräuchte also eine Funktion, die diese Zeilen löscht und an deren Stelle eine Text - Datei einfügt. Es sind aber immer die gleichen Zeilen die weg müssen, und dafür soll eine extern abliegende TXT Datei bzw. deren Inhalt dort hin.
    • Im zweiten Schritt geht es um den ersten "M30" Eintrag. Der erste M30 Eintrag muss gesucht und wiederum durch eine vorhandene Textdatei ersetzt werden. Das könnt ihr euch in etwa so vorstellen, wie die Suchen&Ersetzen Funktion von Excel, nur dass eben der Part ERSETZEN aus einer TXT Datei kommt. "M30" kommt nur 2 mal im Text vor, und kann sonst nicht auftauchen, allerdings ist es eben variabel in welcher Zeile sie stehen. Ich kann also nicht einfach Zeile X ersetzen, sondern muss wirklich das erste "M30" suchen und ersetzen. Der zweite M30 Eintrag hingegen ist in Ordnung und muss unangetastet bleiben.
    • Der dritte Schritt bezieht sich auf die erste Zeile. Diese beginnt immer mit "Prog10__". Die beiden Ziffern hinter der 10 sind die laufende Nummer, diese müsste ich mir in eine Variable auslesen, wobei es sich da wirklich immer um die erste Zeile, die Stellen 7 und 8 handelt.

    Insgesamt soll also eine TXT Datei eingelesen werden. In dieser sollen fest die Kopfzeilen 1 bis 3 ersetzt werden, es soll nach dem ersten (und nur dem ersten) M30 Eintrag gesucht werden, und dieser soll ersetzt werden, und eine feste Position in der ersten Zeile soll in eine Variable gepackt werden.
    Per Checkboxen kann ich auswählen welche festen Texte angefügt werden sollen.
    Wenn ich die Auswahl getroffen habe und auf den "Zusammenführen" Button klicke, erscheint der fertige Text in einer Richtextbox, und ich kann im letzten Schritt per "Speichern unter" die neue Datei speichern.

    Wie gesagt, es geht vorrangig um den ersten Schritt.
    Hier habe ich mir natürlich ein paar grundlegende Gedanken gemacht.
    Meine erste Idee war, dass ich beim Öffnen der TXT Datei diese direkt in die Richtextbox einlesen lasse.
    Sobald dann "Zusammenführen" geklickt wird, werden erst die oben genannten Modifikationen durchgeführt, und dann die festen Textbausteine angehängt, alles in der Richtextbox.
    Was passiert aber, wenn ich mit meiner Checkboxwahl nicht zufrieden war und doch noch mal was ändern mag? Perfekt wäre es, wenn ich einfach die Checkbox - Auswahl anpassen könnte, erneut auf "Zusammenführen" klicke, und wiederum den fertigen Text kriege. Das würde aber voraussetzen, dass der "Zusammenführen" Button immer erst die frische TXT Datei ausliest, also fällt die Idee den Inhalt direkt beim Öffnen in die Richtextbox zu schicken eher flach, oder wie seht ihr das?
    In dem Fall wären die Funktionen doch eher:

    Button1 = Öffnen = Datei öffnen Dialog, der nur den Standort der Datei erfasst
    Button2 = Zusammenführen = Inhalt der TXT in die Richtextbox einlesen, modifizieren, anschließen die fixen Bausteine anfügen
    Button3 = Speichern = Speichert die Datei ab.

    Wäre das so machbar oder wird der Inhalt der Datei automatisch beim Klick auf Button1 auch eingelesen und kann beim Klick auf Button2 nicht so einfach erneuert werden?

    Danke schon mal und viele Grüße


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

    @Spawnie Willkommen im Forum. :thumbup:
    Vielleicht zum allgemeinen Handling:
    Ich entnehme Deinen Ausführungen, dass es sich um zeilenbasierte Textdateien handelt.
    Nutze in diesem Fall die RTB nur zum Anzeigen, nicht aber zum Editieren Deiner Dateien.
    Eine RichTextBox hat eine Property Lines, die Du zum Editieren verweiden solltest.
    Lies also Deine Datei in eine List(Of String) ein (nicht aber String-Array) und arbeite auf dieser List.
    Nach gemachter Änderung zeigst Du diese List wieder an.
    Nun zum Code der einzelnen Stationen:

    VB.NET-Quellcode

    1. ' Einlesen der Datei
    2. Me.MyList = IO.File.ReadAllLines("PFAD_ZU_DEINER_DATEI").ToList()
    3. ' Anzeige der Datei
    4. Me.RichTextBox1.Lines = Me.MyList.ToArray()
    5. ' Löschen der drei ersten Zeilen
    6. Me.MyList.RemoveAt(0)
    7. Me.MyList.RemoveAt(0) ' die ursprünglich 2. Zeile ist nun die 1. Zeile
    8. Me.MyList.RemoveAt(0)
    9. ' Einfügen eines Textes an Position 42
    10. Me.MyList.Insert(42, "neuer Text")
    11. ' Einfügen eines String-Arrays / List(Of String) an Position 42
    12. Dim ll = New List(Of String) From {"1", "2", "3"}
    13. Me.MyList.InsertRange(42, ll)
    Sofern die RTB dies zulässt, kann die letzte Aktion zurückgenommen werden:

    VB.NET-Quellcode

    1. If Me.RichTextBox1.CanUndo Then
    2. Me.RichTextBox1.Undo()
    3. End If

    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!
    Willkommen im Forum @Spawnie :thumbup:

    1. Danke für die ausführliche erläuterung deines Problems, könnten sich manche ne scheibe abschneiden ;)
    2. Die Farbe Rot ist der Moderation vorbehalten
    3. Such mal nach dem OpenFileDialog
    4. Die Klasse File im System.IO Namespace beinhaltet eine Funktion ReadAllLines.
    Damit kannst du dann Zeile für Zeile durch deine Datei wandern und deine Änderungen vornehmen
    5. Natürlich war mal wieder einer schneller :D
    Zum Programm-Konzept könnte man auch andenken, ob man den OriginalText in einer RTB anzeigt, und das Ergebnis in einer zweiten RTB - also ein Vorschau-Feature.
    Da kann man noch jede Menge treiben, mit Highlighten und pipapo - aber zunächstmal überhaupt eine Ergebnis-Vorschau scheint mir ganz sinnvoll.

    Die RTBs würde ich übrigens auf Readonly stellen.

    Eine weitere Frage ist noch, woran die Verarbeitung das Ende eines M30-Abschnitts erkennen soll?

    Das mit dem "hinten anfangen" stelle ich mir auch schwierig vor - wie willst du denn die Datenverarbeitung entwickeln, wenn es noch garnix gibt zum Daten Einlesen (naja, ich nehme jetzt mal an, es gibt da inzwischen schon was)
    Hallo zusammen,

    Danke schon mal für eure Antworten. Eins vorweg, das Wochenende ist vollgestopft, ich werd nicht zu vielen Tests kommen, daher schon mal SORRY, wenn ich mich paar Tage nicht melden sollte.
    Tut mir leid, das mit der roten Farbe wusste ich nicht - hab ich wohl übersehen. Habs geändert.

    Die Tipps sind auf jeden Fall schon mal eine große Hilfe in die richtige Richtung. Rom wurde ja auch nicht an einem Tag gebaut, und wenn mein Programm mal einen festen Pfad einliest und sauber durcheditiert ist der Sprung auf einen "Öffnen" Dialog wie man ihn aus Word etc. kennt sicher auch drinne.

    Fragen & Antworten:

    Frage 1 von mir) Wieso wollt ihr die RTB als Readonly ohne darin zu arbeiten? Ich hab das eigentlich als ganz elegant empfunden. "Zusammenführen" packt mir die Texte aneinander, ich sehe das Resultat in der RTB und kann dort notfalls noch mal manuell eingreifen. Und wenn ich auf "Speichern" klicke kommt der gewohnte Speichern unter Dialog den man von überall her kennt. Ist diese manuelle Eingreifmöglichkeit nicht gut?

    Antwort 1 @ ErfinderDesRads) Das mit dem "von hinten anfangen" hast du falsch verstanden, glaube ich. Ich wollte damit sagen, diese Teile erwähne ich zuerst, weil die schon (zumindest halbwegs) funktionieren. Ich habe ja rund 10 feste Textblöcke in jeweils eigenen TXT Dateien. Die kann ich bereits wenn ich deren Checkbox anwähle im RTB Fenster per Klick auf "Zusammenführen" aneinanderreihen. Und auch mein "Speichern" Button tut was er soll.
    Wo es aber richtig klemmt ist der erste Teil vom Programm, das einlesen und bearbeiten.

    Antwort 2 @ ErfinderDesRads) Zum Thema M30, ich bin mir nicht ganz sicher, ob hier ein Missverständnis vorliegt.
    Also, mein einzulesender Text hat exakt in zwei Zeilen "M30" stehen, sonst kann das nicht vorkommen. Das ist auch jeweils eine eigene Zeile die nix außer eben "M30" drinne stehen hat.
    Die erste Stelle ist irgendwo im Text. Die zweite ganz am Ende. Momentan scrolle ich die Maus wund, bis ich eben drüber stolpere...im 3 Versuch 8o
    Der Eintrag am Ende ist ok, der muss bleiben. Aber der erste, irgendwo im Text, das muss weg und durch einen anderen Text der wiederum aus einer vorliegenden TXT Datei kommt ersetzt werden.
    Ich brauche also eine Funktion die Vom Anfang des Dokuments her sucht, das erste M30 findet, löscht und durch die externe TXT Datei bzw. besser gesagt deren Inhalt ersetzt. Dann muss sie aber friedlich sein, weil das zweite M30 ist ja in Ordnung.

    Einfacher gesagt aus

    Zeile1
    Zeile2
    Zeile3
    Zeile4
    Zeile5
    M30
    Zeile6
    Zeile7
    Zeile8
    Zeile9
    Zeile20
    M30

    soll dann

    Zeile1
    Zeile2
    Zeile3
    Zeile4
    Zeile5
    Neuer Text1
    Neuer Text2
    Neuer Text3

    Zeile6
    Zeile7
    Zeile8
    Zeile9
    Zeile20
    M30

    werden, wobei der neue Text aus einer TXT Datei stammt.
    Oder ums mit mir geläufigeren Beispielen auszudrücken: Ich brauche die "Suchen & Ersetzen" Funktion aus Excel, wobei ich ihr noch klar machen muss, dass sie 1) immer am Anfang die Suche beginnt und 2) ausschließlich den ersten Treffer bearbeitet.

    Spawnie schrieb:

    Einfacher gesagt
    Dann verstehe Post #2, da steht alles, was Du brauchst.
    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!
    Vorweg vielleicht noch mal eine Info, offenbar habe ich es mir an einer Stelle zu leicht gemacht: Ich nutze Visual Studio Express 2015.
    Ich dachte eigentlich "Visual Basic ist Visual Basic" aber offenbar macht es einen Unterschied. Wenn ich das richtig sehe, liegt bei mir dann also VB.net 15 zu Grunde???

    RodFromGermany schrieb:

    Spawnie schrieb:

    Einfacher
    gesagt
    Dann verstehe Post #2, da steht alles, was Du
    brauchst.


    Hi RodFromGermany, danke für die Hilfe.
    Ich muss aber noch mal fragen bzgl. deines Posts #2:
    • Zeilen 1/2 sind zum Einlesen der Datei
    • Zeilen 3/4 zum Anzeigen des Inhalts
    • Zeilen 8-10 ersetzen 3 Zeilen
    • Zeilen 12-17 sind 2 Varianten um bei Zeile 42 etwas einzufügen


    --> Habe ich das ganz allgemein richtig verstanden?

    --> Ersetzen der 3 Zeilen: Soweit ich das verstanden habe, ersetzt du die Zeilen 1 bis 3 indem du immer die erste Zeile löschst.

    --> Was sich für mich noch am kniffeligsten anhört ist das aufspüren des "M30" und das ersetzen. Das kann je nach Datei ja überall stehen, vielleicht mal in Zeile 65, dann mal in 49, dann in 117...

    Spawnie schrieb:

    Soweit ich das verstanden habe, ersetzt du die Zeilen 1 bis 3 indem du immer die erste Zeile löschst.
    Falsch.
    Ich habe Zeilen gelöscht und ich habe Zeilen eingefügt.
    Wenn Du den Text ganzer Zeilen ersetzen willst, dann ersetze ihn:

    VB.NET-Quellcode

    1. Me.MyList(10) = "bla"
    Wenn Du den Text "M30" in irgendeiner Zeile auffinden willst, must Du alle Zeilen danach durchsuchen, das geht sehr elegant, gugst Du hier.
    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!
    Kurze Frage, da ich mit der RTB nicht so richtig klar kam, habe ich nun umgebaut.
    Ich habe nun zwei Listboxen.

    Links eine mit der unbehandelten Eingangsdatei, rechts die fertige Datei.

    So fällt zwar die manuelle editierbarkeit weg (oder kann ich die auch für eine LB anschalten) aber ich habe so viele andere Probleme lösen können.

    Ändert das was bei euren Code, oder kann ich genauso darin...
    • Zeilen löschen
    • M30 suchen & ersetzen
    • Die Laufziffer am Anfang auslesen?
    OK, die Zeilen 2-5 löschen habe ich hinbekommen.
    Nun stehe ich aber vor einem anderen Problem:

    Ich kann zwar an einer beliebigen Stelle eine Zeile einfügen, das hab ich geschafft.

    Aber ich schaffe es nicht mittem im vorhandenen Text einen neuen Text aus einer TXT File hinzukriegen.

    Ich möchte aus:
    Text_alt_Zeile1
    Text_alt_Zeile2
    Text_alt_Zeile3
    Text_alt_Zeile4
    Text_alt_Zeile5
    Text_alt_Zeile6


    über den Zwischenschritt mittels Löschen:
    Text_alt_Zeile1
    Text_alt_Zeile6


    mit dem Inhalt aus C:\Vorlagen\Neue_Zeilen.txt
    Text_alt_Zeile1
    Text_NEU_Zeile1
    Text_NEU_Zeile2
    Text_NEU_Zeile3
    Text_NEU_Zeile4
    Text_NEU_Zeile5
    Text_NEU_Zeile6
    Text_NEU_Zeile7

    Text_alt_Zeile2

    machen...
    Da ich es bislang nicht schaffe an einer bestimmten Stelle eine externe TXT Datei einzufügen, habe ich mal am M30 suchen und ersten Problem weitergemacht.

    Was ich bislang habe:

    Quellcode

    1. Dim dd As String
    2. For ee As Integer = 0 To ListBox2.Items.Count - 1
    3. If ListBox2.Items.Item(ee).ToString.Contains("M30") Then
    4. dd = ListBox2.Items.Item(ee).ToString.Substring(3)
    5. ListBox2.Items.RemoveAt(ee)
    6. ListBox2.Items.Insert(ee, "neuer Text an dieser Stelle" & dd)
    7. End If
    8. Next


    Das ganze hat aber nur 2 Schwachpunkte:
    1. Will ich nur das erste M30 ersetzen und nicht alle Das habe ich wohl gelöst. Ich habe das ganze in eine "If I < 1" Abfrage gepackt und erhöhe i beim ersten Treffer von 0 auf 1. Keinen Schimmer ob es elegant ist, aber es wirkt :)
    2. Will ich nicht "neuer Text an dieser Stelle" dort stehen haben, sondern ebenfalls eine externe TXT Datei

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

    tja, was soll man sagen? von post#2 ist nachwievor nichts bei dir angekommen.
    Dort wird mit List(Of String) gearbeitet - du hast jetzt aber iwas mit Listbox angefangen - hast du den Unterschied bemerkt? (vermutlich nicht)

    jdfs in post#2 ist auch gezeigt, wie man mehrere Zeilen an einer bestimmten Position einfügt.

    Ich sags gelegentlich: Ignorieren der entscheidenden Hinweise (etwa weil man sie nicht versteht) bringt einen nicht weiter. Die Hinweise sind ja nachwievor entscheidend.
    Und solch Ignoranz verstimmt womöglich den Tippgeber.

    Stattdessen iwas anneres anfangen bringt auch nicht weiter - eher im Gegenteil: da entsteht leicht die Situation, dass mehrere Ansätze in verschiedene Richtungen gleichzeitig verfolgt werden, was Verwirrung stiftet, und end- und frucht-lose Threads hervorbringt.
    Hallo ErfinderDesRades, ich bin nun mal kein Profi, deswegen fallen mir die Unterschiede vielleicht nicht auf. Das tut mir leid, aber wenn ich es besser könnte, müsste ich vermutlich nicht fragen.
    Wie gesagt, ich hatte 2011 eine Veranstaltung zu dem Thema, und das war noch auf Basis VB6 und ging meist in Richtung Console.
    Von daher möchte ich mich für jeden Ärger und alle Frustration bei euch entschuldigen, kann euch aber versichern, dass es nie böser Wille ist, sondern weil ich es einfach nicht besser kann.
    Zumindest kann ich so langsam erahnen was mein Vater meint, wenn er mal wieder was am PC hat, ich schauen/erklären soll, und zu schnell bin oder Sachen überspringe...

    Der Wechsel zur Listbox war daher gekommen, dass ich so einige andere Probleme nicht hatte und ein gutes Stück weiter kam, ohne aber gewünschte Funktionen einzubüßen.

    Post#2 ist mir bekannt. Ich habe das auch ausprobiert. Ich kann die Zeile "Neuer Text" an beliebigen Stellen meiner Listbox einfügen, das klappt.
    Allerdings ist das nicht exakt das was ich brauche - leider. Ich müsste eine Textdatei einlesen. Und da hängt es nun. Ich kann sie einlesen - dann bekomme ich sie aber ganz unten hin gepackt, statt mitten im Text, an der von mir gewünschten Stelle. An der Wunschstelle bekomme ich nur einen festen Text "Neuer Text" hin.

    Ich habe auch versucht deinen Tipp mit List(Of String) auf meine Listbox umzuwandeln. Allerdings leider ohne Erfolg. Das höchste der Gefühle war, dass an der Stelle (Auflistung) stand, statt meinem Text aus der TXT Datei.

    Auch wenn es euch das Leben schwer macht, der Wechsel zur LB hat für mich die Möglichkeit geschaffen alle Probleme die ich hatte zu lösen, bis auf das eine eben.
    Ich krieg euch die TXT Datei bzw. deren Inhalt nicht an eine bestimmte Stelle gestellt.

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

    also wenn ich rods Code angucke, da scheint mir jedes deiner Probs gelöst:
    1. zeile#2: Einlesen der Datei - sie wird dabei nicht "ganz unten" hingepackt, sondern sie wird schlicht eingelesen, und steht dann als List(Of String) zur Verfügung
    2. zeilen#8 - 11: gezieltes Löschen von Zeilen an einer bestimmten Position
    3. zeile#13: Einfügen einer Zeile an einer bestimmten Position
    4. zeile#17: Einfügen vieler Zeilen an einer bestimmten Position
    5. zeile 5: Anzeigen der List(Of String) auf dem Form
    Also ich weiss jetzt nicht, für welches TeilProblem Rod nicht die Lösung für dich vorgeturnt hat.
    Ach ja, das Suchen des gesuchten Strings - aber das hast du ja inzwischen mit der Listbox gelöst, und das ist das Traurige: Auf eben dieselbe Weise hättest du es auch mit der List(Of String) lösen können, und das wäre sauberer gewesen.

    Spawnie schrieb:

    Ich krieg euch die TXT Datei bzw. deren Inhalt nicht an eine bestimmte Stelle gestellt.
    Siehe Post #2.
    in Zeile 2 wird eine Datei in eine List(Of String) eingelesen,
    in Zeile 17 wird eine List(Of String) in eine bestehende eine List(Of String) eingefügt.
    Dass Du hier jede einzelne Zeile fertig für Deinen Code geliefert bekommst, ist nicht Sinn dieses Forums, wir bieten Hilfe zur Selbsthilfe.
    Die Arbeit musst Du allein tun. Und die fängt an beim Lernen.
    Oder haben wir da was falsch verstanden?
    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!
    Erst mal Danke an euch alle.

    Ja, RodFromGermany hat viele bzw. alle Probleme angesprochen. Und trotzdem ist es als Laie nicht direkt ersichtlich wie es anzuwenden ist, das eben auch mal.
    Egal, soweit klappt eigentlich alles, aktuell habe ich nur 3 Kleinigkeiten die mir nicht ganz gefallen, vielleicht könnt ihr mir noch mal ein paar Tipps geben.


    1) Ich speichere die Listbox am Ende in einer TXT Datei.

    VB.NET-Quellcode

    1. Dim sav As New SaveFileDialog
    2. sav.Filter = "TXT-Datei|*.txt"
    3. If sav.ShowDialog = Windows.Forms.DialogResult.OK Then
    4. Dim text As String = ""
    5. For Each Litem As String In ListBox2.Items
    6. text &= vbCrLf & Litem
    7. Next
    8. IO.File.WriteAllText(sav.FileName, text)
    9. End If


    Wieso auch immer, ich bekomme in der ersten Zeile der Textdatei eine Leerzeile, die meine Listbox nicht hatte.
    Wie kann ich das verhindern?

    2) Die Pfade
    Ich packe ja immer wieder Textdateien unter den alten Text die lokal abliegen, und verwende die vollständigen Pfade.
    Am Ende, wird die EXE beim Ordner Vorlagen liegen.
    Wie kann ich dem Programm beibringen, dass es statt vollständiger Pfade zu verwenden flexibler wird, also als Pseudo Code "Schau wo die EXE liegt, und öffne dort dann ...\Vorlagen\Bsp.txt"?

    3) Der Öffnen & der Schließen Dialog.
    Ich habe einen Öffnen Button und einen zum Schließen. Beim Öffnen navigiere ich sonstwo hin. Die fertige Datei muss an den gleichen Ort. Könnte ich den Pfad der Datei beim Öffnen irgendwie an den Schließen Dialog übergeben, so dass man dort nimmer X-fach klicken muss?

    Danke schon mal :)

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

    ErfinderDesRades: Da schaue ist heute Abend mal rein, ob ich das so eleganter oder robuster aufziehen kann.

    Rein von den Funktionen her bin ich aktuell eigentlich zufrieden. Ein "wäre ganz nett" gibt es noch, aber das ist nicht weltbewegend:
    Ich will ja am Ende die ursprüngliche TXT Datei ersetzen. Es wäre also ganz witzig, wenn im Speichern Dialog als Name schon der urprüngliche Name vom Öffnen stünde, quasi als Vorschlag.
    In etwa so, wie Word einem die ersten Zeile als Dateiname vorschlägt. Wenns passt: gut / ansonsten kann man aber noch manuell eingreifen.