《软件自动化测试成功之道》节选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函数,另外,也可以使用使用DelphiScript的Copy函数来读取字符串中的一部分:
// 使用DelphiScript的Copy函数来读取字符串中的一部分
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)查找字符串
查找字符串可以使用.NET的String对象的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