Zeilen aus Textdatei löschen

  • VB.NET
  • .NET (FX) 3.0–3.5

Es gibt 28 Antworten in diesem Thema. Der letzte Beitrag () ist von Gottric.

    ich bin von deim Code sehr verwirrt:

    Erst lieste die Datei ein, in ein String(). Dann entfernste bestimmte Zeilen daraus, und schreibst sie zurück - ok.

    Aber dann liest du dieselbe Datei nochmal ein, und diesmal in ein String!
    Also ist dir schon klar, dass man ein String nicht zeilenweise bearbeiten kann, oder?
    Ein String ist numal kein String()!

    Und weiters ists natürlich Unfug, das, was man soeben in eine Datei geschrieben hat, aus derselben Datei erneut zu laden.
    Da nimm lieber das, was du "weggeschrieben" hast - es ist ja noch da, und du kannst es ja noch weiter verwenden, für die weitere Verarbeitung.

    Gottric schrieb:

    txtPrgNr_Int22dbk
    Deine Variablen-Benennung ist verwirrend!
    Variablen werden deklariert, um ihren Namen und ihre Merkmale festzulegen. Deklarationsanweisungen für Variablen werden mit der Dim Statement durchgeführt. Die Merkmale einer Variablen werden durch ihren Speicherort und ihren Inhalt bestimmt.

    MSDN schrieb:

    Variablen werden deklariert, um ihren Namen und ihre Merkmale festzulegen.
    Deklarationsanweisungen für Variablen werden mit der Dim Statement durchgeführt.
    Die Merkmale einer Variablen werden durch ihren Speicherort und ihren Inhalt bestimmt.
    Jedes deklarierte Element hat einen Namen, der auch als Bezeichner bezeichnet wird,
    der im Code dazu verwendet wird, auf dieses Element zu verweisen.

    Dieser Beitrag wurde bereits 3 mal editiert, zuletzt von „VB1963“ ()

    Danke euch. Ja, die Nummer wird gelöscht aus der Datei weil ich den Text dahinter neu eintrage später. mit txtDir.Text. Es führen viele wege nach Rom. Ich hab mich für den entschieden es rauszulöschen und dann einfach neu einzutragen. Gibt sicher bessere.
    Ein String ist numal kein String()! Ohgott, das wusste ich garnicht. Da muss ich bisschen was üebrdenken. :) Danke für die Info, und nochmal, tolles Forum hier.
    Ja, die bennenung hab ich noch nicht so drauf. Ich arbeite aber dran. Es gilt aber noch zu sagen dass ich die Benennung von diesem Code weitestgehend von einem Mitglied hier aus dem Forum übernommen habe.

    hab es jetzt mal zum testen in .ToString() abgeändert. macht auf das Ergebnis keinen Unterschied in meiner Anwendugn wie ich das beurteilen kann. Ist das möglich?
    Wo genau leigt denn der Unterschied?
    Ich hab es gegoogelt und auf der Seite nachgelesen. Aber andere Leute erklären das ja immer verständlicher. Wenn ihr Lust dazu habt. Hier im Forum hab ich jetzt noch nicht nachgesehen, mache ich gleich mal.

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

    ok, danke.

    Ich hab noch ne frage. ich will jetzt aus ner Listbox ausgewählte Items löschen in den dazugehörigen Ordnern und die Zeilen der ausgewählten Items aus der Datei.
    aber ich bekomm das nicht so hin. In der Listbox steht was ich geladen habe.

    Zum beispiel:

    prg_8457
    prg_8458
    prg_8459
    usw.

    ich will die Zahlen jetzt nur haben ohne das prg_ davor. dann sollte der Code den ich habe funktionieren, also denke ich mal. seh ich ja dann erst.

    VB.NET-Quellcode

    1. If ListBox1.SelectedIndex = -1 Then
    2. MsgBox("Es sind keine Dateien geladen, oder keine Dateien zum löschen ausgewählt!", MsgBoxStyle.Critical, "Fehler")
    3. Return
    4. End If
    5. If rbtnPrg.Checked = True And ComboBox1.SelectedItem.ToString() = "Roboter 2.1" Then
    6. For Each item In ListBox1.SelectedItems
    7. Dim ausgewähltitem = item.ToString.Replace("dbk", "").Replace("dat", "").Replace("_", "").Replace("prg", "").Replace(".", "")
    8. Dim Lines As New List(Of String)
    9. Lines.AddRange(IO.File.ReadAllLines(Pfadprg21prg + "prg__dir.dat"))
    10. For i = Lines.Count - 1 To 0 Step -1
    11. Dim zeile = Lines(i).Split({" "c}, StringSplitOptions.RemoveEmptyEntries)(0)
    12. If zeile = item.ToString() Then
    13. Lines.RemoveAt(i)
    14. End If
    15. Next
    16. IO.File.WriteAllLines(Pfadprg21prg + "prg__dir.dat", Lines.ToArray())
    17. System.Threading.Thread.Sleep(100)
    18. IO.File.Delete(Pfadprg21dbk + "dbk_" + addunterstrich(item.ToString) + ".dat")
    19. IO.File.Delete(Pfadprg21prg + "prg_" + addunterstrich(item.ToString) + ".dat")
    20. IO.File.Delete(Pfadplayback21 + "prg_" + addunterstrich(item.ToString) + ".ird")
    21. Next
    22. btnladen.PerformClick()
    23. btnladen.PerformClick()
    24. End If


    hat jemand ne Idee?
    das mit dem Dim ausgewähltesitem ist nur ein versuch von mir gewesen. hab das ausgewählte item dann mal mit nen haltepunkt angefahren aber er streicht die sachen die in .replace stehen nicht raus.

    edit:
    zur erklärung gilt noch zu sagen dass die addunterstrich beim löschen eine funktion ist die die Dateistrucktur festhällt. also alle fehlenden Unterstriche auffüllt sodass immer die richtige Datei gelöscht wird. Ich habe nun zu testzwecken mal in dem Ordner Dateien ohne prg_ angelegt. dann löscht er sie wie gewollt.
    also ich glaube der knackpunkt ist das wegstreichen der buchstaben und unterstriche in dem ausgewählten item.

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

    @Gottric Du solltest lernen zu debuggen, gugst Du hier.
    Führe Dein Programm schrittweise aus und überprüfe nach jeder einzelnen Zeile die betroffenen Daten / Variablen / Items.
    Sollte der tatsächliche Inhalt nicht mit dem von Dir erwarteten Inhalt übereinstimmen, hast Du einen Fehler gefunden. :thumbsup:
    Wenn Du das mit allen Deinen Zeilen im Code getan hast, sollte Dein Programm wesentlich besser laufen als vorher.
    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!

    Gottric schrieb:

    wie ich üebrhauüt hinbekomme
    Dein Code ist leicht chaotisch, völlig merkwürdige Variablennamen, zu denen wir keine Assoziation haben und es uns deswegen schwerfällt, Deinen Code lesenderweise zu verfolgen.
    Gelegentlich über ner Zeile ein pasender Kommentar sollte selbst für Dich hilfeich sein, wenn Du nach einer Weile wieder in Deinen Quelltext reinguckst.
    Ansonsten kann es nach einem halben Jahr sein, dass Du da reinguckst wie ein Quieke-Tier in einen mechanischen Zeit-Anzeiger. ;)
    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!
    Ok, das sehe ich ein. für mich erklären sich die Variabel von selbst. aber ich nehem den tip mal zu herzen und werde meinen code mit hinwweisen versehen. bin ja offen für gute anregungen.
    btw. ich habs glaube ich. Habe ich Zeile 20 jetzt die sachen aus dem String der Listbox entfernt:


    VB.NET-Quellcode

    1. If ComboBox1.SelectedIndex = -1 Then
    2. MsgBox("Es muss ein Roboter ausgewählt werden!", MsgBoxStyle.Critical, "Fehler")
    3. Return
    4. End If
    5. If lblAchtung.Visible = False Then
    6. MsgBox("Sie haben keine, oder die falschen Dateien geladen!", MsgBoxStyle.Critical, "Fehler")
    7. Return
    8. End If
    9. If ListBox1.SelectedIndex = -1 Then
    10. MsgBox("Es sind keine Dateien geladen, oder keine Dateien zum löschen ausgewählt!", MsgBoxStyle.Critical, "Fehler")
    11. Return
    12. End If
    13. If rbtnPrg.Checked = True And ComboBox1.SelectedItem.ToString() = "Roboter 2.1" Then
    14. If MessageBox.Show("Es werden die ausgewählten Daten in allen Verzeichnissen auf dem Roboter 2.1 gelöscht!" & vbCrLf & vbCrLf & "Sind Sie sich wirklich sicher?", "Abfrage", MessageBoxButtons.YesNo, MessageBoxIcon.Warning, MessageBoxDefaultButton.Button2) = Windows.Forms.DialogResult.Yes Then
    15. For Each item In ListBox1.SelectedItems
    16. Dim Lines As New List(Of String)
    17. Lines.AddRange(IO.File.ReadAllLines(Pfadprg21prg + "prg__dir.dat"))
    18. For i = Lines.Count - 1 To 0 Step -1
    19. Dim zeile = Lines(i).Split({" "c}, StringSplitOptions.RemoveEmptyEntries)(0)
    20. If zeile = item.ToString().Replace("dbk", "").Replace("_", "").Replace("prg", "") Then
    21. Lines.RemoveAt(i)
    22. End If
    23. Next
    24. IO.File.WriteAllLines(Pfadprg21prg + "prg__dir.dat", Lines.ToArray())
    25. System.Threading.Thread.Sleep(100)
    26. IO.File.Delete(Pfadprg21dbk + addunterstrich(item.ToString) + ".dat")
    27. IO.File.Delete(Pfadprg21prg + addunterstrich(item.ToString) + ".dat")
    28. IO.File.Delete(Pfadplayback21 + addunterstrich(item.ToString) + ".ird")
    29. Next
    30. btnladen.PerformClick()
    31. btnladen.PerformClick()
    32. End If
    33. End If


    er funktioniert soweit ich das bis jetzt beurteilen kann. fällt euch vielleicht noch was auf? enferne ich diese so richtig?
    Heute abend mache ich mir daran die gesamte Anwendung zu Testen und danach, habe ich auch shcon abgeklärt, lasse ich nen Kollgen damit "spielen" und er soll mir auch berichten ob es funktioniert wie es soll oder ob es Feher gibt oder ob alles läuft wie es soll.