0

次の内容のファイルcontacts.txtがあるとします。

adam
adam@gmail.com
kris
kris@gmail.com
james
james@gmail.com

また、ファイルの内容を次のように ListView (ListView1) に保存しました。

adam    adam@gmail.com
kris    kris@gmail.com
james   james@gmail.com

そして、アイテム Update で contextmenustrip を使用しました。

ListView で、james 行を右クリックして [更新] を選択すると、新しいフォームが読み込まれ、名前と電子メールを更新するように求められます。

テキストボックスに名前と電子メールを入力し、更新ボタンをクリックした後、対応する人の名前と電子メールをcontacts.txtファイルで更新する必要があります。そのフォームは閉じられ、前のフォームに戻ります。

James の名前を bond に変更し、bond@gmail.com にメールを送信するとします。

コンテンツは次のようになります。

adam
adam@gmail.com
kris
kris@gmail.com
bond 
bond@gmail.com

また、更新を右クリックすると、新しいフォームがロードされ、このインスタンスの名前と電子メールを入力するように求められます。ListView の james 行をクリックすると、james を名前に配置し、james@gmail.com を updatemenustrip の新しいフォーム クリックのテキスト ボックスの電子メールに配置したいとします。

4

2 に答える 2

1

それにはいくつかの方法があります。ここにいくつかあります。私はあなたの例を使用します...

  1. メモリ内のファイルのすべての行を読み取ります (例: string[])。配列のすべての行について、 が見つかった場合はjamesに置き換えbond、次の位置に を書き込みbond@gmail.comます。次に、すべての行を同じファイルに書き戻します

    var lines = File.ReadAllLines(@"C:\test.txt");
    
    for (int i = 0; i < lines.Length; i++) {
        var line = lines[i];
        if (line == "james") {
            lines[i] = "bond";
            lines[i + 1] = "bond@gmail.com";
        }
    }
    
    File.WriteAllLines(@"C:\test2.txt", lines);
    
  2. テキスト全体を読み取り、正規表現を使用してこれらの特定の値を置き換えます。

    var text = File.ReadAllText(@"C:\test.txt");
    
    string oldName = "james";
    string newName = "bond";
    string oldEmail = "james@gmail.com";
    string newEmail = "bond@gmail.com";
    
    var newText = Regex.Replace(
        text,
        string.Format(@"{0}([\n\r]+){1}", Regex.Escape(oldName), Regex.Escape(oldEmail)),
        string.Format(@"{0}$1{1}", newName, newEmail));
    
    File.WriteAllText(@"C:\test.txt", newText);
    
于 2013-03-02T05:13:34.477 に答える
0

更新後、ListView.items最新です。各項目を繰り返しListView.itemsてファイルに書き戻します。

于 2013-03-02T05:15:22.690 に答える