Function PosEx digunakan untuk mencari substring dalam sebuah string dengan titik awal pencarian yang dapat diatur, berbeda dengan function ‘Pos’ yang hanya dapat mencari substring dari sebuah string dari awal string. Titik awal pencarian inilah yang disebut dengan ‘offset’. Sintaks function PosEx adalah sebagai berikut :
PosEx (substringX, stringX, offset):integer;
dengan parameter ‘substringX’ adalah substring yang dicari, parameter ‘stringX’ adalah variabel string yang akan dicari substring tertentu di dalamnya, dan offset adalah indeks titik awal pencarian substring.
Berbicara mengenai ‘offset’, dapat dikatakan bahwa function ‘Pos’ adalah function ‘PosEx’ dengan offset ‘1’ alias titik awal pencarian dimulai dari awal string. Ilustrasinya adalah sebagai berikut : misalkan ada sebuah variabel string S:=’Kuku kaki kakekku kaku kaku’;, dengan memanggil Aindeks:=pos(‘kaku’,memo1.text); maka variabel ‘Aindeks’ akan bernilai ‘19’. Darimana angka ‘19’ ini? Jika masih bingung Anda dapat membacanya di artikel saya yang lalu. Sekarang perhatikan pemanggilan function ‘PosEx’ sebagai berikut untuk mencari substring ‘kaku’ dalam variabel ‘S’
S:=’Kuku kaki kakekku kaku kaku’;
(1) Aindeks := PosEx (‘kaku’,memo1.text,1);
(2) Aindeks := PosEx (‘kaku’,memo1.text,19);
Kira-kira berapakah nilai Aindeks pada pernyataan (1) dan (2)?
Tepat sekali. Aindeks pada pernyataan (1) bernilai 19 (sama dengan pemanggilan function ‘Pos’) dan pada pernyataan (2) bernilai 24. Ini artinya substring ‘kaku’ pada pernyataan (1) adalah substring ‘kaku’ yang pertama yang ditemukan pada string S:=’Kuku kaki kakekku kaku kaku’; (di-bold hitam), dan substring ‘kaku’ pada pernyataan (2) adalah substring ‘kaku’ yang kedua yang ditemukan pada string S:=’Kuku kaki kakekku kaku kaku’; (di-bold hitam).
Jadi kesimpulannya, function ‘Pos’, digunakan untuk mencari substring dari sebuah variabel string dengan titik pencarian dari awal string, sedangkan function ‘PosEs’ fungsinya sama dengan function ‘Pos’ hanya saja titik awal pencarian substring dapat diatur dengan nilai offset. Dengan demikian jika sebuah variabel string memiliki substring yang sama, maka substring yang kedua, ketiga, dst dapat dicari menggunakan function PosEx ini dengan mengatur nilai offset, dengan catatan nilai offset harus lebih besar dari nilai indeks substring yang pertama, yang pertama kali ditemukan. Sebagai contoh, jika kita ingin tahu berapa saja indeks substring ‘kaku’ dalam string S:=’Kuku kaki kakekku kaku kaku’;, maka Anda dapat melakukan kombinasi function ‘Pos’ dan ‘PosEx’ untuk mendapatkan kedua substring tersebut.
[1] Aindeks:=pos(‘kaku’,memo1.text);
[2] edit1.Text:=inttostr(Aindeks);
[3] Aindeks:=PosEx(‘kaku’,memo1.text,Aindeks+1);
[4] Edit2.Text:=inttostr(Aindeks);
Perhatikan pernyataan [3], pencarian offset dilakukan dengan melewatkan (passing) variabel Aindeks sehingga kita tidak perlu menghitung indeks substring ‘kaku’ secara manual.
Berikut adalah contoh programnya. Buka Delphi 7, buat sebuah project baru dan simpan project tesrsebut dengan nama sembarang. Ambil komponen TMemo (1 bh), TEdit (2 bh) dan TButton (1 bh) dari Component Pallete, dan atur peletakannya seperti gambar di bawah.
Double click tombol ‘Button1’ dan isikan source code di bawah
procedure TForm1.Button1Click(Sender: TObject);
var Aindeks:integer;
begin
Aindeks:=pos(‘kaku’,memo1.text);
edit1.Text:=inttostr(Aindeks);
Aindeks:=posex(‘kaku’,memo1.text,Aindeks+1);
Edit2.Text:=inttostr(Aindeks);
end;
Running program dengan menekan tombol F9 dan isikan memo1 dengan string ‘Kuku kaki kakekku kaku kaku’, tekan tombol ‘Button1’ maka akan didapat hasilnya seperti gambar di bawah.
Ohya, sebagai catatan function ‘PosEx’ ini hanya ada di Unit ‘StrUtils’ sehingga Anda harus mendeklarasikan unit ini secara manual di bawah klausa Uses.
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, StrUtils;
Dan satu lagi, unit StrUtils ini hanya terdapat pada Delphi 7 ke atas, jadi tidak bisa digunakan pada Delphi 6 ke bawah. Semoga bermanfaat, pada artikel berikutnya akan membahas penggunaan function Copy dan kombinasinya dengan function Pos dan PosEx untuk memparsing isi SMS.
Artikel berikutnya : https://saptaji.com/2013/12/01/berkenalan-dengan-function-copy-di-delphi/
a Technopreneur – writer – Enthusiastic about learning AI, IoT, Robotics, Raspberry Pi, Arduino, ESP8266, Delphi, Python, Javascript, PHP, etc. Founder of startup Indomaker.com
gan kalau undeclared identifier:’posex’ itu kenapa yah?
tambahkan unit ‘StrUtils’ di bagian ‘uses’