繁体   English   中英

从Visual Studio导出到csv c#时,Streamwriter随机添加额外的换行符

[英]Streamwriter adding in extra line breaks randomly when exporting from visual studio to csv c#

我一直在尝试一段时间,以便在数据记录后将数据表导出到Visual Studio中的csv。

出于某些原因,导入Excel时得到奇怪的结果,而记事本很好。 似乎正在添加换行符,但在数据中的随机点处。

我已经为此作战了一段时间,因此我们将不胜感激!

Excel版本

记事本版本

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
        }
    }

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

简单的解决方法是在写入数据之前对输入数据调用String.Trim 但是,正如Magnus所说,库是您的朋友。 如果您使用的是好的,那么一开始这可能不是问题,因为编写良好的库可以处理数据中的嵌入式换行符。

您可能会说您可以修剪换行符。 好吧,如果换行符出现在数据中间怎么办? Trim将无法处理。 不会有换行符吗? 逗号呢? 不会有逗号,因为数据只是数字吗? 如果它是小数,并且产生它的计算机在法国或使用逗号作为小数分隔符的许多其他国家,该怎么办? 数据中的报价呢? 图书馆可能已经处理了所有这些情况。 (对于使用输出的任何人,逗号十进制分隔符仍然可能是一个问题,但至少CSV格式正确。)

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM