Monday, August 09, 2010

CSV parser for .NET (1)

Comma-separated value file atau yang lebih sering dikenal dengan CSV file merupakan text file yang berisi table untuk suatu database. Biasa nya pemisah kolom berupa karakter koma, tetapi juga dapat menggunakan karakter lain yang disepakati.

File csv dapat dibaca dan dianalisa dengan mudah menggunakan aplikasi spreadsheet, seperti Microsoft Excel. Dan dapat di export secara manual ke ustu database, misalnya: MSSQL server atau MySQL.

File csv biasa nya dipergunakan untuk integrasi database secara batch, dimana file di baca oleh aplikasi (bukan manusia). Pihak penyedia dan pengguna file csv sepakat untuk menentukan jumlah kolom, nama header, dll.

Beberapa ketentuan umum pada file csv:
  • Apabila terdapat koma pada suatu field, ditambahkan petik dua pada awal dan akhir kolom, misalnya:
    Aerje,IT,"Software, web, and more"
  • Apabila terdapat petik dua pada suatu field, ditambahkan petik dua pada awal dan akhir kolom dan tambahkan petik dua pada petik dua yang ada, misalnya: Aerje,IT,"Software ""web"" company"
  • Suatu field mungkin terdiri dari 1 baris, tambahkan petik dua pada awal dan akhir kolom, misalnya:
    Aerje,IT,"Software, web,
    and more"

Pada .NET, programmer bisa menggunakan beberapa cara berikut ini untuk parsing field pada csv file

1. Split()
Fungsi split merupakan cara paling sederhana, tetapi sering kali tidak memenuhi kebutuhan, khusus nya bila terdapat koma dalam suatu field.
Dim str1 as String = "01,Budi,Aerje"
Dim str() As String
str = Split(str1, ",")
If str.Length = 115 Then

2. Regex()
Menggunakan pattern regex berikut ini dapat mem-parse field pada csv file: (?:^|,)(\""(?:[^\""]+|\""\"")*\""|[^,]*), regex ini juga tidak bisa meng-handle koma dalam suatu field.
Dim _regex As Regex = New Regex("(?:^|,)(\""(?:[^\""]+|\""\"")*\""|[^,]*)")
Dim _matches As MatchCollection = _regex.Matches(str1)

For Each _match As Match In _matches
If _match.Success Then
Dim i As Integer
For i = 1 To 4
If _match.Groups(i).Success Then
str.Add(_match.Groups(i).Value)
End If
Next
End If
Next

3. OleDB
Menggunakan OleDB sejauh lebih maju karena dapat menghandle koma dan petik dua didalam suatu field, tetapi apabila suatu field memiliki line break dan terdiri lebih dari 1 baris akan membuat parsing menjadi tidak benar. Kami sudah membuat dll file yang menggunakan OleDB yang dapat di download dari link berikut ini.

4. Lumenworks Framework
Aplikasi ini dapat menghandle csv yang memiliki data dengan line break pada suatu baris. Tetapi file csv harus memiliki header yang fix untuk mengetahui isi suatu kolom. Framework ini dapat di download dari link berikut ini.

Bila mempunyai pertanyaan tentang software, jangan ragu untuk menghubungi info@aerje.com

http://blog.aerje.com

No comments:

Post a Comment

Web Analytics