首页  编辑  

获取字符模

Tags: /超级猛料/Friends.网友专栏/zswang/函数大全/   Date Created:

(*//

标题:获取字符模

说明:用于除掉源代码的注释等

设计:Zswang

日期:2002-01-25

支持:wjhu111@21cn.com

//*)

///////Begin Source

type

 TModalStr = record

   rBegin: string;

   rEnd: string;

   rAppend: string;

   rSingle: Byte;

 end;

const

 cPascalCount = 5;

 cPascalList: array[0 .. Pred(cPascalCount)] of TModalStr =

(

(rBegin: ''''; rEnd: '''';   rAppend: '';     rSingle: 1),

(rBegin: '{$'; rEnd: '}';    rAppend: '';     rSingle: 2),

(rBegin: '{';  rEnd: '}';    rAppend: '';     rSingle: 3),

(rBegin: '(*'; rEnd: '*)';   rAppend: '';     rSingle: 4),

(rBegin: '//'; rEnd: #13#10; rAppend: #13#10; rSingle: 5)

);

const

 cSQLCount = 4;

 cSQLList: array[0 .. Pred(cSQLCount)] of TModalStr =

(

(rBegin: ''''; rEnd: '''';   rAppend: '';     rSingle: 1),

(rBegin: '"';  rEnd: '"';    rAppend: '';     rSingle: 2),

(rBegin: '/*'; rEnd: '*/';   rAppend: '';     rSingle: 3),

(rBegin: '--'; rEnd: #13#10; rAppend: #13#10; rSingle: 4)

);

function GetModalStr(mStr: string; mModalStrList: array of TModalStr;

 mSingles: TIntegerSet): string;

var { 返回获取字符模 }

 vSingle: Integer;

 I, J: Integer;

 T, K: Integer;

 vEnd: string;

 vAppend: string;

begin

 Result := '';

 vSingle := 0;

 T := 0;

 K := 0;

 for I := 1 to Length(mStr) do begin

   if T > 1 then begin

     Dec(T);

     Continue;

   end;

   if vSingle = 0 then begin

     vEnd := '';

     for J := Low(mModalStrList) to High(mModalStrList) do begin

       K := Length(mModalStrList[J].rBegin);

       if Copy(mStr, I, K) = mModalStrList[J].rBegin then begin

         vEnd := mModalStrList[J].rEnd;

         vAppend := mModalStrList[J].rAppend;

         vSingle := mModalStrList[J].rSingle;

         if vSingle in mSingles then

           Result := Result + mModalStrList[J].rBegin;

         T := K;

         K := Length(vEnd);

         Break;

       end;

     end;

     if (vEnd = '') and (vSingle in mSingles) then

       Result := Result + mStr[I];

   end else if Copy(mStr, I, K) = vEnd then begin

     if vSingle in mSingles then

       Result := Result + vEnd

     else Result := Result + vAppend;

     vSingle := 0;

     T := K;

   end else if vSingle in mSingles then

     Result := Result + mStr[I];

 end;

end; { GetModalStr }

///////End Source

///////Begin Demo

procedure TForm1.Button1Click(Sender: TObject);

begin

 Memo1.Text := GetModalStr(Memo1.Text, cPascalList, [0, 1, 2]);

 Memo2.Text := GetModalStr(Memo2.Text, cSQLList, [0, 1, 2]);

end;

///////End Demo