2016-04-27 15 views
3

CSVファイル内の特定のデータフィールドを置き換えようとしていますが、問題が発生しています。私のcsvファイルを同じように構成されている特定のデータをCSVファイルに置き換えます。

user, password, role, id, 
1, abc, 2, 3 
2, def, 2, 4 
3, ghi, 5, 5 

私は、ファイルの罰金を読むことができますが、私は問題を抱えていますWindowsフォームでテキストボックスとボタンを使用してパスワードを交換したいとき。

private void resetBtn_Click(object sender, EventArgs e) 
    { 
     var encoding = Encoding.GetEncoding("iso-8859-1"); 
     var csvLines = File.ReadAllLines("C:\\Users\\hughesa3\\Desktop\\test environment\\users.csv", encoding); 

     foreach (var line in csvLines) 
     { 
      var values = line.Split(','); 
      if (values[0].Contains(form2value)) 
      { 
       values[1] = confirmPass.Text; 
      } 
    } 
} 

Form2valueが自分のユーザー名で、だから何イムんしようとしては、次のとおりです。最初の列は、それがその行の2番目の列に移動しますform2valueで入力されたものが含まれている場合。

私は私が唯一form2valueが見つかった場合にそれをしたいとき、[1]の値が変化しており、それがあるが、それはまた、すべての値を表示している場合だけ表示するには、この

var values = line.Split(','); 
      if (values[0].Contains(form2value)) 
      { 
       MessageBox.Show(values[1]); 
       values[1] = confirmPass.Text; 
       MessageBox.Show(values[1]); 
      } 
    } 

を試してみました。

私はこれをできる限り最善の方法で説明しようとしましたが、誰かがもっと情報を必要としている場合はお知らせください。

誰かが私が間違っていることを知っていますか?

+0

は、私はあなたがこれを読んで、その後あなたのSOに掲載前の質問を検討し、提案することができる.... http://meta.stackexchange.com/questions/5234/あなたは、その変数に何が入っているかを見るために、最初にMessageBox.Show(form2value)を追加しようとしましたか?5235#5235 – Monty

+0

空白またはスペースが含まれている場合、すべての行が表示されます。 –

答えて

0

私は、これはあなたが大規模なセットで割れ得ることができます非常に小さなコンフィギュレーションをお届けします

https://joshclose.github.io/CsvHelper/

、あなたはこのようないくつかのものを探していると思います。あなたは、データテーブルを使用した場合

0

人生はあなたのために容易になるだろう..........ここ

がEXCERPです... DTはDataTableのです。 分割列見出しを追加するには、あなたのファイルと私たちdt.Columns.Addの最初の行....

private void AddDataToDataTable() 
{ 
    using (StreamReader sr = new StreamReader(new MemoryStream(this.FileContents))) 
    { 
     //Igone headings & blank Lines 
     string line = string.Empty; 
     while ((line = sr.ReadLine()) != null) 
     { 
      //If blank line then skip line 
      if (line == string.Empty) 
      { 
       continue; 
      } 
      dt.Rows.Add(line.Split(this.Delimeter)); 
     } 
    } 
} 

・ホープこれはあなたがあなたの中で使用values内部配列を変更している

0

を支援コードではなく、ファイル自体です。実際には、ファイルをどこにでも書いておらず、読んでいるだけです。

あなたは次のことを行う必要があります:ファイルを読み、ユーザー名が存在する場合はその行を取得して、その特定の行にパスワードを書き込んでください。ここで

は、あなたがそれを行うことができます方法は次のとおりです。

private void resetBtn_Click(object sender, EventArgs e) 
{ 
    var encoding = Encoding.GetEncoding("iso-8859-1"); 
    var csvLines = File.ReadAllLines("C:\\Users\\hughesa3\\Desktop\\test environment\\users.csv", encoding); 

    for (int i = 0; i < csvLines.Length; i++) 
    { 
     var values = csvLines[i].Split(','); 
     if (values[0].Contains(form2value)) 
     { 
      values[1] = confirmPass.Text; 

      using (FileStream stream = new FileStream("C:\\Users\\hughesa3\\Desktop\\test environment\\users.csv", FileMode.Create)) 
      { 
       using (StreamWriter writer = new StreamWriter(stream, encoding)) 
       { 
        for (int currentLine = 0; currentLine < csvLines.Length; ++currentLine) 
        { 
         if (currentLine == i) 
         { 
          writer.WriteLine(string.Join(",", values)); 
         } 
         else 
         { 
          writer.WriteLine(csvLines[i]); 
         } 
        } 

        writer.Close(); 
       } 

       stream.Close(); 
      } 
     } 
    } 
} 
+0

前のコードに間違いがあります。これは:else {writer.WriteLine(csvLines [i]); } これに:else {writer.WriteLine(csvLines [currentLine]); } –

関連する問題