Fungsi terbilang cukup umum dipakai dalam pemrograman sehari hari, namun tidak ada salahnya saya tuliskan disini sebagai salah satu referensi untuk temen-temen programmer.
Saya tulis code ini dengan Ms. VFP so, kalo ada yang kebetulan pake aplikasi program lainnya, silahkan dikonversi sendiri. Untuk Fungsi terbilang Inggris mungkin ada yang mau mengkoreksi, masalahnya belum sempat koreksi.
cara pakainya cukup simpel, tinggal panggil fungsi dan masukkan dalam sebuah variable.
Contoh :
cBilang = Terbilang(20003)
cBilang = SAYENGLISH(20003)
hasilnya akan tersimpan dalam variable cBilang, Silahkan Mencoba.
======
FUNCTION TERBILANG
PARAMETERS Nilai as Double
PUBLIC sat,ratus,ribu,juta,miliar,ribuan,ratusan,txt,trilyun
Sat = STR(Nilai,18,2)
Des = IIF(RIGHT(sat,1) = '0',VAL(SUBSTR(Sat,17,1)),VAL(RIGHT(Sat,2)))
Ratus = VAL(SUBSTR(Sat,13,3))
Ribu = VAL(SUBSTR(Sat,10,3))
Juta = VAL(SUBSTR(Sat,7,3))
Miliar = VAL(SUBSTR(Sat,4,3))
Trilyun = VAL(LEFT(Sat,3))
Ribuan = IIF(Ribu = 0," ",IIF(Ribu = 1,"Seribu", BilangDetail(Ribu)+" Ribu"))
Jutaan = IIF(Juta = 0," ",(BilangDetail(Juta)+" Juta"))
Miliaran = IIF(Miliar = 0," ",(BilangDetail(Miliar)+" Miliard"))
DO CASE
CASE Nilai < txt =" BilangDetail(Ratus)" txt =" Ribuan+" txt =" BilangDetail(Juta)+" txt =" BilangDetail(Miliar)+" txt =" BilangDetail(Trilyun)+" txt="txt+">= 10
txt=txt+" Koma "+BilangDetail(Des)
ENDCASE
RETURN(TXT+" Rupiah")
FUNCTION BilangDetail
PARAMETERS Detil
st = STR(Detil,3)
s = VAL(RIGHT(st,1))
p = VAL(SUBSTR(st,2,1))
r = VAL(LEFT(st,1))
bil = "Satu Dua Tiga Empat Lima Enam Tujuh Delapan Sembilan"
IF s = 0
ts = " "
ELSE
ts = ALLTRIM(SUBSTR(bil,s*8-7,8))+" "
ENDIF
DO CASE
CASE p = 0
tp = ts
CASE p = 1
DO CASE
CASE s = 0
tp = " Sepuluh "
CASE s = 1
tp = " Sebelas "
OTHERWISE
tp= TRIM(SUBSTR(bil,s*8-7,8))+" Belas "
ENDCASE
OTHERWISE
tp = TRIM(SUBSTR(bil,p*8-7,8))+" Puluh "+ts
ENDCASE
DO CASE
CASE r = 0
tr = tp
CASE r = 1
tr = "Seratus "+ALLTRIM(tp)
OTHERWISE
tr = TRIM(SUBSTR(bil, r*8-7,8))+" Ratus "+ALLTRIM(tp)
ENDCASE
RETURN(TRIM(tr))
FUNCTION SAYENGLISH
PARAMETERS Nilai as Double
PUBLIC koma,sat,ratus,ribu,juta,miliar,ribuan,ratusan,txt,trilyun
Sat = STR(Nilai,18,2)
Des = VAL(RIGHT(Sat,2))
Ratus = VAL(SUBSTR(Sat,13,3))
Ribu = VAL(SUBSTR(Sat,10,3))
Juta = VAL(SUBSTR(Sat,7,3))
Miliar = VAL(SUBSTR(Sat,4,3))
Trilyun = VAL(LEFT(Sat,3))
Ribuan = IIF(Ribu = 0," ",(SAYENGLISHDETAIL(Ribu)+" Thousand"))
Jutaan = IIF(Juta = 0," ",(SAYENGLISHDETAIL(Juta)+" Million"))
Miliaran = IIF(Miliar = 0," ",(SAYENGLISHDETAIL(Miliar)+" Billion"))
DO CASE
CASE Nilai < txt =" SAYENGLISHDETAIL(Ratus)" txt =" Ribuan+" txt =" SAYENGLISHDETAIL(Juta)+" txt =" SAYENGLISHDETAIL(Miliar)+" txt =" SAYENGLISHDETAIL(Trilyun)+">0
txt=txt+" Point "+SAYENGLISHDETAIL(Des)
ENDIF
RETURN(TXT+" Dollars")
FUNCTION SAYENGLISHDETAIL
PARAMETERS Detil
st = STR(Detil,3)
s = VAL(RIGHT(st,1))
p = VAL(SUBSTR(st,2,1))
r = VAL(LEFT(st,1))
bil = "One Two Three Four Five Six Seven Eight Nine"
bil2 = "One Two Third Four Fif Six Seven Eight Nine"
IF s = 0
ts = " "
ELSE
ts = ALLTRIM(SUBSTR(bil,s*8-7,8))+" "
ENDIF
DO CASE
CASE p = 0
tp = ts
CASE p = 1
DO CASE
CASE s = 0
tp = "Ten "
CASE s = 1
tp = "Eleven "
CASE s = 2
tp = "Twelve "
OTHERWISE
tp= ALLTRIM(SUBSTR(bil2,s*8-7,8))+"teen "
ENDCASE
OTHERWISE
tp = allTRIM(SUBSTR(bil2,p*8-7,8))+"ty "+ts
ENDCASE
DO CASE
CASE r = 0
tr = tp
*!* CASE r = 1
*!* tr = "Seratus "+ALLTRIM(tp)
OTHERWISE
tr = allTRIM(SUBSTR(bil, r*8-7,8))+" Hundred "+ALLTRIM(tp)
ENDCASE
RETURN(TRIM(tr))
=====
Semoga bermanfaat..
Friday, May 04, 2007
Thursday, January 11, 2007
How to Capture PABX Data II
Setelah sekian lama mencoba, ternyata cara pertama tidak ketemu jawabannya.
Aku coba buat cara lain yang penting bisa mengakomodasi kepentingan capture data. inti logikanya seperti ini.
Saya buat cursor dengan field tampung dengan tipe memo. pada saat oncomm terlaksana, tambahkan yang ada di buffer kedalam field memo pada kursor tampung tadi. kemudian dengan sintaks MLINE() lakukan deteksi jumlah line dalam field memo tersebut, untuk ini saya tetapkan angka 5 line untuk melakukan deteksi jumlah baris yang telah tercipta untuk membangkitkan procedure lainnya. Selama proses deteksi ini disable dulu OnComm sementara sampai dengan proses eksekusi prosedur terselesaikan. sintaksnya seperti ini
IF This.commEvent = 2
REPLACE logbilling.logbill WITH logbilling.logbill+Thisform.olecontrol1.Input
IF MEMLINE(logbilling.LogBill)>=5
nJmlLine = MEMLINES(logbilling.logbill)
i = 1
Thisform.olecontrol1.Break = .T.
DO WHILE i < 5
cChar = MLINE(logbilling.LogBill,i)
IF ASC(LEFT(cChar,1)) >= 48
Thisform.proses(cChar)
ENDIF
i = i + 1
ENDDO
cVarLine = ""
IF i < nJmlLine
DO WHILE i <= nJmlLine
cVarLine = cVarLine + MLINE(logbilling.LogBill,i)
i = i + 1
ENDDO
ELSE
REPLACE LogBilling.LogBill WITH cVarLine
ENDIF
Thisform.olecontrol1.Break = .F.
ENDIF
Thisform.Refresh
ENDIF
letakkan potongan program diatas dalam oncomm event pada olecontrol (comm control).
prosedure proses digunakan untuk mengolah data hasil transfer dari PABX. dengan sintak substr() lakukan pemilahan data yang berupa satu baris menjadi data2 yang sesuai semisal, tanggal, durasi, phone line dsb.
Sampai disini seharusnya anda sudah bisa membuat billing system berbasis PABX. bila ada yang kurang jelas silahkan kirim email ke ediwe2000@yahoo.com. atau berikan comment disini.
Subscribe to:
Posts (Atom)