将空格分隔的文本文件转换为CSV VB.NET

时间:2013-06-10 14:50:09

标签: vb.net text space delimited

我有数百个以空格分隔的文本文件,我想根据RFC 4180将VB.NET转换为CSV文件。这些文件的长度可变,但可以包含upp到200000行并具有不同的列数(最多30个)由多个“空格”分隔,这些“空格”也在1到20之间变化。文件包含我想要删除的一些信息,例如第一列,我还想更改第二列的内容进入有效的Javascript时间戳。这是其中一个文件的第一行的例子(请注意,大多数空格都没有显示)。

#time order boil_q_1 boil_q_2 chil_q1 chil_q2 loccool locheat qdomwat
  0.000000000 1.0000 4.18700E-09 0.0000 4.18700E-11 1.31529E-03 132.39 9799.3 0.0000
 8.0000000000E-02 1.0000 4.18700E-09 0.0000 4.18700E-11 1.31528E-03 132.11 9917.1 0.0000
 0.1600000000 1.0000 4.18700E-09 0.0000 4.18700E-11 1.31527E-03 131.98 10047. 0.0000
 0.2705515735 1.0000 4.18700E-09 0.0000 4.18700E-11 1.31527E-03 131.97 10152. 0.0000
 0.2705515763 1.0000 4.18700E-09 0.0000 4.18700E-11 1.31526E-03 131.97 10152. 0.0000
 0.3345515763 1.0000 4.18700E-09 0.0000 4.18700E-11 1.31525E-03 131.97 10184. 0.0000
 0.3985515763 1.0000 4.18700E-09 0.0000 4.18700E-11 1.31524E-03 131.98 10192. 0.0000
 0.5265515763 1.0000 4.18700E-09 0.0000 4.18700E-11 1.31524E-03 131.98 10178. 0.0000
 0.7825515763 1.0000 4.18700E-09 0.0000 4.18700E-11 1.31523E-03 131.99 10164. 0.0000
 0.7825515791 1.0000 4.18700E-09 0.0000 4.18700E-11 1.31522E-03 131.99 10164. 0.0000

任何吸烟都会很好。

此致 最大

2 个答案:

答案 0 :(得分:0)

假设空格的数量不同,不是因为列是空的......

我只是保持简单并使用我习惯的字符串工具,粗略但对我来说很快:

    Dim s As String = TextBox1.Text
    s = s.Replace(vbNewLine, "|").Replace(vbCr, "").Replace(vbLf, "")
    s = s.Replace("| ", "|") ' trim leading space
    Dim iLen As Integer = -1
    Do
        iLen = s.Length
        s = s.Replace("  ", " ")
    Loop Until iLen = s.Length
    Dim aLines() As String = s.Split("|")
    Dim aLine() As String
    Dim aHeader() As String = aLines(0).Split(" ")
    ' process header
    For i As Long = 1 To aLines.GetUpperBound(0)
        aLine = aLines(i).Split(" ")
        Stop
        ' process line
    Next

TextBox1包含您的样本与迷路?领导 #。如果变化的空间是由空列引起的,那么按摩将更复杂,并且可能在内循环中更好地完成。

上面我只按下整个字符串,然后将线条放入一个数组中,然后在线条上循环。

这是OP中唯一的第一步。

我发现编写CSV是有问题的,特别是因为消费者有时对规范所说的内容有不同的看法。如果可能的话,用最终消费程序进行测试。

答案 1 :(得分:0)

我最终使用以下代码并将信息添加到数据网格

Dim rowvalue As String
Dim streamReader As IO.StreamReader = New IO.StreamReader(FileName)
    While streamReader.Peek() <> -1
    rowvalue = streamReader.ReadLine()
    DataGridView1.Rows.Add(rowvalue.Split(New String() {" "}, StringSplitOptions.RemoveEmptyEntries))
End While

问题是它很慢,我仍然需要删除其中一个coumns并添加所有其他文件。我想以其他方式存储信息会更容易吗?有什么想法吗?