从 visual studio 导出到 csv c# 时,Streamwriter 随机添加额外的换行符
Streamwriter adding in extra line breaks randomly when exporting from visual studio to csv c#
我一直在尝试在数据记录后将数据 table 导出到 visual studio 中的 csv。
出于某种原因,我在导入 excel 时得到奇怪的结果,而记事本很好。似乎正在添加换行符,但在数据中的随机点。
我已经为此奋斗了一段时间,所以非常感谢您的帮助!
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
}
}
如果您的输入数据包含换行符并且您输出它们,一些应用程序会将它们视为换行符,但有些则不会。记事本没有,所以它看起来像记事本的单行。 Excel 识别换行符并开始新的一行。在写字板而不是记事本中打开 CSV 文件;写字板会识别换行符,而它们在记事本中是不可见的。
简单的解决方法是在写入输入数据之前调用 String.Trim
。然而,正如 Magnus 提到的,图书馆是你的朋友。如果您使用了一个好的库,那么这首先可能不是问题,因为一个编写良好的库会处理数据中的嵌入换行符。
你可能会说你可以 trim 换行。好吧,如果换行符在您的数据中间怎么办? Trim
不会处理的。不会有换行吗?逗号呢?不会有任何逗号,因为数据只是数字?如果它是一个小数,而产生它的计算机在法国,或者许多其他使用逗号作为小数点分隔符的国家呢?数据中的引号呢?图书馆可能已经处理了所有这些情况。 (对于使用输出的人来说,逗号小数点分隔符可能仍然是个问题,但至少 CSV 格式是正确的。)
不过请注意,CSV 并不是一个定义明确的标准。不同的应用程序和库使用不同的策略来处理上述情况,因此如果您的库没有使用与 Excel 相同的格式,它仍然可能无法正确加载。
我一直在尝试在数据记录后将数据 table 导出到 visual studio 中的 csv。
出于某种原因,我在导入 excel 时得到奇怪的结果,而记事本很好。似乎正在添加换行符,但在数据中的随机点。
我已经为此奋斗了一段时间,所以非常感谢您的帮助!
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
}
}
如果您的输入数据包含换行符并且您输出它们,一些应用程序会将它们视为换行符,但有些则不会。记事本没有,所以它看起来像记事本的单行。 Excel 识别换行符并开始新的一行。在写字板而不是记事本中打开 CSV 文件;写字板会识别换行符,而它们在记事本中是不可见的。
简单的解决方法是在写入输入数据之前调用 String.Trim
。然而,正如 Magnus 提到的,图书馆是你的朋友。如果您使用了一个好的库,那么这首先可能不是问题,因为一个编写良好的库会处理数据中的嵌入换行符。
你可能会说你可以 trim 换行。好吧,如果换行符在您的数据中间怎么办? Trim
不会处理的。不会有换行吗?逗号呢?不会有任何逗号,因为数据只是数字?如果它是一个小数,而产生它的计算机在法国,或者许多其他使用逗号作为小数点分隔符的国家呢?数据中的引号呢?图书馆可能已经处理了所有这些情况。 (对于使用输出的人来说,逗号小数点分隔符可能仍然是个问题,但至少 CSV 格式是正确的。)
不过请注意,CSV 并不是一个定义明确的标准。不同的应用程序和库使用不同的策略来处理上述情况,因此如果您的库没有使用与 Excel 相同的格式,它仍然可能无法正确加载。