An bestimmter Stelle in Textdatei schreiben

  • VB.NET

Es gibt 64 Antworten in diesem Thema. Der letzte Beitrag () ist von ErfinderDesRades.

    Mit .StartsWith kannst du die Position feststellen, wenns die Zeile gibt, nicht aber die InsertPosition, wenns die zeile nicht gibt.
    Taugt also nicht.

    Es muss ein >= - Vergleich sein - nur mit einem solchen kannst du die InsertPosition feststellen. Und kannst du die InsertPosition feststellen, dann brauchst du die Position nicht mehr festzustellen - also vergiss .StartsWith.
    s. mein Edit.
    Ok super, jetzt bin ich ja fast durch.

    VB.NET-Quellcode

    1. Dim lstDateiInhalt As New List(Of String)
    2. lstDateiInhalt.AddRange(IO.File.ReadAllLines(Pfadprg21dbk + "dbk__dir.dat"))
    3. Dim num = Integer.Parse(txtDbkNr.Text.Trim)
    4. Dim insertposition = lstDateiInhalt.FindIndex(Function(line) Integer.Parse(line.Split()(1)) >= num) + 1
    5. MsgBox(insertposition.ToString)
    6. If insertposition = 0 Then
    7. MsgBox("Datenbanknummer ist schon vergeben an Roboter 2.1!", MsgBoxStyle.Information, "Info")
    8. Return
    9. Else
    10. Select Case MessageBox.Show("Programmnummer: " + txtPrgNr.Text + " und Datenbanknummer: " + txtDbkNr.Text + " verfügbar an Roboter 2.1" & vbCrLf & vbCrLf & "Programm und Datenbank erstellen?", "Abfrage", MessageBoxButtons.YesNo, MessageBoxIcon.Question, MessageBoxDefaultButton.Button2)
    11. Case Windows.Forms.DialogResult.Yes
    12. lstDateiInhalt.Add(txtDbkNr.Text + txtDir.Text)
    13. End Select
    14. IO.File.WriteAllLines(Pfadprg21dbk + "dbk__dir.dat", lstDateiInhalt.ToArray())
    15. End If

    sind ja dann nur nooch 2 dinge zu klären. Wie greife ich denn ab ob die zahl schon am Anfagn einer Zeile der Liste steht? und wie speichere ich die eingefügte Zahl an die nächst kleiner Zahl fortlaufend an? so wie ich es jetzt speichere schreibt er es ans ende der Zeile.

    Gottric schrieb:

    Wie greife ich denn ab ob die zahl schon am Anfagn einer Zeile der Liste steht?
    eiglich mit demselben Vergleich, mit dem auch auf >= getestet wird. Nur eben nun auf = testen.

    VB.NET-Quellcode

    1. Dim lineAtInsertPosition = lstDateiInhalt(insertposition)
    2. If Integer.Parse(lineAtInsertPosition.Split()(1)) = num Then
    3. ' num gibts schon
    4. Else
    5. lineAtInsertPosition = " " & num & " Trallala, Hopsassa!"
    6. 'oder:
    7. lineAtInsertPosition = String.Concat(" ", num, " Trallala, Hopsassa!")
    8. 'oder:
    9. lineAtInsertPosition = String.Format(" {0} {1}", num, "Trallala, Hopsassa!")
    10. 'dann aber:
    11. lstDateiInhalt.Insert(insertposition, lineAtInsertPosition)
    12. End If

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

    Guten morgen,
    vielen vielen Dank!!!
    Ich muss es in der Testphase genau prüfen aber ich sehe auf den ersten Blick funktioniert alles super.

    Hier der Code für alle die mal vor einen ähnlichen Problem stehen:

    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. Try
    6. If ComboBox1.SelectedItem.ToString() = "Roboter 2.1" Then
    7. Dim lstDateiInhalt_dbk As New List(Of String)
    8. lstDateiInhalt_dbk.AddRange(IO.File.ReadAllLines(Pfadprg21dbk + "dbk__dir.dat"))
    9. Dim num_dbk = Integer.Parse(txtDbkNr.Text.Trim)
    10. Dim insertposition_dbk = lstDateiInhalt_dbk.FindIndex(Function(line) Integer.Parse(line.Split()(1)) >= num_dbk)
    11. Dim lineAtInsertPosition_dbk = lstDateiInhalt_dbk(insertposition_dbk)
    12. If Integer.Parse(lineAtInsertPosition_dbk.Split()(1)) = num_dbk Then
    13. MsgBox("Datenbanknummer ist schon vergeben an Roboter 2.1!", MsgBoxStyle.Information, "Info")
    14. Return
    15. Else
    16. Dim lstDateiInhalt_prg As New List(Of String)
    17. lstDateiInhalt_prg.AddRange(IO.File.ReadAllLines(Pfadprg21prg + "prg__dir.dat"))
    18. Dim num_prg = Integer.Parse(txtPrgNr.Text.Trim)
    19. Dim insertposition_prg = lstDateiInhalt_prg.FindIndex(Function(line) Integer.Parse(line.Split()(1)) >= num_prg)
    20. Dim lineAtInsertPosition_prg = lstDateiInhalt_prg(insertposition_prg)
    21. If Integer.Parse(lineAtInsertPosition_prg.Split()(1)) = num_prg Then
    22. MsgBox("Programmnummer ist schon vergeben an Roboter 2.1!", MsgBoxStyle.Information, "Info")
    23. Return
    24. Else
    25. Select Case MessageBox.Show("Programmnummer: " + txtPrgNr.Text + " und Datenbanknummer: " + txtDbkNr.Text + " verfügbar an Roboter 2.1" & vbCrLf & vbCrLf & "Programm und Datenbank erstellen?", "Abfrage", MessageBoxButtons.YesNo, MessageBoxIcon.Question, MessageBoxDefaultButton.Button2)
    26. Case Windows.Forms.DialogResult.Yes
    27. lineAtInsertPosition_dbk = String.Format(" {0} {1}", num_dbk, txtDir.Text)
    28. lstDateiInhalt_dbk.Insert(insertposition_dbk, lineAtInsertPosition_dbk)
    29. IO.File.WriteAllLines(Pfadprg21dbk + "dbk__dir.dat", lstDateiInhalt_dbk.ToArray())
    30. IO.File.WriteAllLines(Pfadprg21dbk + "dbk_" + addunterstrich(txtDbkNr.Text) + ".dat", txtDbkinhalt.Lines)
    31. lineAtInsertPosition_prg = String.Format(" {0} {1}", num_prg, txtDir.Text)
    32. lstDateiInhalt_prg.Insert(insertposition_prg, lineAtInsertPosition_prg)
    33. IO.File.WriteAllLines(Pfadprg21prg + "prg__dir.dat", lstDateiInhalt_prg.ToArray())
    34. IO.File.WriteAllLines(Pfadprg21prg + "prg_" + addunterstrich(txtPrgNr.Text) + ".dat", txtPrginhalt.Lines)
    35. System.Threading.Thread.Sleep(200)
    36. MsgBox("Programm " + (txtPrgNr.Text) + " mit dazugehöriger Datenbank " + (txtDbkNr.Text) + " an Roboter 2.1 erstellt!", MsgBoxStyle.Information, "Info")
    37. Return
    38. Case Windows.Forms.DialogResult.No
    39. End Select
    40. End If
    41. End If
    42. End If
    43. Catch ex As Exception
    44. MsgBox(ex.Message, MsgBoxStyle.Critical, "Fehler")
    45. End Try


    wenn ihr noch anmerkungen habt oder euch was auffällt bitte her damit.