【发布时间】:2016-01-20 17:18:49
【问题描述】:
【问题讨论】:
-
读入 1-2-3-4-5 然后写出 1 5 2 3 3 1
-
@Plutonix 你是怎么做到的,你能不能给个代码sn-p。
-
你有什么困惑?打开文件,读取文件,解析数据,写出来?到目前为止,这只是一个为我编写代码的问题。一两行数据也很高兴看到。
【问题讨论】:
几乎没有什么可做的,比如配置文件的工作原理和数据的样子。
请注意,使用 {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,所以这是一个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} 看起来合法,但它不会重新排序列 - 请注意占位符是如何控制输出顺序的。您应该提出一个新问题,以便您可以显示配置文件内容以及您必须阅读它并制定顺序的方法。