2016-03-21 33 views
1

私はvb.netを初めて使用していて、本当に簡単なことをしようとしています。私は.iniファイルから特定の行のテキストを読み取るこのコードを持っています。テキストファイルのテキスト文字列を置き換える方法

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) 

どのように私はそれはあなたがTextBox_NewUserに入力する何かを"="後にテキストの行を置き換え作るのですか。現在のコードでわかるように、私は欲しくない"UserName ="全体を置き換えます。

デフォルトでの.ini内のテキストの特定の行がこの値を持っていること:

"UserName = Unnamed" 

それでは、どのように私はそれは私がTextBox_NewUserを入力何かで、ちょうどその"Unnamed"を交換するのですか?

ご協力いただければ幸いです。

+0

私は複数の行を使用して読みやすくしています。それはあなたのために大丈夫だと思います。 –

+0

この「UserName =名前なし」の複数のインスタンスが存在するか、または1つだけ存在しますか? –

+0

INIパーサを使用する方がよい場合は、my ** IniManager **クラス(および内部のコメント付きの例)を参照してください。https://github.com/ElektroStudios/ElektroKit/tree/master/Solution/v1.2/Elektro.Application 。設定/タイプ – ElektroStudios

答えて

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

Or: 'Dim newText = text.Replace("無名 "、TextBox_NewUser.Text) – OSKM

+0

あなたの返事に感謝しますが、"無名 "は可変で何でもかまいません。だから私がもう一度何かに自​​分の名前を変更しようとすると、それはうまくいかないでしょう。 – Darius47

0

これについてもう1つの方法があります。これには別のアサーションがあります。コードは以下の行が空白で始まっていないと仮定し、彼らがした場合は、最初STARTSWITHなど

設定ファイル

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

コード

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 
を使用する前に、各行のトリムを行うだろう

Microsoft OneDriveのサンプルプロジェクト、VS2013 https://onedrive.live.com/redir?resid=A3D5A9A9A28080D1!907&authkey=!AKQCanSTiCLP4mE&ithint=file%2czip

+0

このカレンを試してください、ありがとう。このような簡単な作業のために、コードは少し複雑に見えます。 – Darius47

+0

こんにちはDarius47、単純なタスクの複雑なコードに関しては、すべての人の知識レベルに依存しています。この場合、vb.net言語です。もちろん、あなたはいつも好みのものになるかもしれない最初の答えに行くことができますが、それはとても簡単です。それはこのサイトの美しさです。あなたは質問を解決するさまざまな方法を得ることができます:-) –

関連する問題