OSDN Git Service

CustomStringReplace関数の新設。StringReplace関数を置き換えた。
authorh677 <h677>
Tue, 25 Nov 2003 15:18:55 +0000 (15:18 +0000)
committerh677 <h677>
Tue, 25 Nov 2003 15:18:55 +0000 (15:18 +0000)
GikoSystem.pas

index eae5667..e14378e 100644 (file)
@@ -91,7 +91,7 @@ type
                FOnlyAHundredRes : Boolean;
 //             FExitWrite: TStringList;
 //             function StrToFloatDef(s: string; Default: Double): Double;
-
+        function CustomStringReplace(S ,OldPattern: String;const NewPattern: string): String;
        public
                { Public \90é\8c¾ }
                FAbon : TAbon;
@@ -868,42 +868,42 @@ begin
                        try
                                if ThreadItem.ParentBoard <> nil then
                                        if ThreadItem.ParentBoard.ParentCategory <> nil then
-                                               Skin.Text := StringReplace( Skin.Text, '<BBSNAME/>', ThreadItem.ParentBoard.ParentCategory.ParenTBBS.Title, [rfReplaceAll] );
-                               Skin.Text := StringReplace( Skin.Text, '<THREADURL/>', ThreadItem.URL, [rfReplaceAll] );
+                       Skin.Text := CustomStringReplace( Skin.Text, '<BBSNAME/>', ThreadItem.ParentBoard.ParentCategory.ParenTBBS.Title);
+                               Skin.Text := CustomStringReplace( Skin.Text, '<THREADURL/>', ThreadItem.URL);
                        except end;
-                       Skin.Text := StringReplace( Skin.Text, '<BOARDNAME/>', ThreadItem.ParentBoard.Title, [rfReplaceAll] );
-                       Skin.Text := StringReplace( Skin.Text, '<BOARDURL/>', ThreadItem.ParentBoard.URL, [rfReplaceAll] );
-                       Skin.Text := StringReplace( Skin.Text, '<THREADNAME/>', ThreadItem.Title, [rfReplaceAll] );
-                       Skin.Text := StringReplace( Skin.Text, '<SKINPATH/>', Setting.CSSFileName, [rfReplaceAll] );
-                       Skin.Text := StringReplace( Skin.Text, '<GETRESCOUNT/>', IntToStr( ThreadItem.NewReceive - 1 ), [rfReplaceAll] );
-                       Skin.Text := StringReplace( Skin.Text, '<NEWRESCOUNT/>', IntToStr( ThreadItem.NewResCount ), [rfReplaceAll] );
-                       Skin.Text := StringReplace( Skin.Text, '<ALLRESCOUNT/>', IntToStr( ThreadItem.AllResCount ), [rfReplaceAll] );
-
-                       Skin.Text := StringReplace( Skin.Text, '<NEWDATE/>',
-                       FormatDateTime('yyyy/mm/dd(ddd) hh:mm', ThreadItem.RoundDate), [rfReplaceAll] );
-                       Skin.Text := StringReplace( Skin.Text, '<SIZEKB/>', IntToStr( Floor( SizeByte / 1024 ) ), [rfReplaceAll] );
-                       Skin.Text := StringReplace( Skin.Text, '<SIZE/>', IntToStr( SizeByte ), [rfReplaceAll] );
+                       Skin.Text := CustomStringReplace( Skin.Text, '<BOARDNAME/>', ThreadItem.ParentBoard.Title);
+                       Skin.Text := CustomStringReplace( Skin.Text, '<BOARDURL/>', ThreadItem.ParentBoard.URL);
+                       Skin.Text := CustomStringReplace( Skin.Text, '<THREADNAME/>', ThreadItem.Title);
+                       Skin.Text := CustomStringReplace( Skin.Text, '<SKINPATH/>', Setting.CSSFileName);
+                       Skin.Text := CustomStringReplace( Skin.Text, '<GETRESCOUNT/>', IntToStr( ThreadItem.NewReceive - 1 ));
+                       Skin.Text := CustomStringReplace( Skin.Text, '<NEWRESCOUNT/>', IntToStr( ThreadItem.NewResCount ));
+                       Skin.Text := CustomStringReplace( Skin.Text, '<ALLRESCOUNT/>', IntToStr( ThreadItem.AllResCount ));
+
+                       Skin.Text := CustomStringReplace( Skin.Text, '<NEWDATE/>',
+                       FormatDateTime('yyyy/mm/dd(ddd) hh:mm', ThreadItem.RoundDate));
+                       Skin.Text := CustomStringReplace( Skin.Text, '<SIZEKB/>', IntToStr( Floor( SizeByte / 1024 ) ));
+                       Skin.Text := CustomStringReplace( Skin.Text, '<SIZE/>', IntToStr( SizeByte ));
 
                        //----- \82Æ\82è\82 \82¦\82¸\82©\82¿\82ã\81`\82µ\82á\8cÝ\8a·\97p\81B\83R\83\81\83\93\83g\83A\83E\83g\82µ\82Ä\82à\82æ\82µ
                        // \82â\82è\82©\82½\82ª\8bê\82µ\82¢\82¯\82Ç\81A\83I\83v\83V\83\87\83\93\83_\83C\83A\83\8d\83O\82Ì\83v\83\8c\83r\83\85\81[\97p try
                        try
                                if ThreadItem.ParentBoard <> nil then
                                        if ThreadItem.ParentBoard.ParentCategory <> nil then
-                                               Skin.Text := StringReplace( Skin.Text, '&BBSNAME', ThreadItem.ParentBoard.ParentCategory.ParenTBBS.Title, [rfReplaceAll] );
-                               Skin.Text := StringReplace( Skin.Text, '&THREADURL', ThreadItem.URL, [rfReplaceAll] );
+                                               Skin.Text := CustomStringReplace( Skin.Text, '&BBSNAME', ThreadItem.ParentBoard.ParentCategory.ParenTBBS.Title);
+                               Skin.Text := CustomStringReplace( Skin.Text, '&THREADURL', ThreadItem.URL);
                        except end;
-                       Skin.Text := StringReplace( Skin.Text, '&BOARDNAME', ThreadItem.ParentBoard.Title, [rfReplaceAll] );
-                       Skin.Text := StringReplace( Skin.Text, '&BOARDURL', ThreadItem.ParentBoard.URL, [rfReplaceAll] );
-                       Skin.Text := StringReplace( Skin.Text, '&THREADNAME', ThreadItem.Title, [rfReplaceAll] );
-                       Skin.Text := StringReplace( Skin.Text, '&SKINPATH', Setting.CSSFileName, [rfReplaceAll] );
-                       Skin.Text := StringReplace( Skin.Text, '&GETRESCOUNT', IntToStr( ThreadItem.NewReceive - 1 ), [rfReplaceAll] );
-                       Skin.Text := StringReplace( Skin.Text, '&NEWRESCOUNT', IntToStr( ThreadItem.NewResCount ), [rfReplaceAll] );
-                       Skin.Text := StringReplace( Skin.Text, '&ALLRESCOUNT', IntToStr( ThreadItem.AllResCount ), [rfReplaceAll] );
-
-                       Skin.Text := StringReplace( Skin.Text, '&NEWDATE',
-                                       FormatDateTime('yyyy/mm/dd(ddd) hh:mm', ThreadItem.RoundDate), [rfReplaceAll] );
-                       Skin.Text := StringReplace( Skin.Text, '&SIZEKB', IntToStr( Floor( SizeByte / 1024 ) ), [rfReplaceAll] );
-                       Skin.Text := StringReplace( Skin.Text, '&SIZE', IntToStr( SizeByte ), [rfReplaceAll] );
+                       Skin.Text := CustomStringReplace( Skin.Text, '&BOARDNAME', ThreadItem.ParentBoard.Title);
+                       Skin.Text := CustomStringReplace( Skin.Text, '&BOARDURL', ThreadItem.ParentBoard.URL);
+                       Skin.Text := CustomStringReplace( Skin.Text, '&THREADNAME', ThreadItem.Title);
+                       Skin.Text := CustomStringReplace( Skin.Text, '&SKINPATH', Setting.CSSFileName);
+                       Skin.Text := CustomStringReplace( Skin.Text, '&GETRESCOUNT', IntToStr( ThreadItem.NewReceive - 1 ));
+                       Skin.Text := CustomStringReplace( Skin.Text, '&NEWRESCOUNT', IntToStr( ThreadItem.NewResCount ));
+                       Skin.Text := CustomStringReplace( Skin.Text, '&ALLRESCOUNT', IntToStr( ThreadItem.AllResCount ));
+
+                       Skin.Text := CustomStringReplace( Skin.Text, '&NEWDATE',
+                                       FormatDateTime('yyyy/mm/dd(ddd) hh:mm', ThreadItem.RoundDate));
+                       Skin.Text := CustomStringReplace( Skin.Text, '&SIZEKB', IntToStr( Floor( SizeByte / 1024 ) ));
+                       Skin.Text := CustomStringReplace( Skin.Text, '&SIZE', IntToStr( SizeByte ));
                        //----- \82±\82±\82Ü\82Å
                end;
                Result := Skin.Text;
@@ -921,26 +921,26 @@ function TGikoSys.SkinedRes(
 begin
 
        try
-               Skin := StringReplace( Skin, '<NUMBER/>',
-                       '<a href="menu:' + No + '" name="' + No + '">' + No + '</a>', [rfReplaceAll] );
-               Skin := StringReplace( Skin, '<PLAINNUMBER/>', No, [rfReplaceAll] );
-               Skin := StringReplace( Skin, '<NAME/>', '<b>' + Res.FName + '</b>', [rfReplaceAll] );
-               Skin := StringReplace( Skin, '<MAILNAME/>',
-                       '<a href="mailo:' + Res.FMailTo + '"><b>' + Res.FName + '</b></a>', [rfReplaceAll] );
-               Skin := StringReplace( Skin, '<MAIL/>', Res.FMailTo, [rfReplaceAll] );
-               Skin := StringReplace( Skin, '<DATE/>', Res.FDateTime, [rfReplaceAll] );
-               Skin := StringReplace( Skin, '<MESSAGE/>', Res.FBody, [rfReplaceAll] );
+               Skin := CustomStringReplace( Skin, '<NUMBER/>',
+                       '<a href="menu:' + No + '" name="' + No + '">' + No + '</a>');
+               Skin := CustomStringReplace( Skin, '<PLAINNUMBER/>', No);
+               Skin := CustomStringReplace( Skin, '<NAME/>', '<b>' + Res.FName + '</b>');
+               Skin := CustomStringReplace( Skin, '<MAILNAME/>',
+                       '<a href="mailo:' + Res.FMailTo + '"><b>' + Res.FName + '</b></a>');
+               Skin := CustomStringReplace( Skin, '<MAIL/>', Res.FMailTo);
+               Skin := CustomStringReplace( Skin, '<DATE/>', Res.FDateTime);
+               Skin := CustomStringReplace( Skin, '<MESSAGE/>', Res.FBody);
 
                //----- \82©\82¿\82ã\81`\82µ\82á\8cÝ\8a·\97p\81B\83R\83\81\83\93\83g\83A\83E\83g\82µ\82Ä\82à\82æ\82µ
-               Skin := StringReplace( Skin, '&NUMBER',
-                       '<a href="menu:' + No + '" name="' + No + '">' + No + '</a>', [rfReplaceAll] );
-               Skin := StringReplace( Skin, '&PLAINNUMBER', No, [rfReplaceAll] );
-               Skin := StringReplace( Skin, '&NAME', '<b>' + Res.FName + '</b>', [rfReplaceAll] );
-               Skin := StringReplace( Skin, '&MAILNAME',
-                       '<a href="mailo:' + Res.FMailTo + '"><b>' + Res.FName + '</b></a>', [rfReplaceAll] );
-               Skin := StringReplace( Skin, '&MAIL', Res.FMailTo, [rfReplaceAll] );
-               Skin := StringReplace( Skin, '&DATE', Res.FDateTime, [rfReplaceAll] );
-               Skin := StringReplace( Skin, '&MESSAGE', Res.FBody, [rfReplaceAll] );
+               Skin := CustomStringReplace( Skin, '&NUMBER',
+                       '<a href="menu:' + No + '" name="' + No + '">' + No + '</a>');
+               Skin := CustomStringReplace( Skin, '&PLAINNUMBER', No);
+               Skin := CustomStringReplace( Skin, '&NAME', '<b>' + Res.FName + '</b>');
+               Skin := CustomStringReplace( Skin, '&MAILNAME',
+                       '<a href="mailo:' + Res.FMailTo + '"><b>' + Res.FName + '</b></a>');
+               Skin := CustomStringReplace( Skin, '&MAIL', Res.FMailTo);
+               Skin := CustomStringReplace( Skin, '&DATE', Res.FDateTime);
+               Skin := CustomStringReplace( Skin, '&MESSAGE', Res.FBody);
                //----- \82±\82±\82Ü\82Å
 
                Result := Skin;
@@ -1095,10 +1095,10 @@ begin
                        FAbon.Execute(ReadList);                //       \82 \82Ú\81`\82ñ\82µ\82Ä
                        FSelectResFilter.Execute(ReadList); //\83\8c\83X\82Ì\83t\83B\83\8b\83^\83\8a\83\93\83O\82ð\82·\82é
                        Res := DivideStrLine(ReadList[0]);
-                       Res.FTitle := StringReplace(Res.FTitle, '\81\97\81M', ',', [rfReplaceAll]);
+                       Res.FTitle := CustomStringReplace(Res.FTitle, '\81\97\81M', ',');
                        sTitle := Res.FTitle;
                end else begin
-                       sTitle := StringReplace(ThreadItem.Title, '\81\97\81M', ',', [rfReplaceAll]);
+                       sTitle := CustomStringReplace(ThreadItem.Title, '\81\97\81M', ',');
                end;
                SaveList := TStringList.Create;
                try
@@ -1134,8 +1134,8 @@ begin
                                try
                                        SkinHeader := LoadSkin( GetSkinHeaderFileName );
                                        if Length( UserOptionalStyle ) > 0 then
-                                               SkinHeader := StringReplace( SkinHeader, '</head>',
-                                                       '<style type="text/css">body {' + UserOptionalStyle + '}</style></head>', [rfReplaceAll] );
+                                               SkinHeader := CustomStringReplace( SkinHeader, '</head>',
+                                                       '<style type="text/css">body {' + UserOptionalStyle + '}</style></head>');
                                        SaveList.Add( SkinHeader );
                                except
                                end;
@@ -1161,9 +1161,9 @@ begin
                                                Res.FBody := ConvRes(Res.FBody, ThreadItem.ParentBoard.BBSID, ChangeFileExt(ThreadItem.FileName, ''), 'bbs', 'key', 'st', 'to', 'nofirst', 'true');
 
                                                if Res.FType = glt2chOld then begin
-                                                       Res.FMailTo := StringReplace(Res.FMailTo, '\81\97\81M', ',', [rfReplaceAll]);
-                                                       Res.FName := StringReplace(Res.FName, '\81\97\81M', ',', [rfReplaceAll]);
-                                                       Res.FBody := StringReplace(Res.FBody, '\81\97\81M', ',', [rfReplaceAll]);
+                                                       Res.FMailTo := CustomStringReplace(Res.FMailTo, '\81\97\81M', ',');
+                                                       Res.FName := CustomStringReplace(Res.FName, '\81\97\81M', ',');
+                                                       Res.FBody := CustomStringReplace(Res.FBody, '\81\97\81M', ',');
                                                end;
 
                                                Res.FBody := AddAnchorTag(Res.FBody);
@@ -1310,9 +1310,9 @@ begin
                                                Res := DivideStrLine(ReadList[i]);
                                                Res.FBody := ConvRes(Res.FBody, ThreadItem.ParentBoard.BBSID, ChangeFileExt(ThreadItem.FileName, ''), 'bbs', 'key', 'st', 'to', 'nofirst', 'true');
                                                if Res.FType = glt2chOld then begin
-                                                       Res.FMailTo := StringReplace(Res.FMailTo, '\81\97\81M', ',', [rfReplaceAll]);
-                                                       Res.FName := StringReplace(Res.FName, '\81\97\81M', ',', [rfReplaceAll]);
-                                                       Res.FBody := StringReplace(Res.FBody, '\81\97\81M', ',', [rfReplaceAll]);
+                                                       Res.FMailTo := CustomStringReplace(Res.FMailTo, '\81\97\81M', ',');
+                                                       Res.FName := CustomStringReplace(Res.FName, '\81\97\81M', ',');
+                                                       Res.FBody := CustomStringReplace(Res.FBody, '\81\97\81M', ',');
                                                end;
                                                Res.FBody := AddAnchorTag(Res.FBody);
                                                if Res.FMailTo = '' then
@@ -1469,7 +1469,7 @@ begin
                        ws := Copy(ws, i + 1, Length(ws) - i - 1);
                        if IsNumeric(ws) then
                                Result.FCount := StrToInt(ws);
-                       Result.FTitle := Trim(StringReplace(Result.FTitle, LeftK + ws + RightK, '', [rfReplaceAll]));
+                       Result.FTitle := Trim(CustomStringReplace(Result.FTitle, LeftK + ws + RightK, ''));
                        break;
                end;
        end;
@@ -1797,7 +1797,7 @@ begin
        end else begin
                S := s;
                for i := Low(ERASECHAR) to      High(ERASECHAR) do      begin
-                       S := StringReplace(S, ERASECHAR[i], '', [rfReplaceAll]);
+                       S := CustomStringReplace(S, ERASECHAR[i], '');
                end;
                if (Length(S) <= ALength) then begin
                        Result := S;
@@ -2898,6 +2898,30 @@ begin
        end;
 end;
 
+// ****************************************
+// StringReplace() \82ª\92x\82¢\82Ì\82Å\8b@\94\\82ð\8dí\82Á\82Ä\8d\82\91¬\89»\82µ\82½\8aÖ\90\94
+// \91å\95\8e\9a\8f¬\95\8e\9a\82Ì\8bæ\95Ê\82ð\82µ\82Ü\82·\81B\8bæ\95Ê\82È\82µ\82Ì\83\82\81[\83h\82Í\82 \82è\82Ü\82¹\82ñ\81B
+// ****************************************
+function TGikoSys.CustomStringReplace(S ,OldPattern: String;const NewPattern: string): String;
+var
+       position : Integer;
+    lenOld : Integer;//OldPattern\82Ì\92·\82³
+begin
+    Result := '';
+    position := 0;
+    lenOld := Length(OldPattern);
+    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;
+
 initialization
        GikoSys := TGikoSys.Create;