2016-12-30 15 views
1

私はCSVファイルを持っています。私はユーザー名でCSVから行を取得できるコードを書く必要があります。そして、CSVファイルからその行を更新するか削除する必要があります。私はユーザー名で行データを取得することができました。しかし、私はどのように更新または削除機能のコードを記述するか分からない。私のコードは、次のように1行を取得するCSVファイルの行を編集および/または削除します

StreamReader reader = new StreamReader(System.IO.File.OpenRead(@"C:\Test\test.CSV")); 

     UserDetailsViewModel objInput = new UserDetailsViewModel(); 

     while (!reader.EndOfStream) 
     { 
      string line = reader.ReadLine(); 
      if (!String.IsNullOrWhiteSpace(line)) 
      { 
       string[] values = line.Split(','); 
       if (values[0] == "Bharat") 
       { 
        objInput.FirstName = values[0]; 
        objInput.LastName = values[1]; 
        objInput.Address1 = values[2]; 
        objInput.Address2 = values[3]; 
        objInput.City = values[4]; 
        objInput.State = values[5]; 
        objInput.ZipCode = values[6]; 
        break; 

       } 
      } 
     } 
     reader.Dispose(); 
     return View(objInput); 

CSVファイルの更新と削除のコードを書くのを手伝ってください。

ありがとうございました。

+4

これまでに何を試みましたか?あなたは人間としてそれをやる方法を書き留めてそこから始めよう。 – BugFinder

+0

これまでのところ、私はCSVからデータを取得して配列に格納することができます。私はまだ全体のCSVファイルに影響を与えずにCSV上の単一の行を更新しようとしています。現在、CSV全体を更新された値で上書きしています。 – crony

答えて

0

以下の方法を使用して、目的の結果を達成できます。

- >まず、.csvファイルを読む必要があります。

- >ファイルのすべての行を繰り返し処理しながら、編集/削除する行を選択してその行を変更し、その行を文字列リストに格納することができます。

- >最後に、文字列リストをファイルに書き込む必要があります。それで全部です。例については

List<String> lines = new List<String>(); 
    using (StreamReader reader = new StreamReader(System.IO.File.OpenRead(@"C:\Test\test.CSV"));) 
    { 
     String line; 
     while ((line = reader.ReadLine()) != null) 
     { 
      if (line.Contains(",")) 
      { 
       String[] split = line.Split(','); 

       if (//condition for Edit record like : split[1] == "abc" etc.) 
       { 
        // update that 
        split[1] = "xyz"; 
        line = String.Join(",", split); 
        lines.Add(line); 
       } 
       if (//condition for Delete row.) 
       { 
        // don't add that row into string list 
       } 
      } 

     } 
    } 

    using (StreamWriter writer = new StreamWriter(@"C:\Test\test.CSV", false)) 
    { 
     foreach (String line in lines) 
      writer.WriteLine(line); 
    } 
+0

上記のコードを使用すると、すべてのCSV全体が上書きされます。たとえば、2行目のデータを修正しようとしました。データを変更し、ファイル全体を上書きし、更新された単一の行を表示します – crony

+0

はい。それは全体のCSVファイルを上書きするが、私はそこに1行の更新のためのアプローチがあるとは思わない。ファイル内のレコードを変更したい場合、ファイル全体のデータを再度ファイルに書き込む必要があるからです。 – CommonPlane

0

読書とwirtingのcsvは一般的に、一見のようですよりも複雑です。 そのタスクにKBCsv(https://github.com/kentcb/KBCsv)のようなライブラリを使用してください。

関連する問題