Vb.net 使用VB删除.csv字符串中第一个值之后的换行符
我有一个小函数,可以从存储在数据网格中的字符串创建一个.csv文件Vb.net 使用VB删除.csv字符串中第一个值之后的换行符,vb.net,csv,replace,line-breaks,streamwriter,Vb.net,Csv,Replace,Line Breaks,Streamwriter,我有一个小函数,可以从存储在数据网格中的字符串创建一个.csv文件 Dim rowcount As Integer = DataGridView1.Rows.Count - 1 For m As Integer = 0 To rowcount Dim strrowvalue As String = "" strrowvalue += CStr(DataGridView1.Rows(m).Cells(0).Value)
Dim rowcount As Integer = DataGridView1.Rows.Count - 1
For m As Integer = 0 To rowcount
Dim strrowvalue As String = ""
strrowvalue += CStr(DataGridView1.Rows(m).Cells(0).Value)
For n As Integer = 1 To DataGridView1.Columns.Count - 1
If DataGridView1.CurrentCell.Value Is DBNull.Value Then
strrowvalue += "," + "0"
End If
If DataGridView1.Rows(m).Cells(n).Value Is DBNull.Value Then
strrowvalue += "," + "0"
Else
strrowvalue += "," + CStr(DataGridView1.Rows(m).Cells(n).Value)
End If
Next
If m <> rowcount Then
streamwriter.WriteLine(strrowvalue)
End If
Next
Dim rowcount As Integer=DataGridView1.Rows.Count-1
对于m,整数=0表示行计数
Dim strrowvalue As String=“”
strrowvalue+=CStr(DataGridView1.Rows(m).Cells(0).Value)
对于n作为整数=1到DataGridView1.Columns.Count-1
如果DataGridView1.CurrentCell.Value为DBNull.Value,则
strrowvalue+=“,”+“0”
如果结束
如果DataGridView1.Rows(m).Cells(n).Value为DBNull.Value,则
strrowvalue+=“,”+“0”
其他的
strrowvalue+=“,”+CStr(DataGridView1.行(m).单元格(n).值)
如果结束
下一个
如果我是rowcount那么
streamwriter.WriteLine(strrowvalue)
如果结束
下一个
但是,在第一个值之后将插入一个换行符。这会导致Excel和其他程序将第一个值放在第1行,然后将该行的其余值放在第2行
例如:
编辑:问题已被修改,以显示插入字符串的是换行符,而不是空格。代码中不清楚空格的来源,清除空格的最佳方法可能是首先防止它发生 此外,该空间不会导致Excel添加换行符(我刚刚测试了它以确保)。事实上,Excel默默地吞噬了空间。如果在案例中插入了换行符,则表明该字符不是空白,而是其他字符 除此之外,用于删除空白的代码也能正常工作。您可能忘记将结果分配给变量:
strrowvalue = strrowvalue.Replace(" ", "")
编辑:由于它显然是一个回车字符而不是空格,请使用以下命令:
strrowvalue = strrowvalue.Replace(vbCr, "")
或者,如果是完整的Windows样式换行符:
strrowvalue = strrowvalue.Replace(vbCrLf, "")
如果这两种方法都不管用(奇怪!),请尝试以下方法:
strrowvalue = strrowvalue.Replace(vbLf, "")
在其他新闻中,您应该在此处使用
StringBuilder
,它的性能比大量重复的字符串连接要好得多。根据插入的换行符类型,我会将此行更新为以下内容之一:
strrowvalue += CStr(DataGridView1.Rows(m).Cells(0).Value).Replace(vbCrLf,"")
--或--
--或--
我已经试过你的建议了,但我仍然有空间。记事本++告诉我在第一个值之后有一个CR换行符。。。不确定这是怎么发生的。@Mellonjollie查看更新的答案。换行符更有意义。;-)使用字符串生成器也可以获得相同的结果。换行符直接来自DataGrid,但我不知道为什么它只是第一个值。DataGrid正确显示结果,它链接到的SQL StoredRoc也正确显示结果。@Mellonjollie是的,
StringBuilder
是为了性能,而不是修复此特定错误。但只需使用与StringBuilder的空格+1相同的方法删除换行符,并分析Excel如何处理文本。
strrowvalue += CStr(DataGridView1.Rows(m).Cells(0).Value).Replace(vbCr,"")
strrowvalue += CStr(DataGridView1.Rows(m).Cells(0).Value).Replace(vbLf,"")