我如何从文件的一部分中提取Xyz值

时间:2012-11-27 17:01:31

标签: vb.net parsing extract

我有一个如下所示的输入文件:

ID= 57010101-1
X= 0.0005
Y= 0.0006
Z= 0.0000
Avg= -0.0058

ID= 57010101-2
X= 0.0005
Y= 0.0005
Z= -0.0001
Avg= -0.0057

ID= 57010101-3
X= 0.0005
Y= 0.0007
Z= -0.0001
Avg= -0.0056
C= -0.0031

我需要从id中提取xyz。 我一直在弄乱这一段时间,但是我不能让它从我给它的特定id中获取它。 有什么建议? 我正在使用vb.net

1 个答案:

答案 0 :(得分:2)

如果你想将整个文件加载到内存中,我建议你做这些事情。首先,创建一个类来存储文件中每个项目的数据,例如:

Public Class MyItem
    Public Id As String
    Public X As Decimal
    Public Y As Decimal
    Public Z As Decimal
    Public Avg As Decimal
    Public C As Decimal
End Class

为简单起见,我只为每个数据创建公共字段,但它们应该是公共属性。接下来,创建一个将文件加载到这些对象列表中的方法。例如,像这样的东西可以工作:

Public Function LoadItems(ByVal filePath As String) As Dictionary(Of String, MyItem)
    Dim items As New Dictionary(Of String, MyItem)()
    Dim item As MyItem = New MyItem()
    For Each line As String In File.ReadAllLines(filePath)
        Dim parts() As String = line.Split(New String() {"= "}, StringSplitOptions.RemoveEmptyEntries)
        If parts.Length = 2 Then
            Select Case parts(0)
                Case "ID"
                    item = New MyItem()
                    item.Id = parts(1)
                    items.Add(item.Id, item)
                Case "X"
                    item.X = Decimal.Parse(parts(1))
                Case "Y"
                    item.Y = Decimal.Parse(parts(1))
                Case "Z"
                    item.Z = Decimal.Parse(parts(1))
                Case "Avg"
                    item.Avg = Decimal.Parse(parts(1))
                Case "C"
                    item.C = Decimal.Parse(parts(1))
            End Select
        End If
    Next
    Return items
End Function

上面的示例使用ID作为每个项目的键返回字典中的项目。这样做可以非常快速,轻松地通过ID访问列表中的对象。例如:

Dim items As Dictionary(String, MyItem) = LoadItems("C:\Test.txt")
Dim item As MyItem = items("57010101-3")
Console.WriteLine("{0}, {1}, {2}", item.X, item.Y, item.Z)

但是,如果你不想将整个文件加载到内存中,你想要做一些非常相似的事情,但是你不想让load方法返回一个项目列表,你希望它只是返回单个项目。在load方法中,不是一次加载所有行,而是要一次使用文件流来读取一行,然后立即关闭文件并在找到后返回该对象。