An bestimmter Stelle in Textdatei schreiben
- VB.NET
Sie verwenden einen veralteten Browser (%browser%) mit Sicherheitsschwachstellen und können nicht alle Funktionen dieser Webseite nutzen.
Hier erfahren Sie, wie einfach Sie Ihren Browser aktualisieren können.
Hier erfahren Sie, wie einfach Sie Ihren Browser aktualisieren können.
Es gibt 64 Antworten in diesem Thema. Der letzte Beitrag () ist von ErfinderDesRades.
-
-
hmm, ok. Danke dir @RodFromGermany
ich versuch mal auf dem schlagwort auszubauen wenn es damit funktionieren könnte.
@Eierlein das Problem liegt darin dass ich vorher üebrprüfen muss ob die Zeile in der Datei vorhanden ist. wenn ich das mit Starswith mache zeigt er die anderen ja auch. Ohh moment. ich kann ihm ja die Leerzeichen voranstellen. Prüfe ich sofort.
also so filtert er mir nicht raus dass es die 73 schon gibt in der Datei.
Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Gottric“ ()
-
@Gottric Poste mal mehrere mögliche Zeilen (konstruiert aber real), in denen "42" vorkommt.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! -
-
Falls dies der Aufbau einer Zeile erlaubt:
- Datei zeilenweise durchgehen
- Zeilen beim Leerzeichen splitten (ggf. führendes Leerzeichen trimmen)
- Der Erste Teil dürfte dann deine Zahl sein, der andere dein String.
- ggf. mit TryParse prüfen ob es wirklich eine Zahl ist
- Das ganze dann in ein Dictionary(Of Integer, String) packen. Danach kannst du anhand der Eingabe in der Textbox schauen ob es diese im Dictionary gibt. Falls ja, hast du deinen Treffer und den entsprechenden String zur Zahl.
Würde das nicht reichen?"Gib einem Mann einen Fisch und du ernährst ihn für einen Tag. Lehre einen Mann zu fischen und du ernährst ihn für sein Leben."
Wie debugge ich richtig? => Debuggen, Fehler finden und beseitigen
Wie man VisualStudio nutzt? => VisualStudio richtig nutzen -
Ich such die Datei mal raus.
aber vorab, kann es sein dass es daran liegt weil ich mit ReadallText einlese?
@mrMo
hast du das so in der Richtung gedacht?
VB.NET-Quellcode
Datei sieht genau so aus:
" 1 Gelb"
" 7 Grün"
" 12 Orange"
" 73 Apfel"
" 420 Blau"
" 735 Auto"
" 4587 Rot"
" 7395 Laptop"
etc.
und mein Problem ist nicht das einsetzen später an der Richtigen stelle, das funktioniert soweit mit dem Code den ich habe.
Aber ich muss prüfen ob wenn ich in meine textbox 73 eingebe ob die am Anfang einer Zeile steht. wenn ich die Datei öffen und die 73 entferne. Sagt er trotzdem bei .contains dass die Zhal vorkommt, was sie ja auch tut. in 735 und 7395 zum Beispiel. Bei 4 stelligen zahlen geht das natürlich mit .contains weil die ja maximal 1x vorkommen kann.
Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „Gottric“ ()
-
@Gottric Ja, sowas in der Richtung:
Spoiler anzeigen
VB.NET-Quellcode
- Public Class Form1
- Dim lstDateiInhalt As New List(Of String)
- Dim dcZeilen As New Dictionary(Of Integer, String)
- Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
- lstDateiInhalt.Add(" 1 Gelb")
- lstDateiInhalt.Add(" 7 Grün")
- lstDateiInhalt.Add(" 12 Orange")
- lstDateiInhalt.Add(" 73 Apfel")
- lstDateiInhalt.Add(" 420 Blau")
- lstDateiInhalt.Add(" 735 Auto")
- lstDateiInhalt.Add(" 4587 Rot")
- lstDateiInhalt.Add(" 7395 Laptop")
- For Each sTeile As String In lstDateiInhalt
- Dim sGesplitteteZeile() As String = sTeile.Trim.Split(CType(" ", Char))
- Dim iZeileNummer As Integer
- Integer.TryParse(sGesplitteteZeile(0), iZeileNummer)
- dcZeilen.Add(iZeileNummer, sGesplitteteZeile(1))
- Next
- End Sub
- Private Sub cmd_suchen_Click(sender As Object, e As EventArgs) Handles cmd_suchen.Click
- Dim iSuchKey As Integer = Convert.ToInt16(nud_suche.Value)
- If (dcZeilen.ContainsKey(iSuchKey)) Then
- MessageBox.Show("Gefundener Eintrag: " & dcZeilen(iSuchKey))
- Else
- MessageBox.Show("Nix gefunden")
- End If
- End Sub
- End Class
"Gib einem Mann einen Fisch und du ernährst ihn für einen Tag. Lehre einen Mann zu fischen und du ernährst ihn für sein Leben."
Wie debugge ich richtig? => Debuggen, Fehler finden und beseitigen
Wie man VisualStudio nutzt? => VisualStudio richtig nutzenDieser Beitrag wurde bereits 1 mal editiert, zuletzt von „mrMo“ ()
-
mrMo schrieb:
==========================
Gottric schrieb:
kann es sein dass es daran liegt weil ich mit ReadallText einlese?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! -
@RodFromGermany
Mal abgesehen von der kürzeren Schreibweise, gibt es einen speziellen Vorteil von Split(" "c) gegenüber CType(" ", Char)?"Gib einem Mann einen Fisch und du ernährst ihn für einen Tag. Lehre einen Mann zu fischen und du ernährst ihn für sein Leben."
Wie debugge ich richtig? => Debuggen, Fehler finden und beseitigen
Wie man VisualStudio nutzt? => VisualStudio richtig nutzen -
mrMo schrieb:
" "c
' '
in C / C++ / C#.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! -
RodFromGermany schrieb:
ist vom Typ Char, das muss nicht konvertriert werden, äquivalent zu ' ' in C / C++ / C#.
Ah ok. Ja in C# verwende ich auch immer' '
.
In VB.NET eier ich jedes mal rum und konvertiere dann am Ende einfach weil ich die " "c
Variante nicht kannte
Danke für die Erlösung, hat mich schon lange genervt"Gib einem Mann einen Fisch und du ernährst ihn für einen Tag. Lehre einen Mann zu fischen und du ernährst ihn für sein Leben."
Wie debugge ich richtig? => Debuggen, Fehler finden und beseitigen
Wie man VisualStudio nutzt? => VisualStudio richtig nutzen -
Danke euch, ich hab jetzt nachtschicht. wenn ich dazu komme mache ich dann sofort bisschen weiter.
ich hab eben auch mal etwas mit regex rumgespielt.
Aber irgendwas läuft da falsch. -
Gottric schrieb:
Aber irgendwas läuft da falsch.
Schau dir mal mein Beispiel an. Denke Regex ist hier nicht zwingend nötig."Gib einem Mann einen Fisch und du ernährst ihn für einen Tag. Lehre einen Mann zu fischen und du ernährst ihn für sein Leben."
Wie debugge ich richtig? => Debuggen, Fehler finden und beseitigen
Wie man VisualStudio nutzt? => VisualStudio richtig nutzen -
Hier ein consolen Testprogramm:
VB.NET-Quellcode
- Module Module1
- Sub Main()
- 'TestArray erstellen
- Dim Zeile(7) As String
- Zeile(0) = " 1 Gelb"
- Zeile(1) = " 7 Grün"
- Zeile(2) = " 12 Orange"
- Zeile(3) = " 73 Apfel"
- Zeile(4) = " 420 Blau"
- Zeile(5) = " 735 Auto"
- Zeile(6) = " 4587 Rot"
- Zeile(7) = " 7395 Laptop"
- 'oder aus der Datei lesen
- 'Dim Zeile() As String = System.IO.File.ReadAllLines(Pfadprg21prg + "prg__dir.dat", System.Text.Encoding.Default)
- Dim txt As String = "73"
- For i As Integer = 0 To Zeile.Length - 1
- If Zeile(i).StartsWith(" " & txt.Trim & " ") Then
- MsgBox(txt & " gefunden in Zeile: " & i.ToString)
- End If
- Next
- ' Jetzt Zeile 3 ändern/löschen
- Zeile(3) = ""
- 'jetzt nochmal suchen
- For i As Integer = 0 To Zeile.Length - 1
- If Zeile(i).StartsWith(" " & txt.Trim & " ") Then
- MsgBox(txt & "gefunden in Zeile: " & i.ToString)
- Else
- MsgBox(txt & " nicht gefunden in Zeile: " & i.ToString)
- End If
- Next
- End Sub
- End Module
-
Gottric schrieb:
aber vorab, kann es sein dass es daran liegt weil ich mit ReadallText einlese?
ReadAllText ergibt einen Text, also einen String. Einen!. Du willst aber aus deinen Zeilen eine aussuchen, also brauchst du viele Strings - jeder sei eine Zeile. Hast du nur einen String, kannst du logischerweise daraus keinen aussuchen. Also verwende ReadAllLines, dann erhälst du viele Strings, für jede Zeile einen, und daraus kannst du eine Zeile aussuchen.
Gottric schrieb:
Datei sieht genau so aus:
" 1 Gelb"
" 7 Grün"
" 12 Orange"
" 73 Apfel"
" 420 Blau"
" 735 Auto"
" 4587 Rot"
" 7395 Laptop"
ich muss prüfen ob wenn ich in meine textbox 73 eingebe ob die am Anfang einer Zeile steht.
Die andere Hälfte ist das exakte Formulieren der Probleme. Das ist oft überraschend einfach.
In deim Fall suchst du die Zeile, die mit" 73 "
beginnt. Beachte, dass ich" 73 "
sage, das ist ein String, und nicht73
- das wäre eine Zahl. Und beachte, dass der String" 73 "
auch Spaces enthält (was eine Zahl ja schon vom Datentyp her nicht kann).
Nun formuliere ich dein Prob:
Du suchst den Index der Zeile, die mit" 73 "
beginnt.
Und nun in vb:
-
Moin zusammen, ich konnte gestern auf der Arbeit leider nicht s machen am Programm. aber habe mich heute morgen sofort drangesetzt.
@Eierlein den Code aus Post 32 von dir habe ich getestet heute morgen. ich versuche mal die anderen funktionenen dort noch einzubinden wie reinschreiben wenn nicht vorhanden und all so sachen. also meinen Code den ich am Anfang gepostet habe dann auch das System mit der Zeilenweisen durchsucherei umzustellen.
ich melde mich sofrt wenn ich es habe, bzw wenn ich nochmal eure hilfte bräuchte.
Es ist soweit
Ich glaube ich bin zu doof den Code von dir @mrMo einzubinden.
nochmal zum Hintergrund. Ich möchte die DAtei einlesen, Zeile für Zeile, dann üebrprüfen ob am Zeilenanfang eine Zahl die ich in einer Textbox eintrage steht. wenn nicht möchte ich diese dort eintragen an der richtigen position. also an der immer nächst kleineren angekliedert. das ist wichtig, sonst geht die Maschine auf störung wo ich die Daten aufspiele. Von daher denke ich, weil sich ja die anforderungen geändert haben bracuhe ich nen neuen code. nicht mehr den mit den Strings zusammenfügen den ich vorher mit hilfe des Forums erarbeitet habe. DA dieser nur einwandfrei mit 4 stelligen Zahlen funktioniert. Von daher bin ich mit ner Liste besser dran, dneke ich mal. Ist ja so von @RodFromGermany auch schon erwähnt wordne als ich das Tehma geöffnet habe vor paar monaten. Könnte ihr mir helfen, ich versuche alles möglich aber es will nciht klappen. Ich suche mir Codes raus, ich lese bei MDSN ich suche hier im Forum und versuche alles zusammenzubasteln aebr es will nciht klappen.
Ich kann die Datei Zeilenweise einlesen und auch das mit dem Splitten funktioniert wie ihr mir das gezeigt habt, glaube ich mal.
aber dann überprüfen ob sie drin ist und wenn nich an die richtige stelle schreiben geht nicht.
VB.NET-Quellcode
- Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
- 'For Each Nummer In txtDbkNr.Text
- ' Dim Lines As New List(Of String)
- ' Lines.AddRange(IO.File.ReadAllLines(Pfadprg21prg + "prg__dir.dat"))
- ' For i = Lines.Count - 1 To 0 Step -1
- ' Dim zeile = Lines(i).Trim.Split(" "c)(0)
- ' If zeile = txtDbkNr.Text Then
- ' MsgBox("Nummer vorhanden")
- ' End If
- ' Next
- 'Next
- Dim iSuchKey As Integer = Convert.ToInt16(txtDbkNr.Text)
- If (dcZeilen.ContainsKey(iSuchKey)) Then
- MessageBox.Show("Gefundener Eintrag: " & dcZeilen(iSuchKey))
- Else
- MessageBox.Show("Nix gefunden")
- End If
- End Sub
- 'Dim Lines As New List(Of String)
- ' Lines.AddRange(IO.File.ReadAllLines(Pfadprg21prg + "prg__dir.dat"))
- ' For i = Lines.Count - 1 To 0 Step -1
- 'Dim zeile = Lines(i).Split({" "c}, StringSplitOptions.RemoveEmptyEntries)(0)
- 'If zeile = item.ToString().Replace("dbk", "").Replace("_", "").Replace("prg", "") Then
- ' Lines.RemoveAt(i)
- ' End If
- 'Next
- Dim lstDateiInhalt As New List(Of String)
- Dim dcZeilen As New Dictionary(Of Integer, String)
- lstDateiInhalt.AddRange(IO.File.ReadAllLines(Pfadprg21prg + "prg__dir.dat"))
- For Each sTeile As String In lstDateiInhalt
- Dim sGesplitteteZeile() As String = sTeile.Trim.Split(" "c)
- Dim iZeileNummer As Integer
- Integer.TryParse(sGesplitteteZeile(0), iZeileNummer)
- dcZeilen.Add(iZeileNummer, sGesplitteteZeile(1))
- Next
- End Sub
das ist natürlich völliger müll, nru dass ihr seht dass ich keinen vorgefertigeten Code haben will. ich bemühe mich echt alles unter einen Hut zu bringen. aber geht nicht.
ich verzweifle bald. sitze da echt immer stundenland und probiere und probiere, dann denke ich hab es, dann teste ich, dannn passt es doch wiede nicht in manchen konstellationen. frusttrierend.
Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Gottric“ ()
-
@Gottric Also bei mir sieht das ganze so aus:
Spoiler anzeigen VB.NET-Quellcode
- Public Class Form1
- Private Zeile(7) As String
- Private dcZeilen As New Dictionary(Of Integer, String)
- Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
- Zeile(0) = " 1 Gelb"
- Zeile(1) = " 7 Grün"
- Zeile(2) = " 12 Orange"
- Zeile(3) = " 73 Apfel"
- Zeile(4) = " 420 Blau"
- Zeile(5) = " 735 Auto"
- Zeile(6) = " 4587 Rot"
- Zeile(7) = " 7395 Laptop"
- End Sub
- Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
- For Each sTeile In Zeile
- Dim sGesplitteteZeile() As String = sTeile.Split(New Char() {" "c}, StringSplitOptions.RemoveEmptyEntries)
- Dim iZeileNummer As Integer
- Integer.TryParse(sGesplitteteZeile(0), iZeileNummer)
- dcZeilen.Add(iZeileNummer, sGesplitteteZeile(1))
- Next
- End Sub
- End Class
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! -
Nun stellt sich mir die Frage was ist denn "die richtige stelle", und was soll dort dann rein geschrieben werden?"Gib einem Mann einen Fisch und du ernährst ihn für einen Tag. Lehre einen Mann zu fischen und du ernährst ihn für sein Leben."
Wie debugge ich richtig? => Debuggen, Fehler finden und beseitigen
Wie man VisualStudio nutzt? => VisualStudio richtig nutzen -
Gottric schrieb:
Dabei hab ich dir in post#35 eine Lösung mit einem Einzeiler aufgezeigt, die - so dachte ich - keinerlei Probleme bei der Umsetzung aufwerfen kann. -
ErfinderDesRades schrieb:
Ich fühle mich etwas übergangen.
Zu einfach, um ernst genommen zu werden...--
If Not Program.isWorking Then Code.Debug Else Code.DoNotTouch
--
-
Benutzer online 1
1 Besucher
-
Ähnliche Themen
-
8 Benutzer haben hier geschrieben
- Gottric (25)
- ErfinderDesRades (12)
- mrMo (9)
- RodFromGermany (8)
- itAxel (4)
- Eierlein (4)
- EaranMaleasi (2)
- petaod (1)