Top-Themen

AppleEntwicklungHardwareInternetLinuxMicrosoftMultimediaNetzwerkeOff TopicSicherheitSonstige SystemeVirtualisierungWeiterbildungZusammenarbeit

Aktuelle Themen

Administrator.de FeedbackApache ServerAppleAssemblerAudioAusbildungAuslandBackupBasicBatch & ShellBenchmarksBibliotheken & ToolkitsBlogsCloud-DiensteClusterCMSCPU, RAM, MainboardsCSSC und C++DatenbankenDatenschutzDebianDigitiales FernsehenDNSDrucker und ScannerDSL, VDSLE-BooksE-BusinessE-MailEntwicklungErkennung und -AbwehrExchange ServerFestplatten, SSD, RaidFirewallFlatratesGoogle AndroidGrafikGrafikkarten & MonitoreGroupwareHardwareHosting & HousingHTMLHumor (lol)Hyper-VIconsIDE & EditorenInformationsdiensteInstallationInstant MessagingInternetInternet DomäneniOSISDN & AnaloganschlüsseiTunesJavaJavaScriptKiXtartKVMLAN, WAN, WirelessLinuxLinux DesktopLinux NetzwerkLinux ToolsLinux UserverwaltungLizenzierungMac OS XMicrosoftMicrosoft OfficeMikroTik RouterOSMonitoringMultimediaMultimedia & ZubehörNetzwerkeNetzwerkgrundlagenNetzwerkmanagementNetzwerkprotokolleNotebook & ZubehörNovell NetwareOff TopicOpenOffice, LibreOfficeOutlook & MailPapierkorbPascal und DelphiPeripheriegerätePerlPHPPythonRechtliche FragenRedHat, CentOS, FedoraRouter & RoutingSambaSAN, NAS, DASSchriftartenSchulung & TrainingSEOServerServer-HardwareSicherheitSicherheits-ToolsSicherheitsgrundlagenSolarisSonstige SystemeSoziale NetzwerkeSpeicherkartenStudentenjobs & PraktikumSuche ProjektpartnerSuseSwitche und HubsTipps & TricksTK-Netze & GeräteUbuntuUMTS, EDGE & GPRSUtilitiesVB for ApplicationsVerschlüsselung & ZertifikateVideo & StreamingViren und TrojanerVirtualisierungVisual StudioVmwareVoice over IPWebbrowserWebentwicklungWeiterbildungWindows 7Windows 8Windows 10Windows InstallationWindows MobileWindows NetzwerkWindows ServerWindows SystemdateienWindows ToolsWindows UpdateWindows UserverwaltungWindows VistaWindows XPXenserverXMLZusammenarbeit
GELÖST

Vb.net - Löschen einer Bestimmten Zeile

Frage Entwicklung Visual Studio

Mitglied: aivilon

aivilon (Level 1) - Jetzt verbinden

14.05.2012, aktualisiert 10:27 Uhr, 5532 Aufrufe, 14 Kommentare

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:
01.
Private Sub jarDelete_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles jarDelete.Click 
02.
    If Me.ListView1.SelectedItems.Count > 0 Then 
03.
        For Each item As ListViewItem In ListView1.SelectedItems 
04.
            ListView1.Items.Remove(item) 
05.
 
06.
            Dim GanzeZeile As String = ListView1.SelectedItems.ToString 
07.
            Dim Sucheninini As String 
08.
            Dim inipath As String = Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData) & "\Mauncher\jars.ini" 
09.
            Dim sr As New StreamReader(inipath) 
10.
            Dim sw As StreamWriter 
11.
            Dim inicontent As String = sr.ReadToEnd() 
12.
            sr.Close() 
13.
 
14.
            MessageBox.Show(GanzeZeile & ", " & inipath & ", " & item.Text & "=" & item.SubItems.Item(1).Text) 
15.
 
16.
            Sucheninini = item.Text & "=" & item.SubItems.Item(1).Text              
17.
            **inicontent = System.Text.RegularExpressions.Regex.Replace(inicontent, Sucheninini, "")** 
18.
            sw = New StreamWriter(inipath) 
19.
            sw.Write(inicontent) 
20.
            sw.Close() 
21.
        Next 
22.
    End If 
23.
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
Mitglied: AndreasHoster
14.05.2012 um 11:39 Uhr
Das bedeutet, das die Regex.Replace Funktion mit den Parametern nicht zufrieden ist, die Du übergibst.
Was haben denn INICONTENT und SUCHENININI für einen Wert, wenn der Fehler kommt?
Bitte warten ..
Mitglied: bastla
14.05.2012 um 12:24 Uhr
... und: Braucht es für dieses Vorhaben überhaupt "Regex", oder genügt vielleicht schon ein simples "Replace" (wie zB hier gezeigt?

Grüße
bastla
Bitte warten ..
Mitglied: aivilon
14.05.2012 um 12:41 Uhr
Zitat von AndreasHoster:
Das bedeutet, das die Regex.Replace Funktion mit den Parametern nicht zufrieden ist, die Du übergibst.
Was haben denn INICONTENT und SUCHENININI für einen Wert, wenn der Fehler kommt?

in inicontent: der ganze Inhalt der ini Datei
in Sucheninini: minecraft.jar=C:\Dokumente und Einstellungen\b400wyp\Anwendungsdaten\roaming\.minecraft\bin


Zitat von bastla:
... und: Braucht es für dieses Vorhaben überhaupt "Regex", oder genügt vielleicht schon ein simples
"Replace" (wie zB hier gezeigt?

Grüße
bastla

Es reicht ja. Habs grad getestet. Nur hab ich jetzt das Problem mit den namen, respektive als Beispiel:
Im ini stehen folgende Zeilen
>>minecraft.jar=C:\Dokumente und Einstellungen\b400wyp\Anwendungsdaten\roaming\.minecraft\bin
>>oldminecraft.jar=C:\Dokumente und Einstellungen\b400wyp\Anwendungsdaten\roaming\.minecraft\bin
>>newminecraft.jar=C:\Dokumente und Einstellungen\b400wyp\Anwendungsdaten\roaming\.minecraft\bin

Nach dem löschen sieht das ini file so aus:
>>{hier ist eine leere Zeile}
>>old
>>new

Ich möchte es aber gern, dass nur GENAU minecraft.jar=C:\Dokumente und Einstellungen\b400wyp\Anwendungsdaten\roaming\.minecraft\bin gelöscht wird wenn ich dieses in der listview ausgewählt habe. Ausserdem müssen die leeren zeilen schwinden.

habt ihr eine Idee wie ich den vorhandenen code nun so umbauen kann, damit das wie gewünscht abläuft?

Grüsse
aivilon
Bitte warten ..
Mitglied: AndreasHoster
14.05.2012 um 13:41 Uhr
Nun ja, die MSDN sagt bei Regex.Replace:
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 vermutlich
Kopie 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.
Bitte warten ..
Mitglied: bastla
14.05.2012 um 14:49 Uhr
... außerdem sollte CR + LF durch "\r\n" abgebildet werden ...

Grüße
bastla
Bitte warten ..
Mitglied: aivilon
14.05.2012 um 15:11 Uhr
Zitat von AndreasHoster:
Nun ja, die MSDN sagt bei Regex.Replace:
> 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 vermutlich
> Kopie von MC_2.jar=C:\\Dokumente und Einstellungen\\b400wyp\\....
nehmen.

Jo. ohne Regex und nur mit Replace funktionierts. aber eben nach dem im vorherigen Post geschriebenem muster.

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 muss doch eine Möglichkeit geben, wie ich eine ganze Zeile restlos (also auch ohne zurückbleibendem Zeilenumbruch) löschen kann, und es sollte doch ebenfalls möglich sein, eine Zeile nur dann zu löschen, wenn sie genau wie die angegebene Zeile ist.
Bitte warten ..
Mitglied: aivilon
14.05.2012 um 15:15 Uhr
HMPF....ich könnt heulen :'-(

Immer wieder speicher ich meine Projektmappe...jetzt hatte Visual Studio grad voll den hänger, ist abgestürzt und meine Projektmappe hat den Stand von letztem Freitag :'-(

8 Stunden Arbeit im A***

NOOOOOOO



#Edit

WUUUHUUUU .... habs nur vom stick geöffnet und nicht von da wo ich es eigentlich dachte...JUhuuu x))))))

also demnach weiter im Kontext.
Bitte warten ..
Mitglied: AndreasHoster
14.05.2012 um 16:55 Uhr
Es gibt bei Regex noch den Anker (auch von http://msdn.microsoft.com/de-de/library/az24scfc.aspx)
Also nächster Versuch wäre:
^minecraft.jar=C:\\Dokumente und Einstellungen\\b400wyp\\Anwendungsdaten\\roaming\\.minecraft\bin\r\n
Bitte warten ..
Mitglied: bastla
14.05.2012 um 18:00 Uhr
Hallo aivilon und AndreasHoster!

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
Bitte warten ..
Mitglied: Biber
14.05.2012 um 18:52 Uhr
[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

Ö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]
Bitte warten ..
Mitglied: aivilon
14.05.2012 um 20:05 Uhr
Hallo Bieber

Da ich eher der typ bin, der solche sachem mittels tun und nich lesen lernt begann ich mit einem kleinen Projekt, welches nich schön programmiert sein muss. Ich möchte nicht gleich codes ausführen, welche ins produktive netz greiffen. Und da ich die befehle etc. Noch nicht kenne etc, wäre mir das risiko zu hoch zum etwas anstellen.

Deshalb einfach eine fiktive arbeitsmappe.

Wobei anzumerken ist dass ich dies nebenbei mache. Hauptsächlich hab ich eine arbeitsmappe, welche meine administration zusammenfass. Aber eben, jedesmal bei was neuem mach ich das zuerst in dieser mappe

Grüsse
Aivilon
Bitte warten ..
Mitglied: AndreasHoster
15.05.2012 um 08:53 Uhr
@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.
Bitte warten ..
Mitglied: bastla
15.05.2012 um 09:36 Uhr
@AndreasHoster
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
Bitte warten ..
Mitglied: aivilon
15.05.2012 um 10:13 Uhr
werds später mal ausprobieren und morgen dann bescheid geben.

vorerst schon mal danke an alle =)
Bitte warten ..
Neuester Wissensbeitrag
Humor (lol)

Linkliste für Adventskalender

(3)

Information von nikoatit zum Thema Humor (lol) ...

Ähnliche Inhalte
Heiß diskutierte Inhalte
Windows Server
DHCP Server switchen (22)

Frage von M.Marz zum Thema Windows Server ...

Hardware
gelöst Negative Erfahrungen LAN-Karten (19)

Frage von MegaGiga zum Thema Hardware ...

SAN, NAS, DAS
gelöst HP-Proliant Microserver Betriebssystem (14)

Frage von Yannosch zum Thema SAN, NAS, DAS ...

Grafikkarten & Monitore
Win 10 Grafikkarte Crash von Software? (13)

Frage von Marabunta zum Thema Grafikkarten & Monitore ...