Mas wawan, terima kasih buat tanggapannya
Yg jd masalah adalah, bukan array-nya atBioData() as dtBioData
Tp isi dari dtBioDatanya yg banyak
Misal
Type dtBioData
Nim as String
Nama as String
Nama Mbahnya Tetangga as String
End Type
Jd isi dtBioDatanya yg banyak banget, yg klo di split satu2 akan cukup bikin pegel dan hal ini sering digunakan dgn type yg berbeda-beda, jd saya skr sdg cari
cara yg lebih simpel.
Selama ini klo buat dbase berbasis teks, tdk perlu pake delimiter dan cara bacanya jg ngga perlu di split dulu. langsung aja pada metode open teks filenya kita bagi sesuai dgn panjang atBioData-nya ... baca secara random mas ... tahu kan maksudnya ...
gmn ya ... ada ide lain ngga?
soalnya program saya jd
sangat tidak efisien nih :( meski sudah jalan dgn baik
-----Original Message-----
From: [email protected] [mailto:[EMAIL PROTECTED] On Behalf Of Purwedi Kurniawan
Sent: 08 Mei 2006 18:29
To: [email protected]
Subject: Re: [Programmer-VB] Re: tipe Data lagi
From: [email protected] [mailto:[EMAIL PROTECTED] On Behalf Of Purwedi Kurniawan
Sent: 08 Mei 2006 18:29
To: [email protected]
Subject: Re: [Programmer-VB] Re: tipe Data lagi
kalau ga
salah, database berbasis text juga pake delimiter (tab atau space) u. memisahkan masing2 data per kolom, dan cariage return line feed (vbCRLF) sebagai pemisah record (baris baru).
biarpun datanya ada puluhan bahkan ribuan, seharusnya caranya mas hammet itu ga ada masalah selama semua proses bisa di sederhanakan dg looping (seperti yg kita lakukan pada waktu membaca data di teks file).
kode berikut ini adalah contoh parsing data teks ke dalam user data type record, mudah2an sesuai dg
keinginannya.
'-----------------------------------------------------
Option Explicit
Private Type dtBioData
NIM As String
Nama As String
Alamat As String
End Type
NIM As String
Nama As String
Alamat As String
End Type
'array dari user data type
Private atBioData() As dtBioData
Private atBioData() As dtBioData
'konstanta jumlah field dalam 1 record
Private Const lFieldCount As Long = 3
Private Const lFieldCount As Long = 3
'contoh data, 6 record, 3 field per record, ingat urutan data harus benar
Private Const m_const_sData As String = "id1;nama1;alamat1;id2;nama2;alamat2;id3;nama3;alamat3;id4;nama4;alamat4;id5;nama5;alamat5;id6;nama6;alamat6"
Private Const m_const_sData As String = "id1;nama1;alamat1;id2;nama2;alamat2;id3;nama3;alamat3;id4;nama4;alamat4;id5;nama5;alamat5;id6;nama6;alamat6"
Sub GetData()
Dim aSplitted As Variant, ix As Long, lmod As Long, i As Long
'simpan semua data ke array
aSplitted = Split(m_const_sData, ";")
'cari jumlah record, dan redim array dari type data kita dg membagi jumlah data pd array dg jumlah field dalam 1 record
ReDim atBioData(CInt(UBound(aSplitted) - 1) / lFieldCount)
'looping u. memasukkan semua data tadi ke dalam array data type kita
For ix = 0 To UBound(aSplitted)
i = Ceiling((ix + 1) / lFieldCount) - 1
lmod = ix Mod lFieldCount
Select Case lmod
Case 0
atBioData(i).NIM = aSplitted(ix)
Case 1
atBioData(i).Nama = aSplitted(ix)
Case 2
atBioData(i).Alamat = aSplitted(ix)
End Select
Next ix
'liat hasilnya di immediate windows
For i = 0 To UBound(atBioData)
Debug.Print "record no: " & i
Debug.Print atBioData(i).NIM
Debug.Print atBioData(i).Nama
Debug.Print atBioData(i).Alamat
Next i
End Sub
Dim aSplitted As Variant, ix As Long, lmod As Long, i As Long
'simpan semua data ke array
aSplitted = Split(m_const_sData, ";")
'cari jumlah record, dan redim array dari type data kita dg membagi jumlah data pd array dg jumlah field dalam 1 record
ReDim atBioData(CInt(UBound(aSplitted) - 1) / lFieldCount)
'looping u. memasukkan semua data tadi ke dalam array data type kita
For ix = 0 To UBound(aSplitted)
i = Ceiling((ix + 1) / lFieldCount) - 1
lmod = ix Mod lFieldCount
Select Case lmod
Case 0
atBioData(i).NIM = aSplitted(ix)
Case 1
atBioData(i).Nama = aSplitted(ix)
Case 2
atBioData(i).Alamat = aSplitted(ix)
End Select
Next ix
'liat hasilnya di immediate windows
For i = 0 To UBound(atBioData)
Debug.Print "record no: " & i
Debug.Print atBioData(i).NIM
Debug.Print atBioData(i).Nama
Debug.Print atBioData(i).Alamat
Next i
End Sub
Function Ceiling(Number As Double) As Long
Ceiling = -Int(-Number)
End Function
Ceiling = -Int(-Number)
End Function
'-----------------------------------------------
kode select ... case diatas silahkan dibuat lebih flexible lagi kalau bisa, disesuaikan dg konstanta jumlah field dalam user data type nya, kode lainnya kalau ada yg mau memperbaiki, dipersilahkan dg senang hati.
best regards
[wwn]
On 5/9/06, su_betmen nusaputra <[EMAIL PROTECTED] > wrote:
mas live devil,
terima kasih buat tanggapannya
cmn mslhnya, isi type datanya bisa puluhan
jd, mnrt saya msh cukup ribet jk saya hrs mengisi data
BioData.NIM = ...
BioData.Nama = ....
... dst ... sampai puluhan item
sdgkan, isi dari variabel datalengkap sudah sesuai dgn urutan BioData tsb
saya berpikir, sama seperti kita membuat database
berbasis teks,
isi tiap baris kan bisa langsung masuk ke dalam BioData itu
nah, kira2 ada ngga para VB-ers yg tahu trik supaya data bisa langsung masuk ke BioData itu.
bedanya, yg satu bacanya dr teks file yg satu dari variabel
trims
-----------------------------------
coba data NIM dan Nama dipisah dengan delimiter tertentu...
misalnya dengan tanda ^
jadi datalengkap nantinya bukan "123Budi" lagi, melainkan "123^Budi"
dengan demikian berapapun panjang NIM atau nama, bisa di parse menjadi data masing-masing (dalam hal ini menjadi NIM dan Nama)
misalnya dengan tanda ^
jadi datalengkap nantinya bukan "123Budi" lagi, melainkan "123^Budi"
dengan demikian berapapun panjang NIM atau nama, bisa di parse menjadi data masing-masing (dalam hal ini menjadi NIM dan Nama)
posisiDelimiter = instr(1, DataLengkap, "^", vbTextCompare) 'ambil posisi delimiter ^
untuk mengambil data NIM :
BioData.NIM = mid(DataLengkap,1, posDelimiter -1) 'ambil dari char pertama sampai posisi delimiter - 1
untuk mengambil data Nama :
BioData.Nama = mid(DataLengkap,posDelimiter+1,len(DataLengkap)-posDelimiter) 'ambil data dari posisi delimiter + 1 sampai dengan panjang chars datalengkap - posisi delimiter
dengan demikian jika panjang NIM lebih dari 3 chars atau nama leih dari 4 chars tetap bisa di parsing dengan tepat...
semoga bisa membantu...
On 5/8/06, su_betmen nusaputra <[EMAIL PROTECTED] > wrote:
dear all,
berhubung pertanyaan saya kmrn blm ada yg nanggepin
dan berhubung ini penting bgt buat proyek saya,
sekali lg saya mau bertanya, smoga ada yg berkenan memberi tanggapan ya
saya punya type data sbb :
Type sBioData
NIM As String * 3
Nama As String * 4
End Type
Public BioData as sBioData
dilain sisi, saya punya variabel sbb :
Dim DataLengkap As String
DataLengkap = "123Budi"
nah, bagaimana ya trik-nya supaya
BioData = DataLengkap
tanpa perlu memecah DataLengkap menjadi NIM dan Nama terlebih dahulu
(krn datanya agak panjang)
sementara ini cara pake
BioData.NIM = mid(DataLengkap,1,3)
BioData.Nama = mid(DataLengkap,4,4)
cmn cara diatas tidak fleksible banget jk jenis datanya banyak dan panjang
pengennya sih bisa BioData=DataLengkap, krn urutan DataLengkapnya sudah pas dgn BioData .. kira2 ada cara ngga ya?
trs, gmn caranya supaya tahu panjang dr BioData, juga isi dari BioData dan jenis2 variabelnya
trims
How low will we go? Check out Yahoo! Messengers low PC-to-Phone call rates.
Wahana Programmer Groups Links
<*> Untuk mengunjungi sponsor milis ini, klik link berikut:
http://wahanaprogrammer.net
<*> Untuk menghubungi owner milis ini, kirim email ke:
[EMAIL PROTECTED]
<*> Konsultasi pemrogramman bisa chat disini:
Yahoo! Messenger: wahanaprogrammer
SPONSORED LINKS
| Programmer | Indonesia | Basic programming language |
| Computer programming languages | Programming languages | Java programming language |
YAHOO! GROUPS LINKS
- Visit your group "Programmer-VB" on the web.
- To unsubscribe from this group, send an email to:
[EMAIL PROTECTED]
- Your use of Yahoo! Groups is subject to the Yahoo! Terms of Service.
