导出到CSV每次都会给我额外的行

时间:2013-10-23 19:54:42

标签: .net vb.net csv

我要做的是将我的CSV文件输入到数据表中,然后循环并将其重新保存为csv,删除所有值周围的引号,以便我可以使用另一个csv LEFT JOIN值。 / p>

首次导出时,它可以正常工作。如果我碰巧再次运行它,它会添加一个名为“No Name”的新列。如果我再次运行它,它将添加另一个“无名称”选项卡,依此类推。到目前为止,这是我的代码。

            Dim currentrow As New System.Text.StringBuilder
            Dim entirefile As New System.Text.StringBuilder

            Dim i As Integer = 0

            For Each column As DataColumn In dt1.Columns
                currentrow.Append("" & column.ColumnName & ",")
            Next
            entirefile.AppendLine(currentrow.ToString)

            For Each row As DataRow In dt1.Rows
                currentrow = New System.Text.StringBuilder
                i = 0
                For Each column As DataColumn In dt1.Columns
                    currentrow.Append("" & row.Item(i) & ",")
                    i += 1
                Next
                entirefile.AppendLine(currentrow.ToString)
            Next

            Dim sw As New System.IO.StreamWriter("C:\CSV\MlnExp.csv")
            sw.Write(entirefile)
            sw.Dispose()

4 个答案:

答案 0 :(得分:1)

这是因为您要在... & ",")周期的两行中添加逗号(For)。

考虑删除最后一个逗号,或者不在循环的最后一遍中添加一个逗号。

答案 1 :(得分:0)

由于这些行而产生额外的列:

currentrow.Append("" & column.ColumnName & ",")

currentrow.Append("" & row.Item(i) & ",")

您要附加列名称或字段以及尾随逗号。在最后一项之后,您将留下一个您没有删除的尾随逗号,因此系统会在该行的末尾看到一个额外的空白字段。

您需要做的就是在完成组合线后删除尾随逗号。

我认为这应该适合你:

currentrow.Length = currentRow.Length-1    ' shorten row by 1 character
entirefile.AppendLine(currentrow.ToString)

答案 2 :(得分:0)

在此:

        For Each column As DataColumn In dt1.Columns
            currentrow.Append("" & column.ColumnName & ",")
        Next

和此:

            For Each column As DataColumn In dt1.Columns
                currentrow.Append("" & row.Item(i) & ",")
                i += 1
            Next

您在每行末尾附加一个尾随","。我假设您正在将正在生成的相同MlnExp.csv文件提供给下一次运行的程序。

通过添加尾随逗号,您每次都会在行中添加一个新字段,并且像这样重复运行会追加多个列。

我的典型解决方案是在每个后​​续列之前添加逗号。 即。

            dim first as boolean = true
            For Each column As DataColumn In dt1.Columns
                if not first then currentrow.Append(",")
                currentrow.Append("" & row.Item(i))
                first = false
                i += 1
            Next

有点粗糙,但通常可以完成工作

答案 3 :(得分:0)

也许我只是错过了一些东西,但为什么不把csv作为一个字符串读出并做一个替换语句......就像用","替换,一样。线路起点和终点的额外替换......有很多如何做到这一点的例子)甚至没有打扰创建数据表然后从头开始编写???

这对你有用吗???