Записать 2 строки текстового потока в одну запись доступа - PullRequest
0 голосов
/ 18 февраля 2019

У меня есть следующий код, который читает текстовый файл и записывает в таблицу Access, если найдено значение (N1)

    Do While Not objStream.AtEndOfStream
        strLine = objStream.ReadLine
        ReDim MyArray(0)
        MyArray = Split(strLine, ",")
        If MyArray(0)= "N1" Then
            rs.AddNew
            rs("Field1") = MyArray(0)
            rs("Field2") = MyArray(1)
            rs.Update
        End If
    Loop

Я хотел бы знать, возможно ли это, прежде чем писать вбазы данных, чтобы проверить следующую строку текстового потока и, если найдено значение N2, то также записать это в запись

Так что, если мои данные в текстовом файле образца ...

N1 Cat
N2 Cat
N1 Dog
N1 Fish
N2 Fish
N1 Hamster
N2 Hamster

... мой ожидаемый вывод в Access будет: -

Field 1 Field 2 Field 3 Field 4
N1      Cat     N2      Cat
N1      Dog
N1      Fish    N2      Fish
N1      Hamster N2      Hamster

Я посмотрел объект текстового потока и не могу найти метод для чтения следующей строки.

Ответы [ 2 ]

0 голосов
/ 18 февраля 2019

Вы можете попробовать что-то вроде этого, но не уверены, что это лучший метод.

Sub c()

Dim f As Scripting.FileSystemObject
Dim t As Scripting.TextStream
Dim a() As String
Dim n1() As String
Dim n2() As String
Dim l As Long
Dim rs As Object

Set f = New Scripting.FileSystemObject
Set t = f.OpenTextFile("C:\Workspace\Dummy Data\dummy.txt", ForReading)

a = Split(t.ReadAll, vbCrLf)

t.Close

For l = 0 To UBound(a)

    n1 = Split(a(l), " ")

    If n1(0) = "N1" Then

        rs.addnew
        rs("Field1") = n1(0)
        rs("Field2") = n1(1)

        If l + 1 < UBound(a) Then
            n2 = Split(a(l + 1), " ")
            If n2(0) = "N2" Then
                rs("Field3") = n2(0)
                rs("Field4") = n2(1)
            End If
            l = l + 1
        End If

        rs.Update
        Erase n1
        Erase n2

    End If

Next l

erase a


End Sub
0 голосов
/ 18 февраля 2019

Это должно быть то, что вам нужно:

Буфер используется для хранения предварительно прочитанной строки при необходимости.

'Definition of the buffer
Dim buffer As String
'Now also check if the buffer is filled
Do While (Not objStream.AtEndOfStream) Or (Len(buffer) > 0)
    'If the buffer is filled, use and clear it, instead read next line 
    If Len(buffer) > 0 Then
        strLine = buffer
        buffer = vbNullString
    Else
        strLine = objStream.ReadLine
    End If
    ReDim MyArray(0)
    MyArray = Split(strLine, ",")
    If MyArray(0)= "N1" Then
        rs.AddNew
        rs("Field1") = MyArray(0)
        rs("Field2") = MyArray(1)
        'Read a line to the buffer and check if it starts with 'N2'
        buffer = objStream.ReadLine
        If buffer Like "N2*" Then
            'Use the content of the buffer, store it in Field3 and 4, and clear it
            MyArray = Split(buffer, ",")
            buffer = vbNullString
            rs("Field3") = MyArray(0)
            rs("Field4") = MyArray(1)
        End If
        rs.Update
    End If
Loop
...