《軟體自動化測試成功之道》節選11 - 常用指令碼函式的封裝

TIB發表於2010-05-19

《軟體自動化測試成功之道》節選11 - 常用指令碼函式的封裝

http://www.china-pub.com/196509

 

 

 

 

專案回顧>>>

2008-5-29

今天發現很多地方需要使用到字串的操作,而DelphiScipt的字串操作函式不大好用,因此有必要把常用的一些字串操作封裝成函式,已備呼叫。

 

1 替換字串

//.............................................................................

// 目的:替換字串

// 輸入引數:

//          Str:待替換的字串

//          StrTobeRep:需要被替換掉的字串

//          StrRep:替換的字串

// 返回結果:替換後的字串

// 注意事項:

// 作者:陳能技

// 日期:2008-5-29

//.............................................................................

Function String_RePlace(Str,StrTobeRep,StrRep);

begin

  Str := dotNET.System_Text.StringBuilder.zctor(Str);

  Str := Str.RePlace_2(StrTobeRep,StrRep).ToString;

  Result := Str;

end;

Procedure Test_String_RePlace;

  Var Str : OleVariant;

begin

  Str := String_RePlace('D:/Code/FileSelctionDialog/FileSelctionDialog/bin/Debug','D:','|桌面|我的電腦|本地磁碟 (D:)');

  Log.Message(String_RePlace(Str,'/','|'));

end;

這裡使用的是.NET類庫中的StringBuilder物件,另外,也可以使用Utilities物件中的StringReplace來替換字串:

Procedure Test_String_RePlace_2;

  Var Str : OleVariant;

begin

  Str := Utilities.StringReplace('D:/Code/FileSelctionDialog/FileSelctionDialog/bin/Debug','D:','|桌面|我的電腦|本地磁碟 (D:)',1);

  Log.Message(Utilities.StringReplace(Str,'/','|',1));

end;

其中StringReplace的第三個引數是一個標誌位,可以使用以下兩個值:

1:是否替換所有。如果沒有使用該值,則僅替換找到的第一個。

2:是否大小寫敏感。使用該值表示大小寫不敏感地匹配,不使用該值則表示大小寫敏感。

2)分割字串

//.............................................................................

// 目的:分割字串

// 輸入引數:

//          Str:待替換的字串

//          Separator:分割符

// 返回結果:分割後的字串儲存在陣列並返回

// 注意事項:

// 作者:陳能技

// 日期:2008-5-29

//.............................................................................

Function String_Split(Str,Separator);

  Var StringArray,Count ,I: OleVariant;

begin

  StringArray := CreateVariantArray(0,0);

  Count := BuiltIn.GetListCount(Str, Separator);

  VarArrayRedim(StringArray,Count);

  For I:=0 to Count - 1 do

  begin

    StringArray[I] := BuiltIn.GetListItem(Str , I , Separator);

  end;

  Result := StringArray;

end; 

Procedure Test_String_Split;

  Var StringArray,I : OleVariant;

begin

  StringArray := String_Split('D:/Code/FileSelctionDialog/FileSelctionDialog/bin/Debug','/');

  For I := 0 to VarArrayHighBound(StringArray,1)-1 do

  begin

    Log.Message(StringArray[I]);

  end;

end;

3)讀取部分字串

//.............................................................................

// 目的:讀取字串中的一部分

// 輸入引數:

//          Str:待讀取的字串

//          StartIndex:開始讀取的Index位置

//          EndIndex:結束讀取的Index位置

// 返回結果:讀取到的部分字串

// 注意事項:

// 作者:陳能技

// 日期:2008-5-29

//.............................................................................

Function String_SubString(Str,StartIndex,EndIndex);

begin

  Str := dotNET.System_Text.StringBuilder.zctor(Str).ToString;

  Str := Str.SubString(StartIndex,EndIndex).ToString;

  Result := Str;   

end;

Procedure Test_String_SubString;

begin

  Log.Message(String_SubString('1234567890',0,2));

end;

這裡使用的是.NET類庫中的StringBuilder物件的SubString函式,另外,也可以使用使用DelphiScriptCopy函式來讀取字串中的一部分:

// 使用DelphiScriptCopy函式來讀取字串中的一部分

Procedure Test_String_SubString_2;

  var Str : OleVariant;

begin

  Str:='1234567890'; 

  Log.Message(Copy(Str,2,5)); 

  Log.Message(Copy(Str,2, 20));

  Log.Message(Copy(Str,-2,3));

  Log.Message(Copy(Str,2,0));

end;

4)查詢字串

查詢字串可以使用.NETString物件的Contains函式,用於確定是否包含指定的字串:

//.............................................................................

// 目的:查詢字串是否包含指定的字串

// 輸入引數:

//          Str:待查詢的字串

//          SubStr:被查詢的字串

// 返回結果:

//          True:包含指定的字串

//          False:不包含指定的字串

// 注意事項:

// 作者:陳能技

// 日期:2008-5-29

//.............................................................................

Function String_Contains(Str,SubStr);

begin

  Str := dotNET.System_Text.StringBuilder.zctor(Str).ToString;

  Result := Str.Contains(SubStr);

end;

Procedure Test_String_Contains;

begin

   Log.Message(String_Contains('01234567890','456'));   

end;

另外,也可以使用DelphiScript提供的Pos函式來判斷是否出現指定的字串,如果包含,則返回第一個出現的位置;如果不包含,則返回False值,如下程式碼所示:

//.............................................................................

// 目的:查詢字串是否包含指定的字串

// 輸入引數:

//          Str:待查詢的字串

//          SubStr:被查詢的字串

// 返回結果:

// 注意事項:

// 作者:陳能技

// 日期:2008-5-29

//.............................................................................

Function String_Contains_2(Str,SubStr);

  Var Index :OleVariant;

begin

  Result := False;

  Index := Pos(SubStr,Str);

  IF Index > 0 then

    Result := Index;

end;

Procedure Test_String_Contains_2;

begin

   Log.Message(String_Contains_2('01234567890','456'));   

end;

5)匹配開頭字串

//.............................................................................

// 目的:判斷字串是否以指定的字串開頭

// 輸入引數:

//          Str:待查詢的字串

//          SubStr:開頭的字串

// 返回結果:

//          True:字串以指定的字串開頭

//          False:字串不以指定的字串開頭

// 注意事項:

// 作者:陳能技

// 日期:2008-5-29

//.............................................................................

Function String_StartsWith(Str,SubStr);

begin

  Str := dotNET.System_Text.StringBuilder.zctor(Str).ToString;

  Result := Str.StartsWith(SubStr);

end;

Procedure Test_String_StartsWith;

begin

   Log.Message(String_StartsWith('01234567890','123'));   

end;

6)匹配結尾字串

//.............................................................................

// 目的:判斷字串是否以指定的字串結尾

// 輸入引數:

//          Str:待查詢的字串

//          SubStr:結尾的字串

// 返回結果:

//          True:字串以指定的字串結尾

//          False:字串不以指定的字串結尾

// 注意事項:

// 作者:陳能技

// 日期:2008-5-29

//.............................................................................

Function String_EndsWith(Str,SubStr);

begin

  Str := dotNET.System_Text.StringBuilder.zctor(Str).ToString;

  SubStr := dotNET.System_Text.StringBuilder.zctor(SubStr).ToString; 

  Result := Str.EndsWith(SubStr);

end;

Procedure Test_String_EndsWith;

begin

   Log.Message(String_EndsWith('01234567890','1230'));   

end;

《軟體自動化測試成功之道》節選11 - 常用指令碼函式的封裝

http://www.china-pub.com/196509

相關文章