我正在尝试使用可变输出格式编写CSV文件。
代码是
fs.WriteLine(String.Format(format,
data(0),
data(1),
data(2),
data(3),
data(4),
data(5)
)
)
这是有效的,
但是,如果我试图传递相同的参数
data(0),
data(1),
data(2),
data(3),
data(4),
data(5)
字符串
str = "data(3) , data(2) , data(1) , data(0)"
fs.WriteLine(String.Format(format, str))
我收到错误
索引(从零开始)必须大于或等于零且小于参数列表的大小。
我做错了什么?
答案 0 :(得分:4)
这是一个文字字符串:
str = "data(3) , data(2) , data(1) , data(0)"
你想要的是像这样的字符串数组:
str = {data(3), data(2), data(1), data(0)}
注意:您必须将str
的声明从String更改为String Array以及:
Dim str As String
到
Dim str As String()
然而
如果您只有一堆变量要写入CSV,您可以更轻松地执行此操作:
Using sr As New StreamWriter(filename)
Dim sb As New StringBuilder
For Each value In data
sb.Append(value & ",")
Next
sr.WriteLine(sb.ToString.TrimEnd(","c))
End Using
答案 1 :(得分:1)
如果您尝试按以下顺序写出这些数据元素:
`data(3), data(2), data(1), data(0)`
然后你的格式参数应该是:
format = "{3}, {2}, {1}, {0}"
' when used:
fs.WriteLine(String.Format(format,
data(0),
data(1),
data(2),
data(3),
data(4),
data(5)
)
)
这将写出作为第四个参数(data(3)
)传递的任何内容作为outout中的第一个项目。输出中的第二项将是第三个参数或data(2)
。
根据您之前提出的问题,您似乎正在尝试更改/管理format
中的占位符和 data()
元素的顺序指定。那不行,你不需要。
由于格式字符串和数据数组中的占位符均为零,{0}
=> data(0)
,{1}
=> data(1)
等等。所以你需要做的就是改变格式字符串中{n}
占位符的顺序。保留data(n)
名称并单独订购。
这dotnetfiddle演示了这个概念。数据项保持相同的顺序,只需根据需要使用不同的格式字符串。