📄 strprocess.pas
字号:
end;
function ReplaceBothStr(Str,RepStr,SignStr:string;CaseSensitive:boolean):string;//用RepStr替换最前面和最后面一个SignStr
begin
Result:=ReplaceFirstStr(Str,RepStr,SignStr,CaseSensitive);
Result:=ReplaceLastStr(Result,RepStr,SignStr,CaseSensitive);
end;
function ReplaceAllStr(Str,RepStr,SignStr:string;CaseSensitive:boolean;var RepCount:integer):string;//用RepStr替换所有的SignStr
var
FirstPos:integer;
Len,SignLen:integer;
LeftStr,RightStr:string;
Tmp1,Tmp2:string;
begin
RepCount:=0;
SignLen:=Length(SignStr);
if CaseSensitive then begin
if RepStr=SignStr then EStrProcess(EReplaceError,'',LoopReplace1);
end else begin
Tmp1:=AnsiUpperCase(RepStr);
Tmp2:=AnsiUpperCase(SignStr);
if Tmp1=Tmp2 then EStrProcess(EReplaceError,'',LoopReplace2);
end;
repeat
Len:=Length(Str);
FirstPos:=AnyPos(Str,SignStr,CaseSensitive);
if FirstPos=0 then Continue;
LeftStr:=Copy(Str,1,FirstPos-1);
RightStr:=Copy(Str,FirstPos+SignLen,Len-FirstPos-SignLen+1);
Str:=LeftStr+RepStr+RightStr;
Inc(RepCount);
until (FirstPos=0);
Result:=Str;
end;
//字符串的删除
function TrimLeftChar(Str:string;DelChar:char):string; //删除Str中左边的指定字符
var
Len,i:integer;
Temp:string;
begin
Temp:='';
Len:=Length(Str);
for i:=1 to Len do begin
if Temp='' then begin
if Str[i]<>DelChar then Temp:=Temp+Str[i];
end else Temp :=Temp+Str[i];
end;
Result:=Temp;
end;
function TrimRightChar(Str:string;DelChar:char):string; //删除Str中右边的指定字符
var
ReverseStr:string;
begin
ReverseStr:=Reversed(Str);
ReverseStr:=TrimLeftChar(ReverseStr,DelChar);
Result:=Reversed(ReverseStr);
end;
function TrimBoth(Str:string;DelChar:char):string;//删除Str中左右边的指定字符
var
Str1:string;
begin
Str1:=TrimLeftChar(Str,DelChar);
Str1:=TrimRightChar(Str1,DelChar);
Result:=Str1;
end;
function TrimAll(Str:String;DelChar:char):string;//删除Str中所有的指定字符
var
Str1:string;
i:integer;
begin
Str1:='';
for i:=1 to Length(Str) do begin
if Str[i]<>DelChar then begin
Str1:=Str1+Str[i];
end;
end;
Result:=Str1;
end;
function TrimMiddle(Str:string;DelChar:char):string;//删除中间的指定字符(从左边和右边第一个不是指定字符之间)
var //如果该串全部是由DelChar字符组成,则全部删除 ;DelChar:='*'
LeftPos,RightPos,Len:integer; //eg:Str:='****dd**d***'; result:='dd**d';
LeftStr,RightStr,MiddleStr:string; //eg:Str:='******';Result:='******';
begin //eg:Str:='ddd***';Result:='ddd';
LeftStr:=''; //eg:Str:='****ddd';Result:='ddd';
RightStr:=''; //eg:Str:='ddd';Result:='ddd';
MiddleStr:=''; //eg:Str:='';Result:='';
Len:=Length(Str);
LeftPos:=LeftLastPos(Str,DelChar);
RightPos:=RightBeforePos(Str,DelChar);
LeftStr:=Copy(Str,1,LeftPos);
if RightPos=0 then RightStr:=''
else RightStr:=Copy(Str,RightPos,Len-RightPos+1);
MiddleStr:=GetMiddleString(Str,DelChar);
if MiddleStr='' then Result:=MiddleStr //如果Str为空串-返回空串,Str全部是由指定字符组成,删除所有字符,返回空串
else begin
Result:=LeftStr+TrimAll(MiddleStr,DelChar)+RightStr;
end;
end;
//获取字符串的子串
//获取某一字符的左、右、中间的字符串
function GetLeftStr(Str:string;SpecifiedChar:char):string;//获取字符串某一特定字符(第一个)左边的所有字符(不含该特定字符)
var
PosLeft:integer;
begin
PosLeft:=Pos(SpecifiedChar,Str);
Result:=Copy(Str,1,PosLeft-1);
end;
function GetMiddleStr(Str:string;SpecifiedChar:Char):string;//获取字符串某一特定字符(第一个和最后一个)
var //之间的所有字符(不含该两端的特定字符)e
PosLeft,PosRight:integer; // eg:Str:=C:\llw\delphi MiddleStr:='llw'
begin // eg:Str:=C:\llw\delphi\Program MiddleStr:=llw\delphi
PosLeft:=Pos(SpecifiedChar,Str);
PosRight:=ReversedPos(SpecifiedChar,Str);
//当串中只有两个SpecifiedChar并且紧挨在一起
//当串中没有SpecifiedChar字符时,
Result:=Copy(Str,PosLeft+1,PosRight-PosLeft-1); //当串中只有一个SpecifiedChar字符时,
//返回空串
end;
function GetRightStr(Str:string;SpecifiedChar:char):string;//获取字符串某一特定字符(第一个)右边的所有字符(不含该特定字符)
var
PosRight:integer;
begin
PosRight:=ReversedPos(SpecifiedChar,Str);
if PosRight=0 then Result:=''
else Result:=Copy(Str,PosRight+1,Length(Str)-PosRight)
end;
//字符串获取-获取某一字符串(该字符串由相同的字符组成)中间的字符串
function GetMiddleString(Str:string;SpecifiedChar:Char):string;//获取字符串左右边之间(左边最后一个指定字符到
var //右边第一个指定字符之间不包括两端的指定字符)的串。SpecifiedChar:='*'
LeftPos,RightPos,Len:integer; //eg Str:='***dkd***kdk****' ;MiddleString:='dkd***kdk';
begin //eg Str:='**ddd**';MiddleString:='ddd';
Len:=Length(Str); //eg Str:='ddd**';MiddleString:='ddd';
LeftPos:=LeftLastPos(Str,SpecifiedChar); //eg Str:='**ddd';MiddleString:='ddd';
RightPos:=RightBeforePos(Str,SpecifiedChar); //eg Str:='';middleString:='';
if RightPos=0 then begin //eg Str:='****';middleString:='';
Result:=Copy(Str,LeftPos+1,Len-LeftPos); //eg Str:='dddd';middleString:='dddd';
end else Result:=Copy(Str,LeftPos+1,RightPos-LeftPos-1); //eg Str:='d*d*d';middleString:='d*d*d';
end;
//字符串获取-获取两个字符串相同的部分
function GetLeftSameStr(Str1,Str2:string):string; //获取两字符串左边相同的部分
var
LeftPos:integer;
begin
if Str1=Str2 then begin
Result:=Str1;
Exit;
end;
LeftPos:=FindDiverseLeftPos(Str1,Str2);
Result:=Copy(Str1,1,LeftPos-1);
end;
function GetRightSameStr(Str1,Str2:string):string; //获取两字符串右边相同的部分
var
RightPos,Len1,Len2:integer;
Str:string;
begin
Len1:=Length(Str1);
Len2:=Length(Str2);
if Len1>=Len2 then Str:=Str1
else Str:=Str2;
RightPos:=FindDiverseRightPos(Str1,Str2);
Result:=Copy(Str,RightPos+1,Length(Str)-RightPos);
end;
//字符串获取-获取两个字符串不同的部分
procedure GetRightDiverse(var Str1,Str2:string); //获取两个字符串相同部分的右边不同部分
var
LeftPos:integer;
Len1,Len2:integer;
begin
Str1:=TrimBoth(Str1,' ');
Str2:=TrimBoth(Str2,' ');
Len1:=Length(Str1);
Len2:=Length(Str2);
if Str1=Str2 then begin
Str1:='';
Str2:='';
Exit;
end;
LeftPos:=FindDiverseLeftPos(Str1,Str2);
Str1:=Copy(Str1,LeftPos,Len1-LeftPos+1);
Str2:=Copy(Str2,LeftPos,Len2-LeftPos+1);
end;
procedure GetLeftDiverse(var Str1,Str2:string); //获取两个字符串相同部分左边不同部分
var
RightPos:integer;
Len1,Len2:integer;
begin
Str1:=TrimBoth(Str1,' ');
Str2:=TrimBoth(Str2,' ');
Len1:=Length(Str1);
Len2:=Length(Str2);
RightPos:=FindDiverseRightPos(Str1,Str2);
if Len1>=Len2 then begin
Str1:=Copy(Str1,1,RightPos);
Str2:=Copy(Str2,1,RightPos-(Len1-Len2));
end else begin
Str1:=Copy(Str1,1,RightPos-(Len2-Len1));
Str2:=Copy(Str2,1,RightPos);
end;
end;
//字符串的比较
function FindDiverseLeftPos(Str1,Str2:string):integer;//从左至右查找在字符串中不同的地方。空格忽略
var
Len1,Len2,i,Count:integer;
begin
Result:=0;
Str1:=TrimBoth(Str1,' ');
Str2:=TrimBoth(Str2,' ');
Len1:=Length(Str1);
Len2:=Length(Str2);
if Str1=Str2 then begin
Result:=0;
Exit;
end;
if Len1>=Len2 then Count:=Len2
else Count:=Len1;
for i:=1 to Count do begin
if Str1[i]<>Str2[i] then begin
Result:=i;
Break;
end;
if i=Count then Result:=i+1;
end;
end;
function FindDiverseRightPos(Str1,Str2:string):integer;//从右至左查找在字符串中不同的位置。空格忽略
var
Len1,Len2,i,Count:integer;
begin
Result:=0;
Str1:=TrimBoth(Str1,' ');
Str2:=TrimBoth(Str2,' ');
Len1:=Length(Str1);
Len2:=Length(Str2);
if Str1=Str2 then begin
Result:=0;
Exit;
end;
if Len1>=Len2 then begin
Count:=Len1;
Str2:=RepeatChar(' ',Len1-Len2)+Str2;
end else begin
Count:=Len2;
Str1:=RepeatChar(' ',Len2-Len1)+Str1;
end;
for i:=Count downto 1 do begin
if Str1[i]<>Str2[i] then begin
Result:=i;
Break;
end;
end;
end;
//字符串的插入
function RepeatChar(ReChar:char;Count:integer):string; //将某一字符重复Count次;
var
i:integer;
begin
Result:='';
for i:=1 to Count do begin
Result:=ReChar+Result;
end;
end;
end.
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -