代码之家  ›  专栏  ›  技术社区  ›  charley

Streamwriter在从visual studio导出到csv c时随机添加额外的换行符#

  •  1
  • charley  · 技术社区  · 8 年前

    我已经为此奋斗了一段时间了,所以任何帮助都非常感谢!

    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
            }
        }
    
    1 回复  |  直到 8 年前
        1
  •  0
  •   Lithis    8 年前

    如果您的输入数据包含换行符,而您输出它们,则某些应用程序会将它们视为换行符而有些应用程序不会。记事本没有,所以它看起来像是记事本的一行。Excel识别换行符并开始新行。在写字板而不是记事本中打开CSV文件;写字板将识别换行符,而它们在记事本中不可见。

    简单的解决方法是调用 String.Trim 在写入输入数据之前对其进行处理。然而,正如马格努斯提到的,图书馆是你的朋友。如果您使用了一个好的库,这可能不是一个问题,因为一个编写良好的库可以处理数据中嵌入的换行符。

    您可以说您可以修剪换行符。那么,如果数据中间有一条换行符呢? Trim 不会处理的。不会有任何新线吗?逗号呢?不会有任何逗号,因为数据只是数字?如果它是一个十进制,而产生它的计算机是在法国,或者其他许多使用逗号作为十进制分隔符的国家?数据中的引号呢?图书馆可能已经处理了所有这些情况。(逗号-十进制分隔符对于使用输出的人来说可能仍然是个问题,但至少CSV格式良好。)

    但请注意,CSV不是一个定义良好的标准。不同的应用程序和库使用不同的策略来处理上述情况,因此,如果您的库没有使用与Excel相同的格式,它可能仍然无法正确加载。