-2

次のような入力ファイルがあります。

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を使用しています

4

1 に答える 1

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メソッド内では、すべての行を一度にロードするのではなく、ファイルストリームを使用して一度に1行を読み取り、すぐにファイルを閉じて、見つかったらオブジェクトを返します。

于 2012-11-27T17:33:24.510 に答える