Как проверить наличие условий в строке текстового файла, которая ограничена вкладками в VBA? - PullRequest
0 голосов
/ 04 декабря 2018

В VBA, как я могу прочитать строку в текстовом файле и проверить наличие определенных значений?У меня есть текстовый файл, который выглядит примерно так:

a     b     c     d     e     f     g [this line is not in the code]  
1[tab]2[tab]3[tab]4[tab]5[tab]6[tab]7
8[tab]9[tab]10[tab]11[tab]12[tab]13[tab]14
…

Числа представляют значения, связанные с различными параметрами, которые разделены вкладками.Каждая строка соответствует новому набору данных.Таким образом, в приведенном выше примере 1 и 8 - это один и тот же параметр (в данном случае «а») для двух разных экспериментов.Я хочу, чтобы мой код читал каждую строку и печатал всю строку в новый текстовый документ, если b, c, d и f равны определенным значениям.У меня есть остальная часть кода, если кто-то может дать мне совет по этому поводу.

Private Sub SingleRun_button_Click()

myFile = Application.GetOpenFilename()
Delimiter = vbTab
Dim intDialogResult As Integer, _
    strPath, strLine, arrString() As String, _
    i, j, intCurrColumn, D, B, DischMod, T As Integer, _
    fso, ofile As Object

D = Me.D_CB.Value
B = Me.B_CB.Value
DischMod = Me.DischMod_CB.Value
T = Me.T_CB.Value

Application.FileDialog(msoFileDialogOpen).AllowMultiSelect = False
Call Application.FileDialog(msoFileDialogOpen).Filters.Clear
Call Application.FileDialog(msoFileDialogOpen).Filters.Add("Text Files", "*.txt")
intDialogResult = Application.FileDialog(msoFileDialogOpen).Show
strPath = Application.FileDialog(msoFileDialogOpen).SelectedItems(1)
Set fso = CreateObject("scripting.filesystemobject")
Set ofile = fs.createtextfile(strPath)

Close #1
Open strPath For Input As #1
i = 1
While EOF(1) = False
    Line Input #1, strLine
    arrString = Split(strLine, vbTab)
    intCurrColumn = 1
    For j = LBound(arrString) To UBound(arrString)
    If arrString(j) <> vbTab Then
        'Code as described below
    End If
Next
i = i + 1
Wend
Close #1

Unload Me

End Sub

Ответы [ 2 ]

0 голосов
/ 04 декабря 2018

Не проверено, но вот основной подход:

Sub tester()

    Dim myFile
    myFile = Application.GetOpenFilename()

    If myFile <> False Then
        FilterFile myFile, "C:\Data\filtered.txt", "b", "c", "d", "f"
    End If
End Sub



Sub FilterFile(sPathIn, sPathOut, valB, valC, valD, valF)

    Dim FSO As Object, fIn As Object, fOut As Object, arr As Variant, l

    Set FSO = CreateObject("scripting.filesystemobject")
    Set fIn = FSO.OpenTextFile(sPathIn, 1) '1=ForReading
    Set fOut = FSO.OpenTextFile(sPathOut, 2) '2=ForWriting

    Do While Not fIn.AtEndOfStream

        l = fIn.ReadLine
        arr = Split(l, vbTab)

        'check this line for required criteria
        'arr is zero-based, so arr(0) = ColA, arr(1) = ColB, etc
        If arr(1) = valB And arr(2) = valC And arr(3) = valD And arr(5) = valF Then
            fOut.WriteLine l
        End If
    Loop

    fIn.Close
    fOut.Close
End Sub
0 голосов
/ 04 декабря 2018

Это должно помочь вам.Просто прочитайте ваш входной файл построчно, SPLI его с помощью разделителя (TAB), и вы можете делать с ним все, что захотите.

Private Sub ReadCSV()

    Dim str As String
    Dim arr As Variant

        Open ("your_file_path") For Input As #1
            While Not EOF(1)
                Line Input #1, str
                arr = Split(str, vbTab)

                For a = 1 To UBound(arr)
                    Debug.Print arr(a)
                Next
            Wend
        Close #2

End Sub
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...