我有数百个以空格分隔的文本文件,我想根据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
任何吸烟都会很好。
此致 最大
答案 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并添加所有其他文件。我想以其他方式存储信息会更容易吗?有什么想法吗?