0

我想要做的是将我的 CSV 文件输入到数据表中,然后循环遍历并将其重新保存为 csv,去掉所有值周围的引号,这样我就可以将值与另一个 csv 连接起来。

第一次导出时,它工作正常。如果我碰巧再次运行它,它会添加一个名为“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

4 回答 4

1

这是因为您在循环... & ",")的两行中都添加了逗号 ( )。For

考虑删除最后一个逗号或不在循环的最后一次添加一个逗号。

于 2013-10-23T20:03:13.630 回答
0

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

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

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

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

您需要做的就是在完成组装线后去掉尾随的逗号。

我认为这应该适合你:

currentrow.Length = currentRow.Length-1    ' shorten row by 1 character
entirefile.AppendLine(currentrow.ToString)
于 2013-10-23T20:03:07.667 回答
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 文件输入到程序的下一次运行中。

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

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

            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

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

于 2013-10-23T20:05:34.867 回答
0

","也许我只是遗漏了一些东西,但是为什么不将 csv 作为字符串读取,并执行替换语句...类似于将有很多如何做到这一点的例子),甚至不用费心创建一个数据表然后从它开始写入???

这对你有用吗???

于 2013-10-23T20:34:32.590 回答