Arsip: Fungsi StringReplace dengan banyak Pattern


by kifmesoft in Articles more 18 years ago 2918
Bila kita ingin mengganti substring didalam string dengan substring lainnya, maka kita bisa menggunakan fungsi StringReplace yang terdapat pada unit SysUtils.
Intinya... fungsi StringReplace akan mengganti OldPattern dengan NewPattern.
Berikut ini adalah contoh fungsi StringReplace dengan maksud yang sama, tetapi dapat digunakan untuk proses replace dengan pasangan pattern yang lebih dari satu :
Function kifStringReplace(const S: String; const OldPattern,
NewPattern: Array Of String; Flags: TReplaceFlags): String;
Var
i, m, L, R: Integer;
P, SearchStr: PChar;
match: Boolean;
Begin
Result:= '';
m:= High(OldPattern);
If High(NewPattern) < m Then m:= High(NewPattern);
If m < 0 Then Exit;
SearchStr:= PChar(S);
P:= Pointer(Integer(SearchStr) + Length(S));
L:= 1; R:= 0;
While SearchStr < P do
Begin
Inc(R);
match:= False;
For i:= 0 To m Do
Begin
If rfIgnoreCase In Flags Then
match:= AnsiStrLIComp(SearchStr,
PChar(OldPattern[i]), Length(OldPattern[i])) = 0
Else
match:= AnsiStrLComp(SearchStr,
PChar(OldPattern[i]), Length(OldPattern[i])) = 0;
If match Then Break;
End;
If Not match Then
Begin
SearchStr := Pointer(Integer(SearchStr) + 1);
Continue;
End;
Result:= Result + Copy(S, L, R - L) + NewPattern[i];
R:= R + (Length(OldPattern[i]) - 1);
L:= R + 1;
If Not (rfReplaceAll In Flags) Then Break;
SearchStr := Pointer(Integer(SearchStr) + Length(OldPattern[i]));
End;
If L < Length(S) Then
Result:= Result + Copy(S, L, (Length(S) + 1) - L);
End;
Syntax Highlighted with https://pascal-id.org/syntax
Contoh penggunaan fungsi tersebut adalah sebagai berikut :
procedure TForm1.Button1Click(Sender: TObject);
begin
Memo2.Clear;
If Memo1.Text = '' Then Exit;
Memo2.Text:= kifStringReplace(Memo1.Text,
['hacking', 'Hack', 'cracking', 'Crack'],
['hck n!', 'h!**', 'C4C1N9', 'c3c4k'],
[rfReplaceAll, rfIgnoreCase]);
end;
Syntax Highlighted with https://pascal-id.org/syntax




Selamat Mencoba .. :)

Ref: http://kifmesoft.info/?p=17

AI Forward

๐Ÿš€ We're thrilled to partner with Alibaba Cloud for "AI Forward - Alibaba Cloud Global Developer Summit 2025" in Jakarta! Join us and explore the future of AI. Register now: https://int.alibabacloud.com/m/1000400772/
#AlibabaCloud #DeveloperSummit #Jakarta #AIFORWARD

Local Business Directory, Search Engine Submission & SEO Tools FreeWebSubmission.com SonicRun.com