2017-12-17 3 views
0

辞書を使ってテキストファイルから行を削除するボタンを作成しようとしていましたが、行を削除すると残りの行が値のない辞書だけのキー、どんな助け? 編集:ファイルは次のような行を削除する前に: 私は信者の行を削除した場合信者、ロック、665498 ネイティブ、ロック、597264 削除した後、ファイルが次のようになります。 ネイティブ,, :辞書を使ってWindowsフォームアプリケーションのテキストファイルから行を削除する

private void button1_Click(object sender, EventArgs e) 
{ 
    string pathsource = @"C:\Users\maher\Downloads\CDs.txt"; 
    string name = textBox1.Text; 
    StreamReader reader = new StreamReader(pathsource); 
    Dictionary<string, KeyValuePair<string, string>> MS = new Dictionary<string, KeyValuePair<string, string>>(); 
    KeyValuePair<string, string> kvp = new KeyValuePair<string, string>(); 
    while (reader.Peek() != -1) 
    { 
     string s; 
     string[] fasl; 
     s = reader.ReadLine(); 
     fasl = s.Split(','); 
     MS.Add(fasl[0], kvp); 
    } 

    reader.Close(); 
    MS.Remove(name); 

    using (StreamWriter writer = new S  treamWriter(pathsource, false)) 
    { 
     foreach(var entry in MS) 
     { 
      writer.WriteLine("{0},{1},{2}", entry.Key, entry.Value.Key,entry.Value.Value); 
     } 
    } 

    MessageBox.Show("CD Removed"); 
    textBox1.Clear(); 
    textBox1.Focus(); 
} 
+0

なぜあなたはそれを使用していないときにkvpを使用していますか? – Sunil

+0

なぜあなたは辞書が必要だと思っていますか?線がどのように見えていて、削除したいのかの例を教えてください。なぜすべての行をリストに読み込み、名前がその行にあるかどうかをチェックし、その行をリストから削除しないのはどうですか?新しいファイルまたは同じファイルに書き戻し/保存します.. – MethodMan

+0

Sunilあなたの質問を理解できません.. –

答えて

0

ネイティブ,,

はあなたがコンマ線引きキー、kvp.key、およびkvp.valを書いているということである

のようなあなたの出力が見えることの理由あなたは実際にkvpを設定することは決してありません。

while (reader.Peek() != -1) 
{ 
    string s; 
    string[] fasl; 
    s = reader.ReadLine(); 
    fasl = s.Split(','); 
    // Add these 
    KeyValuePair<string, string> kvp = new KeyValuePair<string, string>(fasl[1], fasl[2]); 
    // So that the kvp is set 
    MS.Add(fasl[0], kvp); 
} 
+0

* kvp.Key * = "プロパティまたはインデクサーのKeyValuePair <文字列、文字列> .Key 'を割り当てることができませんでした。読み取り専用 " –

+0

私の悪い - あなたはコンストラクタでそれを設定する必要があります。私は更新する –

+0

ありがとう、非常に便利です。 –

関連する問題