Vb.net - Löschen einer Bestimmten Zeile
Hallo Zusammen
als erstes, bin schon seit einiger Zeit am googlen. Also verzeiht wenn ich etwas übersehn hab.
Ich hab ein ini file, in welchem in folgender aufstellung Namen und Pfäde von .jar Files drinn stehen:
Name des Jars=c:\Pfad zur JarDatei
dieses ini File wird beim Starten meines Programms ausgelesen. funktioniert auch wunderbar.
Mittels Button möchte ich jetzt ausgewählte (mehrere Möglich) Items im ini File suchen und löschen.
Ich hab folgenden Code:
Folgender Fehler tritt in der von den je zwei * eingeschlossenen Zeile auf: "Kopie von MC_2.jar=C:\Dokumente und Einstellungen\b400wyp\Anwendungsdaten\Roaming\.minecraft\bin" wird analysiert - Unbekannte Escape-Zeichenfolge \R.
Was soll das jetzt bedeuten?
Wie bring ich mein Vorhaben hin?
Danke für Hilfe
Grüsse
aivilon
als erstes, bin schon seit einiger Zeit am googlen. Also verzeiht wenn ich etwas übersehn hab.
Ich hab ein ini file, in welchem in folgender aufstellung Namen und Pfäde von .jar Files drinn stehen:
Name des Jars=c:\Pfad zur JarDatei
dieses ini File wird beim Starten meines Programms ausgelesen. funktioniert auch wunderbar.
Mittels Button möchte ich jetzt ausgewählte (mehrere Möglich) Items im ini File suchen und löschen.
Ich hab folgenden Code:
Private Sub jarDelete_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles jarDelete.Click
If Me.ListView1.SelectedItems.Count > 0 Then
For Each item As ListViewItem In ListView1.SelectedItems
ListView1.Items.Remove(item)
Dim GanzeZeile As String = ListView1.SelectedItems.ToString
Dim Sucheninini As String
Dim inipath As String = Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData) & "\Mauncher\jars.ini"
Dim sr As New StreamReader(inipath)
Dim sw As StreamWriter
Dim inicontent As String = sr.ReadToEnd()
sr.Close()
MessageBox.Show(GanzeZeile & ", " & inipath & ", " & item.Text & "=" & item.SubItems.Item(1).Text)
Sucheninini = item.Text & "=" & item.SubItems.Item(1).Text
**inicontent = System.Text.RegularExpressions.Regex.Replace(inicontent, Sucheninini, "")**
sw = New StreamWriter(inipath)
sw.Write(inicontent)
sw.Close()
Next
End If
End Sub
Folgender Fehler tritt in der von den je zwei * eingeschlossenen Zeile auf: "Kopie von MC_2.jar=C:\Dokumente und Einstellungen\b400wyp\Anwendungsdaten\Roaming\.minecraft\bin" wird analysiert - Unbekannte Escape-Zeichenfolge \R.
Was soll das jetzt bedeuten?
Wie bring ich mein Vorhaben hin?
Danke für Hilfe
Grüsse
aivilon
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 184950
Url: https://administrator.de/contentid/184950
Ausgedruckt am: 18.11.2024 um 03:11 Uhr
14 Kommentare
Neuester Kommentar
... und: Braucht es für dieses Vorhaben überhaupt "
Grüße
bastla
Regex
", oder genügt vielleicht schon ein simples "Replace
" (wie zB hier gezeigt?Grüße
bastla
Nun ja, die MSDN sagt bei Regex.Replace:
Und wenn Du keine Leerzeilen haben willst, müsste man auch nach das Carriage return & Line Feed Zeichen mit ersetzen.
Laut http://msdn.microsoft.com/de-de/library/az24scfc.aspx ist das Symbol dafür \n
Und da Du auch noch willst, daß es nur dann ersetzt, wenn es von vorne komplett stimmt, würde ich es mal mit folgendem in der sucheninini probieren:
Da der umgekehrte Schrägstrich als Escapezeichen interpretiert wird, muss jeder umgekehrte Schrägstrich mit einem weiteren umgekehrten Schrägstrich als Escapezeichen versehen werden.
Damit müsstes Du vermutlichKopie von MC_2.jar=C:\\Dokumente und Einstellungen\\b400wyp\\....
nehmen.Und wenn Du keine Leerzeilen haben willst, müsste man auch nach das Carriage return & Line Feed Zeichen mit ersetzen.
Laut http://msdn.microsoft.com/de-de/library/az24scfc.aspx ist das Symbol dafür \n
Und da Du auch noch willst, daß es nur dann ersetzt, wenn es von vorne komplett stimmt, würde ich es mal mit folgendem in der sucheninini probieren:
\nminecraft.jar=C:\\Dokumente und Einstellungen\\b400wyp\\Anwendungsdaten\\roaming\\.minecraft\bin
Funktioniert aber nicht, wenn der Wert in der 1. Zeile steht, weil dann es nicht mit \n anfängt.
Es gibt bei Regex noch den Anker (auch von http://msdn.microsoft.com/de-de/library/az24scfc.aspx)
Also nächster Versuch wäre:
Also nächster Versuch wäre:
^minecraft.jar=C:\\Dokumente und Einstellungen\\b400wyp\\Anwendungsdaten\\roaming\\.minecraft\bin\r\n
Hallo aivilon und AndreasHoster!
Anderer Ansatz (allerdings nicht vor Eleganz strotzend ) - schematisch etwa so:
Grüße
bastla
Anderer Ansatz (allerdings nicht vor Eleganz strotzend ) - schematisch etwa so:
- die gesamte Ini-Datei per "
.Split(vbCrLF)
" in ein Array einlesen, - dieses per Schleife durchgehen,
- jede Zeile auf das Vorhandensein des Suchbegriffes prüfen ("
InStr()
"), - wenn gefunden, den Zeileninhalt durch "" ersetzen,
- am Ende ein "
.Join(vbCrLf)
" sowie - in einer weiteren Schleife solange "
.Replace(vbCrLf & vbCrLf, vbCrLf
)", bis es keine 2 aufeinanderfolgenden Zeilenschaltungen mehr gibt
Grüße
bastla
[OT]
Öhhm? Minecraft-Projektmappe???
8 Stunden verbrannt?
Den ganzen Montach mit Spitzhacke verdaddelt? Im Büro???
Und dein Cheffe spielt mit ????
Falls nicht -> ich hoffe, er kennt deinen Nick nicht...
Grüße
Biber
[OT]
Zitat von @aivilon:
HMPF....ich könnt heulen :'-(
meine Projektmappe hat den Stand von letztem Freitag :'-(
8 Stunden Arbeit im A***
^minecraft.jar=C:\\Dokumente und Einstellungen\\b400wyp\\Anwendungsdaten\\roaming\\.minecraft\bin\r\n
HMPF....ich könnt heulen :'-(
meine Projektmappe hat den Stand von letztem Freitag :'-(
8 Stunden Arbeit im A***
^minecraft.jar=C:\\Dokumente und Einstellungen\\b400wyp\\Anwendungsdaten\\roaming\\.minecraft\bin\r\n
Öhhm? Minecraft-Projektmappe???
8 Stunden verbrannt?
Den ganzen Montach mit Spitzhacke verdaddelt? Im Büro???
Und dein Cheffe spielt mit ????
Falls nicht -> ich hoffe, er kennt deinen Nick nicht...
Grüße
Biber
[OT]
@bastla
So hätte ich es selber auch gemacht, allerdings hätte ich kein Join am Schluss gemacht, sondern den Array per Schleife durchgegangen und jeden Index, der was enthalt in die Datei geschrieben und leere weggelassen.
Aber mit Regexen rumzuspielen schadet auch nicht, die kann man sicherlich auch irgendwann mal wieder brauchen.
Vorallem lassen sich manche Sachen elegant mit Regexen lösen, nur brauche ich meistens länger die Expression zusammenzubasteln als es unschön zu lösen.
So hätte ich es selber auch gemacht, allerdings hätte ich kein Join am Schluss gemacht, sondern den Array per Schleife durchgegangen und jeden Index, der was enthalt in die Datei geschrieben und leere weggelassen.
Aber mit Regexen rumzuspielen schadet auch nicht, die kann man sicherlich auch irgendwann mal wieder brauchen.
Vorallem lassen sich manche Sachen elegant mit Regexen lösen, nur brauche ich meistens länger die Expression zusammenzubasteln als es unschön zu lösen.
@AndreasHoster
Grüße
bastla
nur brauche ich meistens länger die Expression zusammenzubasteln als es unschön zu lösen.
... was auch die Überlegung hinter meinem Vorschlag war ... Grüße
bastla