سلام
احوال؟
چند تابع ساده نوشتم برای اینکه تعداد کارکترهای کد کمتر بشه. گفتم شاید به درد کسی خورد:
function TForm1.TrimFirst(S:String;N:Integer):String;begin
If S='' then
Exit;
Result:=Copy(S,N+1,Length(S)-N);
end;
function TForm1.TrimLast(S:String;N:Integer):String;
begin
If S='' then
Exit;
Result:=Copy(S,1,Length(S)-N);
end;
function TForm1.BeforeStr(S,S2:String):String;
begin
If S='' then
Exit;
Result:=Copy(S,1,Pos(S2,S)-1);
end;
function TForm1.AfterStr(S,S2:String):String;
begin
If S='' then
Exit;
Result:=Copy(S,Pos(S2,S)+1,Length(S)-Pos(S2,S));
end;
function TForm1.BetweenStr(S,S2,S3:String):String;
begin
If S='' then
Exit;
Result:=Copy(S,Pos(S2,S)+Length(S2),PosEx(S3,S,Pos (S2,S))-Pos(S2,S)-Length(S2));
end;
function TForm1.LastChar(S:String):String;
begin
If S='' then
Exit;
Result:=S[Length(S)];
end;
procedure TForm1.GetNums(S:String;Var A:Array of Word;Reverse:Boolean=False;ExitChar:Char=#0);
Var
I,N:Word;
Tmp:String;
begin
For I:=A[0] To High(A) Do
A[I]:=0;
S:=S+'.';
N:=0;
For I:=1 to Length(S) Do
Begin
If pos(S[I],'0123456789')>0 then
Begin
If Reverse=True then
Tmp:=S[I]+Tmp
Else
Tmp:=Tmp+S[I];
End
else If Tmp<>'' then
Begin
A[N]:=StrToInt(Tmp);
if S[I]=ExitChar then
Break;
Tmp:='';
Inc(N);
End;
End;
End;
Function TForm1.IntRev(S:String):Integer;
begin
Result:=StrToInt(ReverseString(S));
end;
Function TForm1.Rev(S:String):String;
begin
Result:=ReverseString(S);
end;
Function TForm1.AppDir:String;
begin
Result:=ExtractFileDir(Application.ExeName);
end;
Function TForm1.TopDir(S:String;LC:Boolean=False):String;
begin
If LC=True then
Result:=LowerCAse(ExtractFileDir(S))
Else
Result:=ExtractFileDir(S);
end;
Function TForm1.FN(S:String;LC:Boolean=False):String;
begin
If LC=True then
Result:=LowerCAse(ExtractFileName(S))
Else
Result:=ExtractFileName(S);
end;
Function TForm1.Ext(S:String;LC:Boolean=False):String;
begin
If LC=True then
Result:=LowerCAse(ExtractFileExt(S))
Else
Result:=ExtractFileExt(S);
end;
function TForm1.MatchPos(S,S2:String;N:Word):Integer;
Var
P,M:Integer;
begin
Result:=0;
P:=0;
M:=0;
While True Do
Begin
P:=PosEx(S2,S,P+1);
If P=0 then
Exit
Else
Begin
Inc(M);
If N=M then
Begin
Result:=P;
Exit;
End;
End;
End;
end;
function TForm1.FirstMatchPos(S:String;A:Array of String):Integer;
Var
I,P,P2:Integer;
begin
P:=0;
For I:=0 To High(A) Do
Begin
P2:=Pos(A[I],S);
If (P=0) or (P2<P) then
P:=P2;
End;
Result:=P;
end;
procedure TForm1.FormCreate(Sender: TObject);
Var
A:Array [1..3]Of Word;
begin
GetNums('}12\3-4{65',A,False,'{');
ShowMessage(IntToStr(A[3]));
ShowMessage(LastChar('bagher'));
ShowMessage(IntToStr(MatchPos('Papa','a',2)));
ShowMessage(IntToStr(FirstMatchPos('I am a Good Student!',['Go','!','a'])));
end;
دو نکته:
1. اگر اسم فرم شما TForm1 نیست میتونید با Ctrl+R تغییرش بدید و اگر صلاح دونستید .Tform1 رو حذف کنید.
2.من چون از بیسیک سراغ دلفی اومدم ترجیح میدم جای زیر رشته رو بعد از رشته اول بنویسم. اگر دلتون خواست جای پارامترها رو در MatchPos عوض کنید.