Artikel berikut akan membahas tentang function Pos, PosEx, dan Copy yang banyak digunakan dalam contoh program di buku ‘Membuat SMS gateway dengan Delphi 7’. Kombinasi ketiga function di atas sangat ampuh untuk melakukan parsing isi SMS . Secara umum fungsi ketiga function di atas adalah melakukan find/search suatu substring dalam sebuah string. Berikut ini adalah penjelasan ketiga function di atas dilengkapi dengan contoh programnya.
1. Function ‘Pos’
Function ini berada dalam unit ‘System’ sehingga Anda tidak perlu menambahkan unit ini secara manual ke dalam klausa ‘Uses’ Delphi. Function ‘Pos’ memiliki sintaks sebagai berikut :
function Pos (Substr:string,S:string):integer;
Penjelasan :
Function ‘Pos’ memiliki dua passing variable yakni ‘Substring’ dan ‘S’ yang masing-masing bertipe string. Namun, function ini secara keseluruhan akan mengembalikan sebuah nilai (return value) yang bertipe integer. Jadi, ketika function ini dipanggil, akan dihasilkan sebuah nilai baru yang bertipe integer yang merupakan nomor indeks ‘Substring’ dalam string ‘S’. Jika substring yang dimaksud tidak ditemukan, maka nilai kembalian akan bernilai ‘0’.
Karena bersifat sebagai function, maka ‘Pos’ ini biasanya membutuhkan sebuah variabel untuk menampung nilai kembalian yang kemudian dapat dimanipulasi untuk proses selanjutnya. ‘Indeks’ sendiri bisa diartikan sebagai nomor urut karakter dimulai dari awal string. Untuk detailnya dapat Anda lihat pada gambar di bawah
Jika ada script Delphi sebagai berikut :
Aindeks:= Pos (‘kaku’,S);
maka Aindeks akan bernilai 19
Catatan : jika substring yang dicari tidak ditemukan, maka nilai kembalian yang dipanggil oleh function ‘Pos’ akan bernilai 0. Contoh dengan string ‘S’ sama dengan contoh di atas, maka
Aindeks:= Pos (‘nenek’,S); —> Aindeks akan bernilai 0
Berikut ini adalah contoh implementasi function ‘Pos’ dalam Delphi :
Ambil komponen TButton, TEdit dan TMemo dari Component Pallete, kemudian atur sedemikian rupa di Form seperti gambar di bawah
Kemudian double click tombol ‘Button1’ dan isikan source code sebagai berikut :
procedure TForm1.Button1Click(Sender: TObject);
var Aindeks:integer;
begin
Aindeks:=pos(‘kaku’,memo1.text);
edit1.Text:=inttostr(Aindeks);
end;
Running program di atas (tekan F9), kemudian isikan kotak memo1 dengan string ‘Kuku kaki kakekku kaku kaku’. Setelah itu tekan tombol ‘Button1’ dan amati perubahan angka di kotak ‘Edit1’.
2. Function ‘PosEx’
3. Function ‘Copy’
a Technopreneur – writer – Enthusiastic about learning AI, IoT, Robotics, Raspberry Pi, Arduino, ESP8266, Delphi, Python, Javascript, PHP, etc. Founder of startup Indomaker.com
om mau tanya cara membedakan variable ini gmna : 08123456789 dan 081234567
setiap saya pos jika saya hanya ingin mengambil 081234567 selalu 08123456789 terbaca.
Makasih om,,,
coba ini ==> indeksX:=pos (‘081234567 ‘,S);
om cara untuk memparsing multi data sensor dari mikro misalnya dari arduino . untuk ditampilkan di Tedit dephi secara terpisah gimna ya ??
misalnya data sensor terbaca :
27 26 28 29
terus mau di tampilkan di
Tedit1 = 27
Tedit2 =26
Tedit3=28
dst
ini menggunakan Tcomport serial port om ??
tinggal dicari string yg dimkasud kmd dicopykan ke tedit yg bersesuaian
Mas , mau tanya ?
Jika saya punya data dari arduino
A1=23
A2=25
A3=26,
Aq kirim serial ke delphi….
Cara ngambil datanya A1,A2 dan A3 nya di delphinya gimana ya?
Terima kasih.
pake komponen comport mas, ntar data masuk di function OnRxChar
referensi di sini : http://saptaji.com/2014/03/25/interfacing-arduino-dengan-delphi/
Klo comport udah mas, maksudnya program buat ambil datanya….
Klo data cuma 1 yang diambil kan gampang mas, tapi klo 3 susah mas….?
Klo 1 kan tinggal
Comport1.readStr(data ,count);
Hasil:=StrToint(data);
Edit1.text:=hasil;
Lha klo 3 data gimana?
pake pos/PosEx spt contoh di artikel mas.
Jadi gini, sisi transmitter kirim datanya gimana, ntar sisi penerimanya ngikutin buat menerjemahkan datanya.
contoh : misalkan arduino ngirim data secara berurutan dg dipisah tanda koma : A1=23,A2=25,A3=28 –> setelah nyampe di comport, data dipecah lagi, caranya pake pos/posex utk mencari tanda koma (,), setelah data A1, A2 dan A3 ketahuan kan?
jadi intinya data yg sampe di comport (variabel ‘data’ pd contoh di atas) di olah dulu jgn langsung di-StrtoInt-kan
Mas boleh dicontohin satu mas, masih bingung yang pake posex dan pos….?
contoh di atas masih kurang jelaskah?
Masih mas….. Belum masuk,
Maksudnya cara n
minta tolong mas bantu cara posxnya
bingung mau nampilkannnya di Tedit mas
kasi satu contoh program aja mas biar siap tugas
di artikel di atas udah contohnya mas
Cara ngolahnya mas….
contohnya seperti ini mas http://saptaji.com/2011/06/11/program-terima-sms-dengan-delphi-secara-live-real-time/
Comport1.readStr(data ,count);
A:=posex(‘,’ , data);
B:=posex(‘,’ , data);
C:=posex(‘,’ , data);
Gini mas?
coba di compile dulu aja mas 🙂 , gimana hasilnya…..apakah sudah sesuai dengan keinginan atau belum….
Belum mas, hasilnya 0 semua….
PosEx itu sintaksnya gini mas –> PosEx (karakterygdicari, variabeltempatkarakter, index/posisiawalpencariandivariabel). Ntar kalo dipanggil, function PosEx akan mengembalikan sebuah nilai yg berisi index/posisi karakter yang dicari. Kalo ngga ketemu karakter yg dicari, akan mengembalikan nilai 0. Coba baca artikel sy di atas. harusnya lebih jelas karena sudah sy lengkapi dg contoh
Gini mas,
Data sensor saya dari arduino
Serial
27A25B25C, kadang berubah
28A29B28C…..
Jadi data yang ingin ditampilkan itu sebelum A yaitu 27, sebelum B 25 dan sebelum C yaitu 28 . jadi bukan letak posisi indexnya mas,…..
Data sensornya juga berubah ubah mas…. 🙂
na itu masnya udah tau petunjuknya, tinggal diubah jadi coding. Yg udah pasti ada kan karakter A, B dan C. Misalkan data dari serial disimpan dalam variabel string ‘datasensor’ dan variabel ini berisi data 27A25B25C, maka tinggal dicari posisi/index karakter A berapa, index B berapa, C berapa (pake function PosEx) di variabel ‘datasensor’. Setelah tau index-nya, salin data (pake function ‘copy’) dari index 0 ke index karakter A –> dapetlah angka ’27’, kemudian copy data index A ditambah 1 s/d index B –> dapetlah angka 25, dst. Kalaupun data berubah, ya ga masalah, kan ngopi datanya udah pasti dari index… Read more »
kak ajie mau tanya:
saya punya kasus yang sama dengan diatas mengenaik akses komunikasi serial multi sensor dengan arduino menggunakan delphi. saya new bie banget kak di delphi. dari kemaren nyoba masukin data sensor itu gak bisa bisa.
saya punya data sensor 2 kak misal 11.5A89.25B. bagaimana caranya kak agar nilai sebelum huruf A dan B itu bisa saya masukan ke edit teks1 dan edit teks2. saya masih belum paham dengan pos dan posex nyoba gagal terus kak.
pos itu utk mencari karakter yg pertama kali ditemui, sedangkan PosEx itu sama seperti ‘pos’ tp ada parameter ‘index’, jd bisa mencari karakter dihitung dr indeks mana aja (bisa mencari karkater setelah karakter yg ditemukan oleh pos).
coba copy paste kode saya dulu mas, jalankan sampai bisa. Kl udah bisa, diedit dikit2 sesuai kebutuhan
mas, saya ada data sensor dari arduino, misal 30T65H, dan sudah bisa saya pisahkn dengan fungsi posex dan copy (data 30 masuk edit1 dan data 65 masuk edit2), dan setiap ada perubahan data dari sensor, pembacaan di edit1 dan edit2 jg berubah. Tapi ada sedikit permasalahan sewaktu arduino dan sensor, saya hubungkn dengan module RF NRF24L01 yg menerima data dari Transmitter NRF24L01. Data yang diterima sama dengan sisi TX, dan data yang akan masuk ke delphi, sewaktu dilihat di serial monitor arduino juga masih sama (30T65H), akan tetapi waktu dibaca dan ditampilkan di delphi, data tsb menjadi kacau dan acak… Read more »