Vb.net 使用VB删除.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)

我有一个小函数,可以从存储在数据网格中的字符串创建一个.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)
            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行

例如:

  • 一百,

  • 555333333666777

  • 200,

  • 444555453345778

  • 应该是:

  • 100555333333666777

  • 200444555453345778

  • 有什么想法吗


    编辑:问题已被修改,以显示插入字符串的是换行符,而不是空格。

    代码中不清楚空格的来源,清除空格的最佳方法可能是首先防止它发生

    此外,该空间不会导致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,"")