Skip to main content

Membaca File Teks di Access VBA

Membaca data dari sebuah file teks merupakan prosedur yang umum dilakukan saat menjalankan sebuah program. Pada berbagai macam aplikasi, kita sering menemukan jenis file teks yang berisi parameter-parameter tertentu yang dijalankan saat program pertama kali dibuka. File teks itu, biasanya berekstensi .ini, seperti system.ini, properties.ini, dan php.ini berisi configurasi sebuah aplikasi. Kita bisa membaca file teks semacam itu dengan menggunakan FileSystemObject (FSO) yang ada di Access VBA.

Kita mungkin akan menggunakan file teks untuk:
  • Membaca argumen yang ada di dalam baris perintah. Sebagai contoh, sebuah file teks mungkin berisi sejumlah daftar komputer, dengan kode program yang dirancang untuk membaca daftar itu dan kemudian dijalankan ke masing-masing komputer yang ada dalam daftar.
  • Membuat program untuk mencari sebuah file log dengan kondisi tertentu. Sebagai contoh, mencari sebuah file log yang mempunyai tanda "Error".
  • Menambahkan isi dari sebuah file teks ke dalam database. Sebagai contoh, file teks dengan pemisah koma (comma separated text file) biasanya berisi semacam tabel yang masing-masing kolom dipisahkan dengan tanda koma. File teks semacam ini umum digunakan untuk mengimpor data ke dalam sebuah tabel tertentu dalam database.

FSO dapat digunakan untuk membaca isi dari sebuah file teks dengan kondisi berikut ini:
  • FSO hanya bisa membaca file teks ASCII. Kita tidak bisa membaca file dengan format Unicode atau biner, seperti MS Word dan Excel.
  • Cara membaca file teks dengan menggunakan FSO dilakukan satu arah: dari awal sampai dengan akhir dari file teks. Pembacaan dilakukan baris demi baris. Jika ingin kembali ke baris yang diinginkan dan berada di baris sebelumnya, maka kita harus memulai dari awal file sampai ketemu baris yang diinginkan itu.
  • Kita tidak bisa membuka sebuah file teks dengan menggunakan mode baca (ForReading) dan tulis (ForWriting) secara bersamaan. Jika ingin membaca sebuah file, sementara mode yang digunakan adalah menulis (ForWriting), maka kita akan menerima pesan kesalahan "bad file mode".
Adapun metode yang digunakan untuk membaca file teks dengan menggunakan FSO adalah sebagai berikut:
Metode Deskripsi
Read Membaca sejumlah karakter pertama untuk kemudian berhenti.
ReadLine Membaca satu baris dalam sebuah file teks dan kemudian berhenti.

Jika ingin membaca keseluruhan isi teks secara baris per baris, maka kita menggunakan sebuah loop yang berisi metode ini.
ReadAll Membaca keseluruhan isi file teks dan menyimpannya dalam variabel sementara.
Skip Melompatkan sejumlah karakter untuk kemudian membaca karakter yang tidak dilompati dalam sebuah baris teks.
SkipLine Melompatkan sebuah baris untuk kemudian membaca baris berikutnya.
Berikut ini adalah contoh aplikasi untuk membaca sebuah file teks.

Buatlah sebuah file teks dengan nama sistemPrefs.txt, lalu bukalah file itu. Selanjutnya, copy-lah data berikut ini dan paste ke dalam file sistemPrefs.txt, seperti terlihat pada gambar di atas.
Preference Name,prefCaption,Preference Value
displayUserName,Display user name,-1
folderLocation,folder location,
incomeSummary,Income summary account,999
journalAdjust,Adjustment journal account,AJ
journalClosing,Closing journal account,ZZZ
Setelah itu, buatlah sebuah file database Access di lokasi path tempat membuat file teks sistemPrefs.txt di atas. Lalu, bukalah sebuah modul baru dan gunakanlah fungsi berikut ini untuk membaca file teks sistemPrefs.txt di atas.
Function bacaTeksFile()
  Dim strPathFile, strNamaFile As String
  Dim fso As Object
  Dim oFile As Object
  Const ForReading As Integer = 1

  strNamaFile = "sistemPrefs.txt"
  strPathFile = CurrentProject.Path & "\" & strNamaFile
  Set fso = CreateObject("Scripting.FileSystemObject")
  Set oFile = fso.OpenTextFile(strPathFile, ForReading)
  Debug.Print oFile.Read(4)
  Debug.Print oFile.Skip(5)
  Debug.Print oFile.ReadLine
  Debug.Print oFile.SkipLine
  Debug.Print oFile.ReadLine
  Debug.Print oFile.ReadAll
  oFile.Close
  Set fso = Nothing
  Set oFile = Nothing
End Function
Bila fungsi itu dijalankan di Immediate Windows, maka hasilnya adalah sebagai berikut:
?bacaTeksFile
Pref

e Name,prefCaption,Preference Value

folderLocation,folder location,,
incomeSummary,Income summary account,999
journalAdjust,Adjustment journal account,AJ
journalClosing,Closing journal account,ZZZ
Penjelasan fungsi beserta Immediate Window:
  1. Cara membaca file teks sistemPrefs.txt dengan menggunakan FSO dilakukan satu arah: dari awal sampai dengan akhir dari file teks itu. Pembacaan dilakukan baris demi baris.
  2. Aplikasi metode Read pada baris 11 menampilkan karakter "Pref". Karakter "Pref" adalah 4 karakter pertama dari baris pertama yang dibaca dengan menggunakan metode Read.
  3. Selanjutnya, metode Skip pada baris 12 melompatkan 5 karakter setelah karakter "Pref". Karena "Pref" merupakan 4 karakter pertama dari "Preference", maka 5 karakter selanjutnya yang dilompati dalam ("Preference") adalah "erenc".
  4. Metode ReadLine pada baris 13 menampilkan satu baris penuh. Tetapi karena sebagian baris dalam file teks sistemPrefs.txt sudah diproses di baris 11 dan 12 dari fungsi di atas, maka hanya ada sisa baris dalam file teks sistemPrefs.txt yang bisa dibaca, yaitu "e Name,prefCaption,Preference Value".
  5. Metode SkipLine pada baris 14 dari fungsi di atas akan melompatkan baris kedua yang datanya adalah "displayUserName,Display user name,-1 ".
  6. Metode ReadLine pada baris 15 akan menampilkan satu baris penuh data yang ada dala file teks sistemPrefs.txt dan terletak pada baris ke tiga, yaitu "folderLocation,folder location,".
  7. Metode ReadAll pada baris 16 akan menampilkan seluruh isi data dimulai dari baris ke empat (karena baris sebelumnya sudah diproses/ditampilkan melalui metode-metode di baris 11 sampai dengan 15 dari fungsi di atas.

Comments

  1. Bagaimana menggunakan fungsi di atas agar object dari function tersebut menjadi output ke textbox, sehingga hasil dari function tersebut bisa ditampilkan di textbox sebagai acuan untuk function2 lain

    ReplyDelete
    Replies
    1. Diharapkan pencerannya pak

      Delete
    2. Tambahkan saja kode VBA untuk memasukkan nilai ke Text Box pada baris di sekitar Debug.Print. Debug.Print pada fungsi di atas menunjukkan bahwa text file sudah bisa dibaca di Access, jadi bisa digunakan untuk menjalankan fungsi lain dalam lingkungan Access.

      Delete
    3. bagaimana pak caranya, boleh beri contoh baris vba nya sehingga fungsi di atas dapat mengeluarkan nilai string

      Delete
    4. Function bacaTeksFile(strNamaFile As String) As String
      Dim strPathFile As String
      Dim fso As Object
      Dim oFile As Object
      Const ForReading As Integer = 1
      Dim hasil As String

      strPathFile = "C:\Temp\" & strNamaFile

      Set fso = CreateObject("Scripting.FileSystemObject")
      Set oFile = fso.OpenTextFile(strPathFile, ForReading)

      Debug.Print oFile.ReadAll
      bacaTeksFile = CStr(oFile)
      oFile.Close
      Set fso = Nothing
      Set oFile = Nothing
      End Function

      saya coba begini gak bisa pak, Object Doesnt support katanya

      Delete
    5. Di Tools>References sudah di centang librarynya?

      Delete
  2. Librarynya yang mana satu pak

    ReplyDelete
    Replies
    1. Kalau untuk menjalankan fungsinya sudah bisa pak, cuma saya mau pakai fungsi tsb untuk ke tampilkan di textbox

      Delete
    2. MS Office object library, MS scripting runtime dan MS shell control and automation.

      Kamu pakai file contoh dokumen elektronik yg pernah kukirim. Coba, kamu tulis kode di situ saja.

      Delete
    3. Kalau sudah bisa, tinggal fungsinya ditambah... as Strin,g atau Variant

      Delete
    4. Kemaren sudah saya cari juga di Contoh Dokumen kmren pak, cuma belum ketemu.
      setelah di aktifin semua library masih tetap gak bisa dijadikan AS String pak

      Delete
    5. Saya coba bisa kok.... stelah diubah As String, tinggal cari saja, mana nilai yang ingin dijadikan output lalu tuliskan kode ini:
      bacaTeksFile=.......
      Jika ingin ada kriteria tertentu, tuliskan nilainya dengan pemisah (delimiter, misalnya tanda semicolon, comma, minus, dsb....), lalu saat di dalam fungsi di atas, pisahkan dengan fungsi split yang menunjukkan kriteria tertentu... masukkan dalam persamaan bacaTeksFile=.....

      Bisa ya?

      Delete
    6. Kira2 apa yg kurang dari bari function saya di atas pak? Atau reperensinya setelah dihidupkan harus keluar aplikasi dl?

      Delete
    7. Gak harus keluar. Saya hanya mengubah Function bacaTeksFile() menjadi Function bacaTeksFile() As String.

      Lalu, tambahkan baris
      bacaTeksFile=oFile.ReadLine.
      Kalau fungsi bacaTeksFile belum final, gunakan varibel lain. Setelah itu, bacaTeksFile dipersamakan dng variabel lain.

      Coba... bisa paham nggak?

      Delete
    8. Ternyata klu kita sudah capek otak atik baru bisa pak, padahal dari tadi gak di apa-apain, cuma saya tutup baru dijalankan lg baru bisa.
      makasi banyak pak sarannya

      Delete
  3. Pak, misal saya punya data Teks File seperti ini
    595E55502858502F58532C35
    595E55502858502F58532C45
    595E55502858502F58532C55
    595E55502858502F58532C65
    595E55502858502F58532C75

    jadi ada 5 baris
    bagaimana cara menghitung jumlah baris pada file txt tsb, saya coba pakai rumus count tidak bisa pak karena count digunakan untuk record ?

    MOhon petunjuk

    ReplyDelete
  4. Pakai loop for next, setiap kali loop ada n=n+1. Nilai n terakhir adalah jumlah recordnya

    ReplyDelete
    Replies
    1. Saya buat begini pak, mohon ditambahkan pak

      Function bacaTeksFile(strNamaFile As String) As String
      Dim strPathFile As String
      Dim fso As Object
      Dim oFile As Object
      Const ForReading As Integer = 1
      Dim hasil As String
      Dim banyak As Long

      strPathFile = strNamaFile

      Set fso = CreateObject("Scripting.FileSystemObject")
      Set oFile = fso.OpenTextFile(strPathFile, ForReading)

      bacaTeksFile = oFile.ReadAll
      oFile.Close
      Set fso = Nothing
      Set oFile = Nothing
      End Function
      Function ubah()
      Dim text As Long
      Dim lokasi As String
      Dim output As String
      Dim z, a As Long

      lokasi = "E:\2020\LAPORAN\RekonOPD-2020-14102020-091035.asc"

      text = CLng(bacaTeksFile(lokasi))

      Do While Count(text) - 1
      For a = 0 To Count(text) - 1
      output = text(a)
      Next a
      Loop
      Debug.Print a
      End Function

      Delete
    2. Belum pak, pada "text = CLng(bacaTeksFile(lokasi))" macet.
      untuk baca teksnya sudah, tinggal yang ini belum

      Function ubah()
      Dim text As Long
      Dim lokasi As String
      Dim output As String
      Dim z, a As Long

      lokasi = "E:\2020\LAPORAN\RekonOPD-2020-14102020-091035.asc"

      text = CLng(bacaTeksFile(lokasi))

      Do While Count(text) - 1
      For a = 0 To Count(text) - 1
      output = text(a)
      Next a
      Loop
      Debug.Print a
      End Function

      Delete
    3. Itu penisah antar baris menggunakan karakter apa ya? Karakter enter, semicolon, atau apa?

      Kalau kamu tahu karakter pemisah, gunakan saja fungsi split untuk diubah jadi array.

      Setelah jadi array, baru pakai loop untuk menghitung jumlah recordnya.

      Delete
    4. Pemisah pakai vbnewline pak. jadi 1 baris saja datanya, kemudian baris kedua

      Delete
    5. MANTAP PAK, Terima Kasih kembali pak, sudah bisa.
      MANTAP dah si BAPAK Nya

      Delete
    6. Baguslah. Tolong bagikan (share) buku yg kamu beli ke teman2 kamu ya...

      Delete

Post a Comment

Posting Terpopuler

Normalisasi, Denormalisasi, dan Anomali Database

Membuat Fungsi Untuk Menghitung Pajak Penghasilan PPh 21 di MS Access

Format Untuk Field Dengan Tipe Data Number dan Currency di MS Access