当行不是以数字开头时,删除c#中csv文件的行

上传文件后,这个c-sharp代码会将一个Excel文件转换为CSV格式保存,并用|分隔列 。

但是当在Excel文件的“Annotations”列上inputbreak line时 ,csv格式的输出是错误的,因为是为每个换行符添加新的行,请看下图。

在这里输入图像说明

我需要删除这一行,因为行不是以数字(第N列 )开始,或者在文件Excel(列注释 )中replace断行

我试过这个replace代码没有成功:

 csvData += result.Tables[ind].Rows[row_no][i].ToString().Replace("\r\n", "\n") + "|"; 

如何解决这个问题?

预先感谢您的任何帮助。

我的代码如下。

 FileUploadControl.SaveAs(Server.MapPath("/public/") + filename); FileStream stream = File.Open(filePath, FileMode.Open, FileAccess.Read); Excel.IExcelDataReader excelReader = Excel.ExcelReaderFactory.CreateBinaryReader(stream); DataSet result = excelReader.AsDataSet(); excelReader.Close(); result.Tables[0].TableName.ToString(); string csvData = ""; int row_no = 0; int ind = 0; while (row_no < result.Tables[ind].Rows.Count) { for (int i = 0; i < result.Tables[ind].Columns.Count; i++) { csvData += result.Tables[ind].Rows[row_no][i].ToString() + "|"; } row_no++; csvData += "\n"; } output = System.Web.HttpContext.Current.Server.MapPath("/public/target_" + DateTime.Now.AddDays(-1).ToString("dd-MM-yyyy") + ".csv"); StreamWriter csv = new StreamWriter(@output, false); csv.Write(csvData); csv.Close(); csv.Dispose(); 

#编辑02

 while (row_no < result.Tables[ind].Rows.Count) { for (int i = 0; i < result.Tables[ind].Columns.Count; i++) { string text = result.Tables[ind].Rows[row_no][i].ToString(); csvData += text.Replace("\r\n", " ") + "|"; } row_no++; csvData += "\n"; } 

#编辑01

 while (row_no < result.Tables[ind].Rows.Count) { for (int i = 0; i < result.Tables[ind].Columns.Count; i++) { csvData += result.Tables[ind].Rows[row_no][i].ToString() + "|"; string text = result.Tables[ind].Rows[row_no][i].ToString(); csvData += text.Replace("\r\n", " ") + "|"; } row_no++; csvData += "\n"; } 

您必须从您正在阅读的数据中删除换行符。

比如说这个:

 csvData += result.Tables[ind].Rows[row_no][i].ToString() + "|"; 

您可以使用代码:

 string text = result.Tables[ind].Rows[row_no][i].ToString(); csvData += text.Replace("\n", " ") + "|"; 

编辑:

你必须发现什么样的人物造成了一个问题 – 也许这不是\ n或\ r另一个人物。

要找出确切有问题的字符,您可以使用以下技术:

find导致问题的第一行和第一列,假设它是第三行,第5列。然后执行下面的代码(暂时改变你的函数):

  FileUploadControl.SaveAs(Server.MapPath("/public/") + filename); FileStream stream = File.Open(filePath, FileMode.Open, FileAccess.Read); Excel.IExcelDataReader excelReader = Excel.ExcelReaderFactory.CreateBinaryReader(stream); DataSet result = excelReader.AsDataSet(); excelReader.Close(); result.Tables[0].TableName.ToString(); string csvData = ""; int row_no = 0; int ind = 0; // Please notice 3 and 5 is row and column number with problematic string string problematicValue = result.Tables[ind].Rows[3][5].ToString(); foreach (char c in problematicValue) { Debug.Print("Character: " + c + " Code " + (int)c); } output = System.Web.HttpContext.Current.Server.MapPath("/public/target_" + DateTime.Now.AddDays(-1).ToString("dd-MM-yyyy") + ".csv"); StreamWriter csv = new StreamWriter(@output, false); csv.Write(csvData); csv.Close(); csv.Dispose(); 

然后在debugging器输出窗口中,您应该看到这样的输出:

 Character: d Code 100 Character: k Code 107 Character: l Code 108 Character: a Code 97 Character: d Code 100 Character: j Code 106 Character: Code 13 <- here is \r Character: s Code 115 Character: k Code 107 Character: Code 10 <- here in \n Character: a Code 97 Character: d Code 100 Character: a Code 97 

下一步将更改代码来replace有问题的字符。 请注意,您的数据中可能会有不止一种场景(有时只有\ n或\ r,有时甚至是组合)