【问题标题】:Changing the order of columns in a CSV file in VB.NET在 VB.NET 中更改 CSV 文件中的列顺序
【发布时间】:2016-01-20 17:18:49
【问题描述】:

我有一个没有标题的软件输出的 CSV 文件, 我需要根据配置文件更改列的顺序

初始列最终列 1 5 2 3 3 1

有什么想法可以解决这个问题吗?

【问题讨论】:

  • 读入 1-2-3-4-5 然后写出 1 5 2 3 3 1
  • @Plutonix 你是怎么做到的,你能不能给个代码sn-p。
  • 你有什么困惑?打开文件,读取文件,解析数据,写出来?到目前为止,这只是一个为我编写代码的问题。一两行数据也很高兴看到。

标签: vb.net csv


【解决方案1】:

几乎没有什么可做的,比如配置文件的工作原理和数据的样子。

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

使用from this answer 留下的一些假随机数据,将其读入,然后以不同的顺序将其写回。您必须修改它以考虑配置文件。

样本数据:

Ndxn fegy n,105,Imaypfrtzghkh,-1,红色,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,红色,105,Imaypfrtzghkh,Imaypfrtzghkh,Ndxn fegy n
Mfyze,蓝色,1301,Kob dlfqcqtkoccxwbd,Kob dlfqcqtkoccxwbd,Mfyze
Xe fnzeifvpha, red, 328, Mnarhrlselxhcyby hq, Mnarhrlselxhcyby hq, Xe fnzeifvpha

在许多情况下,用逗号 (s.Split(","c)) 分割传入数据会起作用,但不是全部。如果 data 包含逗号(如在某些货币中为“1,23”),它将失败。在这种情况下,分隔符通常是“;”相反,但由于其他原因(“2016 年 1 月 22 日”或“花园软管,绿色”),数据可能有共同点。数据可能必须以不同方式拆分。

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

【讨论】:

  • 感谢您的帮助和耐心等待,我才刚刚开始编码!
  • 我写了一个函数来读取文本文件并生成一个字符串code fs.WriteLine(String.Format(format, CReadConfig.ReadConfigsource(ConfigFilepath))) 函数返回这个值data(0),data(1),data(2),data(3)的格式string is : {0},{1},{2},{3} 我收到一个错误:索引(基于零)必须大于或等于零且小于参数列表的大小。跨度>
  • 我不知道配置文件中的确切内容或您如何处理它。您当然不需要在循环中调用该函数。 {0},{1},{2},{3} 看起来合法,但它不会重新排序列 - 请注意占位符是如何控制输出顺序的。您应该提出一个新问题,以便您可以显示配置文件内容以及您必须阅读它并制定顺序的方法。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-09-23
  • 1970-01-01
  • 2016-02-04
  • 2017-06-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多