2016-03-21 19 views
1

Ich bin neu bei vb.net und versuche, etwas wirklich einfaches zu tun. Ich habe diesen Code, der bestimmte Zeile von Text aus INI-Datei liest.So ersetzen Sie die Textzeichenfolge in einer Textdatei

Dim FilePath As String = Application.StartupPath & "\bin\userconfig.ini" 
Dim text As String = IO.File.ReadAllText(FilePath) 
Dim newText = text.Replace("UserName = ", TextBox_NewUser.Text) 
IO.File.WriteAllText(FilePath, newText) 

Wie ich es, dass die Textzeile nach dem "=" ersetzen mit etwas, das Sie in TextBox_NewUser eingeben. Wie Sie mit dem aktuellen Code sehen können, ersetzt es nur die ganze "UserName =", die ich nicht will.

Das spezifische Textzeile in der ini standardmäßig diesen Wert hat:

"UserName = Unnamed" 

So wie ich es zu ersetzen, genau das "Unnamed" mit etwas, das ich in TextBox_NewUser geben?

Jede Hilfe wird am meisten geschätzt.

+0

Ich habe mehrere Zeilen verwendet, um die Lesbarkeit zu erhöhen. Ich hoffe, das ist in Ordnung für dich. –

+0

Gibt es mehrere Instanzen dieses "UserName = Unbenannt" -Falls oder nur eines? –

+0

Besser, wenn Sie einen INI-Parser verwenden, sehen Sie meine ** IniManager ** -Klasse (und die kommentierten Beispiele innerhalb): https://github.com/ElektroStudios/ElektroKit/tree/master/Solution/v1.2/Elektro.Application .Einstellungen/Typen – ElektroStudios

Antwort

2
Dim newText = text.Replace("UserName = Unnamed", "UserName = " & TextBox_NewUser.Text) 
+0

Oder: 'Dim newText = text.Replace (" Unbenannte ", TextBox_NewUser.Text)' – OSKM

+0

Vielen Dank für Ihre Antwort, aber Sie sehen, dass "Unbenannt" ist variabel und könnte alles sein. Wenn ich also versuchen würde, meinen Namen noch einmal in etwas anderes zu ändern, würde es nicht funktionieren. – Darius47

0

Hier ist ein anderer Weg, um dies zu tun, gibt es zusätzliche Aussagen, die gemacht werden könnten, z.B. der folgende Code übernimmt die Linien beginnen nicht mit Leerzeichen und wenn sie es tun würden Sie zuerst auf jeder Zeile ein Trimm tun, bevor Starts usw.

Config-Datei

Role = Moderator 
UserName = xxxx 
Joined = 09/23/1006 

-Code

Public Class Form1 
    Private fileName As String = 
     IO.Path.Combine(
      AppDomain.CurrentDomain.BaseDirectory, "userConfig.ini") 
    ''' <summary> 
    ''' assumes the file exist but does not assume there is text in 
    ''' the text box. 
    ''' </summary> 
    ''' <param name="sender"></param> 
    ''' <param name="e"></param> 
    ''' <remarks></remarks> 
    Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click 
     If Not String.IsNullOrWhiteSpace(TextBox_NewUser.Text) Then 
      Dim lines As List(Of String) = IO.File.ReadAllLines(fileName).ToList 
      For index As Integer = 0 To lines.Count - 1 
       If lines(index).ToLower.StartsWith("username") Then 
        lines(index) = String.Concat("UserName = ", TextBox_NewUser.Text) 
       End If 
      Next 
      IO.File.WriteAllLines(fileName, lines.ToArray) 
     End If 
    End Sub 
End Class 
mit

Beispielprojekt für Microsoft OneDrive, VS2013 https://onedrive.live.com/redir?resid=A3D5A9A9A28080D1!907&authkey=!AKQCanSTiCLP4mE&ithint=file%2czip

+0

Werde versuchen, diese Karen, danke. Code sieht für eine so einfache Aufgabe etwas komplex aus. – Darius47

+0

Hallo Darius47, in Bezug auf komplexe Code für eine einfache Aufgabe, ist alles abhängig von der Kenntnis der Person, in diesem Fall der vb.net Sprache. Natürlich könntest du immer mit der ersten Antwort gehen, die dir mehr gefällt, da es sehr einfach ist. Das ist die Schönheit dieser Seite, Sie können verschiedene Möglichkeiten bekommen, eine Frage zu lösen :-) –

Verwandte Themen