我要做的是将我的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()
答案 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作为一个字符串读出并做一个替换语句......就像用","
替换,
一样。线路起点和终点的额外替换......有很多如何做到这一点的例子)甚至没有打扰创建数据表然后从头开始编写???
这对你有用吗???