在VB.NET中更改CSV文件中的列顺序

时间:2016-01-20 17:18:49

标签: vb.net csv

enter image description here我有一个没有标题的软件的CSV文件输出, 我需要根据配置文件

更改列的顺序

初始列Final-Column    1 5    2 3    3 1

任何想法如何解决这个问题?

1 个答案:

答案 0 :(得分:2)

很少继续下去,例如配置文件的工作原理以及数据的样子。

请注意,使用{1, 5, 2, 3, 3, 1}的布局,您不只是重新排序列,这会删除一(4)并复制第1列和第3列。

使用留在from this answer上的一些伪随机数据,将其读入,然后以不同的顺序将其写回。您必须对其进行修改才能考虑配置文件。

示例数据:

  

Ndxn fegy n,105,Imaypfrtzghkh,-1,red,1501
  Mfyze,1301,Kob dlfqcqtkoccxwbd,0,蓝色,704
  Xe fnzeifvpha,328,Mnarhrlselxhcyby hq,-1,red,1903

Dim csvFile As String = "C:\Temp\mysqlbatch.csv"
Dim lines = File.ReadAllLines(csvFile)

Dim outFile As String = "C:\Temp\mysqlbatch2.csv"
Dim data As String()

Dim format As String = "{0}, {4}, {1}, {2}, {2}, {0}"

Using fs As New StreamWriter(outFile, False)
    For Each s As String In lines
        ' not the best way to split a CSV,
        ' no OP data to know if it will work
        data = s.Split(","c)
        ' specifiy the columns to write in
        ' the order desired
        fs.WriteLine(String.Format(format,
                                   data(0),
                                   data(1),
                                   data(2),
                                   data(3),
                                   data(4),
                                   data(5)
                                 )
                    )
    Next
End Using

此方法使用格式字符串和占位符({N})来控制订单。占位符和数组元素都是零基础,因此{1, 5, 2, 3, 3, 1}变为{0, 4, 1, 2, 2, 0}。您的配置文件内容可能只是这些格式字符串的集合。请注意,您可以拥有比String.Format()更多的参数,而不是占位符。

输出:

  

Ndxn fegy n,red,105,Imaypfrtzghkh,Imaypfrtzghkh,Ndxn fegy n
  Mfyze,蓝色,1301,Kob dlfqcqtkoccxwbd,Kob dlfqcqtkoccxwbd,Mfyze
  Xe fnzeifvpha,红色,328,Mnarhrlselxhcyby hq,Mnarhrlselxhcyby hq,Xe fnzeifvpha

在逗号(s.Split(","c))上拆分传入数据在很多情况下都可以使用,但不是全部。如果数据包含逗号(如某些货币“1,23”),则会失败。在这种情况下,分隔符char通常是“;”相反,但由于其他原因(“2016年1月22日”或“花园软管,绿色”),数据可能有公共空间。数据可能必须以不同方式进行拆分。

注意:以前的所有帖子都与vba相关。标题包含VB.NET并标记为,因此这是一个VB.NET答案