OSDN Git Service

ちょっとだけ早い文字列置換関数(TStringList相手だと結構早い)
authorh677 <h677>
Tue, 25 Nov 2003 17:50:53 +0000 (17:50 +0000)
committerh677 <h677>
Tue, 25 Nov 2003 17:50:53 +0000 (17:50 +0000)
MojuUtils.pas [new file with mode: 0644]

diff --git a/MojuUtils.pas b/MojuUtils.pas
new file mode 100644 (file)
index 0000000..e1e5730
--- /dev/null
@@ -0,0 +1,104 @@
+unit MojuUtils;
+//**************************
+//     \8d¡\82Ì\8f\8a\81A\95\8e\9a\97ñ\92u\8a·\8aÖ\90\94 CustomStringReplace\81@\82¾\82¯\81B
+//**************************
+
+interface
+
+uses
+       Classes, SysUtils;
+
+    function CustomStringReplace(S , OldPattern: String;const  NewPattern: string): String; overload;
+    function CustomStringReplace(S , OldPattern: String;const  NewPattern: string; IgnoreCase : Boolean): String; overload;
+    procedure CustomStringReplace(var S : TStringList; OldPattern: String;const  NewPattern: string);overload;
+    procedure CustomStringReplace(var S : TStringList; OldPattern: String;const  NewPattern: string; IgnoreCase : Boolean);overload;
+
+
+implementation
+
+function CustomStringReplace(
+       S ,OldPattern: String;
+    const NewPattern: string
+): String;
+var
+       position : Integer;
+    lenOld : Integer;//OldPattern\82Ì\92·\82³
+begin
+
+    position := 0;
+    lenOld := Length(OldPattern);
+    Result := '';
+    position := AnsiPos( OldPattern, S);
+    while  position  <> 0  do begin
+        Result := Result + Copy(S,1,position -1 ) + NewPattern;
+        Delete(S,1, position + lenOld - 1);
+        position := AnsiPos( OldPattern, S);
+    end;
+    if Length( S ) > 0 then begin
+        Result := Result + S;
+    end;
+
+
+end;
+function CustomStringReplace(
+       S , OldPattern: String;
+    const  NewPattern: string;
+    IgnoreCase : Boolean
+): String;
+var
+       position : Integer;
+    lenOld : Integer;//OldPattern\82Ì\92·\82³
+    buffer : String;
+begin
+    position := 0;
+    lenOld := Length(OldPattern);
+    Result := '';
+    if not IgnoreCase then begin
+        Result := CustomStringReplace( S, OldPattern, NewPattern );
+    end else begin
+        buffer := AnsiLowerCase(S);
+        OldPattern := AnsiLowerCase(OldPattern);
+        position := AnsiPos( OldPattern, buffer);
+        while  position  <> 0  do begin
+            Result := Result + Copy(S,1,position -1 ) + NewPattern;
+            Delete(S,1, position + lenOld - 1);
+            Delete(buffer,1, position + lenOld - 1);
+            position := AnsiPos( OldPattern, buffer);
+        end;
+        if Length( S ) > 0 then begin
+            Result := Result + S;
+        end;
+    end;
+end;
+procedure CustomStringReplace(
+       var S : TStringList;
+    OldPattern: String;
+    const  NewPattern: string;
+    IgnoreCase : Boolean
+);
+var
+    i : Integer;
+begin
+    if not IgnoreCase then begin
+        for i := 0 to S.Count - 1 do begin
+               S.Strings[i] := CustomStringReplace( S.Strings[i], OldPattern, NewPattern );
+        end;
+    end else begin
+        for i := 0 to S.Count - 1 do begin
+               S.Strings[i] := CustomStringReplace( S.Strings[i], OldPattern, NewPattern,IgnoreCase );
+        end;
+    end;
+end;
+procedure CustomStringReplace(
+       var S : TStringList;
+    OldPattern: String;
+    const  NewPattern: string
+);
+var
+    i : Integer;
+begin
+       for i := 0 to S.Count - 1 do begin
+       S.Strings[i] := CustomStringReplace( S.Strings[i], OldPattern, NewPattern );
+    end;
+end;
+end.