Menggabungkan baris dari file teks - Excel VBA

Saya memiliki file teks dalam format seperti itu,

Teks:

-- Begin 
  Line1
  Line2
  Line3
      ^
-- Begin
  Line1
  Line2
  Line3
  Line4
      ^
.
.
.
.

Saya pada dasarnya ingin meletakkan Line1 hingga Line(whatever) di antara baris --Begin hingga ^ dalam sebuah array sehingga setiap elemen dalam array adalah sekumpulan baris Contoh array

Array =  [("Line1"  & vbNewLine & "Line 2") , ("Line1"  & vbNewLine & "Line 2" & vbNewLine & "Line 3") ... ]

Namun pada dasarnya ingin menyimpan setiap elemen dalam array di dalam sel. (Bahkan mungkin tidak perlu menggunakan array) ...

Tidak yakin apakah ini mungkin dilakukan di excel VBA, tapi inilah yang sudah saya coba sejauh ini

    Dim FileNum As Integer
    Dim DataLine As String
    Dim Lines As Variant
    Dim j As Integer


    FileNum = FreeFile()
    Open "C:..." For Input As #FileNum


 While Not EOF(FileNum)
       Line Input #FileNum, DataLine

      If InStr(DataLine, "-- Begin") > 0 Then
        nextLinecounter = 1

      ElseIf InStr(DataLine, "^") > 0 Then
        nextLinecounter = 0
        j = j + 1

      ElseIf nextLinecounter = 1 Then
       Lines(j) = DataLine + .. Somehow concatenate next lines into array

     End If


Wend

Saya bingung bagaimana cara melewati baris berikutnya dan menambahkannya ke entri saat ini, cara apa pun untuk melakukan ini, terima kasih.


person Thatdude1    schedule 22.10.2013    source sumber
comment
@mehow Bagaimana cara menggunakan readAll, dan menetapkan batasan di mana harus memulai dan berhenti membaca semua?   -  person Thatdude1    schedule 22.10.2013


Jawaban (1)


Jadi saya akan melakukannya sedikit berbeda. Menggunakan pendekatan yang lebih terkini untuk membaca file.

Lihat detail lebih lanjut tentang cara membaca file *.txt di VBA - here

Catatan: Anda perlu menambahkan referensi ke Microsoft Scripting Runtime melalui VBE -> Alat -> Referensi

Option Explicit

Sub ReadTxtFile()

    Dim oFSO As New FileSystemObject
    Dim oFS As TextStream

    Dim filePath As String
    filePath = "C:\Users\" & Environ$("username") & "\Desktop\foo.txt"

    If Not fileExist(filePath) Then GoTo FileDoesntExist

    On Error GoTo Err

    ReDim arr(0) As String
    Dim s As String

    Set oFS = oFSO.OpenTextFile(filePath)
    Do While Not oFS.AtEndOfStream
        Dim line As String
        line = oFS.ReadLine
        If InStr(line, "-- Begin") = 0 And InStr(line, "^") = 0 Then
            s = s & line
        End If
        If InStr(line, "^") > 0 Then
            arr(UBound(arr)) = s
            ReDim Preserve arr(UBound(arr) + 1)
            s = vbNullString
        End If
    Loop
    ReDim Preserve arr(UBound(arr) - 1)
    oFS.Close

    Dim k As Long
    For k = LBound(arr) To UBound(arr)
        Debug.Print k, arr(k)
    Next k
    Exit Sub

FileDoesntExist:
    MsgBox "File Doesn't Exist", vbCritical, "File not found!"
    Exit Sub

Err:
    MsgBox "Error while reading the file.", vbCritical, vbNullString
    oFS.Close
    Exit Sub

End Sub


Function fileExist(path As String) As Boolean
    fileExist = IIf(Dir(path) <> vbNullString, True, False)
End Function

foo.txt terlihat seperti ini

-- Begin 
  Line1
  Line2
  Line3
      ^
-- Begin
  Line1
  Line2
  Line3
  Line4
      ^

array Anda terlihat seperti ini

masukkan deskripsi gambar di sini

person Community    schedule 22.10.2013
comment
untuk ini bukankah arr memiliki satu baris untuk setiap elemen .. Apakah ada cara untuk menyimpan banyak baris di setiap elemen? - person Thatdude1; 22.10.2013
comment
Jika saya membacanya tepat setelah setiap begitu banyak elemen terdapat elemen dengan banyak baris... Jadi di file .txt Anda arr(4) = Line1 Line2 Line3 ? - person Thatdude1; 22.10.2013
comment
dan menurut saya ini tidak berhasil .. apakah arr(UBound(arr)) & vbNewLine .. menambahkan semua baris sebelum atau ? - person Thatdude1; 22.10.2013
comment
Saya telah memodifikasi kodenya sehingga menyisipkan setiap blok txt pada indeks terpisah. apa ini yang kau inginkan? - person ; 22.10.2013
comment
@ Thatdude1 apa maksudmu i dont think this works? apa yang tidak berhasil untukmu? - person ; 22.10.2013
comment
Terima kasih banyak atas waktunya, bagaimana saya mendapatkannya juga berhasil, dan ya, itulah yang saya inginkan... Cheers! - person Thatdude1; 22.10.2013
comment
fiuh.. Saya benar-benar mulai khawatir :P, saya senang ini berhasil - person ; 22.10.2013