.NET流编写器可变格式

时间:2016-01-28 13:48:00

标签: .net arrays vb.net streamwriter string.format

我正在尝试使用可变输出格式编写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))

我收到错误

  

索引(从零开始)必须大于或等于零且小于参数列表的大小。

我做错了什么?

2 个答案:

答案 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演示了这个概念。数据项保持相同的顺序,只需根据需要使用不同的格式字符串。