1

テキストファイルに次のようなデータがあります。

Member A
      Diameter      60 in
      Thickness     1  in
      Yield Stress  50 ksi

Brace B
      Diameter      54 in
      Thickness     1  in
      Yield Stress  50 ksi

長いテキストファイル内に「メンバーA」というテキストの文字列が見つかった場合、数値の直径(または厚さ、または降伏応力)を抽出する必要があります。データは常に同じ順序です。

「Trim」/「Mid」を使用して、検索しているテキストと同じ行にあるデータを抽出できます。探しているテキストの「下の行」を参照する方法がわかりません。

私のコード:

Sub jtdtlextract()
    Dim str, str1, strOutPut, strBrcAngle, strComnJt, strChrdDia As String
    Dim FileToOpen, FileConverted, strRun, lngReturn, fs, f, s, ff

    FileToOpen = Application.GetOpenFilename("All Files (*.*), *.*")
    If FileToOpen <> False Then
        MsgBox FileToOpen, 0, "Open File"
    End If

    Set fs = CreateObject("Scripting.FileSystemObject")
    Set f = fs.GetFile(FileToOpen)

    FileConverted = UCase(f.ParentFolder.Path) & "\jt_dtls_extracted.txt"

    Open FileToOpen For Input Access Read Shared As #1
    Open FileConverted For Output Access Write Shared As #2

    Do Until EOF(1)
        Line Input #1, str
        str1 = LTrim(str)
        If Left(str1, 31) = "Detailed Review Report of Joint" Then
             strComnJt = Trim(Mid(str1, 35, 4))
             strOutPut = "Common_Jt" & Space(1) & strComnJt
             Print #2, strOutPut
        End If
                'I have a lot more information to extract from the text file
                'I was hoping to use a method similar to above since it's
                'fairly simple and I have no coding experience, the code
                'above only works when the information needed is on the
                'same line as the information searched for. Was written
                'by someone else.
    Loop
    Close #1
    Close #2

    strRun = "Notepad.exe " & FileConverted
    lngReturn = Shell(strRun)

End Sub
4

2 に答える 2

0
 Do Until EOF(1)
    Line Input #1, str
    str1 = LTrim(str)
    If Left(str1, 31) = "Detailed Review Report of Joint" Then
            strComnJt = Trim(Mid(str1, 35, 4))
            strOutPut = "Common_Jt" & Space(1) & strComnJt
            Print #2, strOutPut

            Line Input #1, strDiscardThisLine
            Line Input #1, str3rdLine
            strOutPut = Trim(Mid(str3rdLine,35,4))
            Print #2, strOutPut

    End If
于 2013-01-03T11:58:02.760 に答える
0

ファイルのどこにいるかを追跡するには、状態管理コードが必要です。

ファイルが大きすぎない場合は、フル ストリーミングは必要なく、配列でフルバッファリングを使用できます。

次に、単純なインデックス付けを使用して、この配列を自然にスキャンできます。

name = lines(i)
diameter = parseDiameter(lines(i+1))
thickness = parseThickness(lines(i+2))
yieldStress = parseYieldStress(lines(i+3))
i = i + 5
于 2012-12-31T23:45:15.177 に答える