2016-10-19 8 views
0

データロギング後にVisual Studioのcsvにデータテーブルをエクスポートしようとしています。ビジュアルスタジオからcsvにエクスポートするときにストリームライターをランダムに追加するC#

何らかの理由で、私は驚くべき結果を得ていますが、メモ帳は問題ありません。改行はデータ内のランダムなポイントに追加されているようです。

私はしばらくの間これを戦っているので、どんな助けもありがとう!

Excel Version

Notepad Version

void SaveAllData() 
    { 
     { 
      saveFileDialog1.InitialDirectory = "C"; // open save file window 
      saveFileDialog1.Title = "Save as CSV File"; // promt save as csv 
      saveFileDialog1.FileName = DateTime.Now.ToString("dd.MM.yy_HH.mm"); 
      saveFileDialog1.Filter = "CSV File | *.csv"; // csv format 

      if (saveFileDialog1.ShowDialog() != DialogResult.Cancel) // if save dialog opens 
      { 
       string value = ""; 
       DataGridViewRow dr = new DataGridViewRow(); 
       StreamWriter swOut = new StreamWriter(saveFileDialog1.FileName, true, Encoding.ASCII); 

       //write header rows to csv 
       for (int i = 0; i <= IncomingDataTable.Columns.Count - 1; i++) 
       { 
        if (i > 0) 
        { 
         swOut.Write(","); 
        } 
        swOut.Write(IncomingDataTable.Columns[i].HeaderText); 
       } 

       swOut.WriteLine(); 

       //write DataGridView rows to csv 
       for (int j = 0; j <= IncomingDataTable.Rows.Count - 1; j++) 
       { 
        if (j > 0) 
        { 
         swOut.WriteLine(); 
        } 
        dr = IncomingDataTable.Rows[j]; 

        for (int i = 0; i <= IncomingDataTable.Columns.Count - 1; i++) 
        { 
         if (i > 0) 
         { 
          swOut.Write(","); 

         } 

         value = dr.Cells[i].Value.ToString(); 
         swOut.Write(value); 

        } 
       } 
       swOut.Close(); 
      } 

    MessageBox.Show("Your data has been successfully saved.", "Message", MessageBoxButtons.OK, MessageBoxIcon.Information); // alert user file has saved 



      serialPort1.Close(); // close serial port 
      Setup_Page f1 = new Setup_Page(); // open setup page 
      this.Hide(); 
      f1.ShowDialog(); 
      Close(); // close this page 
     } 
    } 
+0

あなたのためにこれを行うライブラリがあります:https://www.nuget.org/packages/CsvHelper/ – Magnus

+0

@Magnus私の問題はCSVとしてエクスポートされていません。エクスポート中にデータ内に改行があります。 – charley

+0

受信データに改行が含まれていますか?メモ帳の代わりにワードパッドでCSVファイルを開いてみてください。ワードパッドは改行で折れてしまいますが、メモ帳は破損しません。それが問題なら、すべての着信データを書き留めてから書き込んでください。 – Lithis

答えて

0

ご入力されたデータは、改行し出力することが含まれている場合、一部のアプリケーションは、改行としてそれらを扱いますが、いくつかはしません。メモ帳はありませんので、メモ帳の1行のように見えます。 Excelは改行を認識し、新しい行を開始します。メモ帳の代わりにワードパッドでCSVファイルを開きます。 WordPadは改行を認識しますが、メモ帳では見えません。

簡単な解決方法は、入力データにString.Trimを書き込むことです。しかし、Magnusが述べたように、図書館はあなたの友人です。もしあなたが良いものを使っていたのであれば、最初に問題はなかったかもしれません。よく書かれたライブラリがデータに埋め込み改行を扱っていたからです。

改行をトリミングすることができます。さて、もし改行があなたのデータの真中にあればどうでしょうか? Trimはそれを処理しません。改行はありませんか?コンマはどうですか?データは数字だけなので、カンマはありません。それが小数で、それを生産したコンピュータがフランス、またはカンマを小数点区切り記号として使用する他の多くの国にある場合はどうなりますか?データの引用符はどうですか?図書館はすでにこれらのすべての事件を処理しているかもしれません。 CSVはよく定義された標準ではありませんが、CSVはよく定義された標準ではありません(ただし、カンマ小数点の区切り記号は出力を使用する人にとってはまだ問題になるかもしれませんが、少なくともCSVは整形式になります)。

上記のケースを扱うために、さまざまなアプリケーションとライブラリでは異なる戦略が使用されています。したがって、ライブラリがExcelと同じ形式を使用していない場合でも、正しく読み込まれない可能性があります。

関連する問題