|
@@ -1,11 +1,9 @@
|
|
|
-{$mode objfpc}
|
|
|
-{$h+}
|
|
|
{
|
|
|
- This file is part of the Free Pascal run time library.
|
|
|
- Copyright (c) 1999-2000 by the Free Pascal development team
|
|
|
-
|
|
|
Delphi/Kylix compatibility unit: String handling routines.
|
|
|
|
|
|
+ This file is part of the Free Pascal run time library.
|
|
|
+ Copyright (c) 1999-2005 by the Free Pascal development team
|
|
|
+
|
|
|
See the file COPYING.FPC, included in this distribution,
|
|
|
for details about the copyright.
|
|
|
|
|
@@ -14,6 +12,9 @@
|
|
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
|
|
|
|
|
|
**********************************************************************}
|
|
|
+{$mode objfpc}
|
|
|
+{$h+}
|
|
|
+{$inline on}
|
|
|
unit strutils;
|
|
|
|
|
|
interface
|
|
@@ -26,22 +27,22 @@ uses
|
|
|
---------------------------------------------------------------------}
|
|
|
|
|
|
Function AnsiResemblesText(const AText, AOther: string): Boolean;
|
|
|
-Function AnsiContainsText(const AText, ASubText: string): Boolean;
|
|
|
-Function AnsiStartsText(const ASubText, AText: string): Boolean;
|
|
|
-Function AnsiEndsText(const ASubText, AText: string): Boolean;
|
|
|
-Function AnsiReplaceText(const AText, AFromText, AToText: string): string;
|
|
|
-Function AnsiMatchText(const AText: string; const AValues: array of string): Boolean;
|
|
|
+Function AnsiContainsText(const AText, ASubText: string): Boolean;inline;
|
|
|
+Function AnsiStartsText(const ASubText, AText: string): Boolean;inline;
|
|
|
+Function AnsiEndsText(const ASubText, AText: string): Boolean;inline;
|
|
|
+Function AnsiReplaceText(const AText, AFromText, AToText: string): string;inline;
|
|
|
+Function AnsiMatchText(const AText: string; const AValues: array of string): Boolean;inline;
|
|
|
Function AnsiIndexText(const AText: string; const AValues: array of string): Integer;
|
|
|
|
|
|
{ ---------------------------------------------------------------------
|
|
|
Case sensitive search/replace
|
|
|
---------------------------------------------------------------------}
|
|
|
|
|
|
-Function AnsiContainsStr(const AText, ASubText: string): Boolean;
|
|
|
-Function AnsiStartsStr(const ASubText, AText: string): Boolean;
|
|
|
-Function AnsiEndsStr(const ASubText, AText: string): Boolean;
|
|
|
-Function AnsiReplaceStr(const AText, AFromText, AToText: string): string;
|
|
|
-Function AnsiMatchStr(const AText: string; const AValues: array of string): Boolean;
|
|
|
+Function AnsiContainsStr(const AText, ASubText: string): Boolean;inline;
|
|
|
+Function AnsiStartsStr(const ASubText, AText: string): Boolean;inline;
|
|
|
+Function AnsiEndsStr(const ASubText, AText: string): Boolean;inline;
|
|
|
+Function AnsiReplaceStr(const AText, AFromText, AToText: string): string;inline;
|
|
|
+Function AnsiMatchStr(const AText: string; const AValues: array of string): Boolean;inline;
|
|
|
Function AnsiIndexStr(const AText: string; const AValues: array of string): Integer;
|
|
|
|
|
|
{ ---------------------------------------------------------------------
|
|
@@ -50,28 +51,28 @@ Function AnsiIndexStr(const AText: string; const AValues: array of string): Inte
|
|
|
|
|
|
Function DupeString(const AText: string; ACount: Integer): string;
|
|
|
Function ReverseString(const AText: string): string;
|
|
|
-Function AnsiReverseString(const AText: AnsiString): AnsiString;
|
|
|
+Function AnsiReverseString(const AText: AnsiString): AnsiString;inline;
|
|
|
Function StuffString(const AText: string; AStart, ALength: Cardinal; const ASubText: string): string;
|
|
|
Function RandomFrom(const AValues: array of string): string; overload;
|
|
|
-Function IfThen(AValue: Boolean; const ATrue: string; AFalse: string): string;
|
|
|
-Function IfThen(AValue: Boolean; const ATrue: string): string; // ; AFalse: string = ''
|
|
|
+Function IfThen(AValue: Boolean; const ATrue: string; AFalse: string): string;inline;
|
|
|
+Function IfThen(AValue: Boolean; const ATrue: string): string;inline; // ; AFalse: string = ''
|
|
|
|
|
|
{ ---------------------------------------------------------------------
|
|
|
VB emulations.
|
|
|
---------------------------------------------------------------------}
|
|
|
|
|
|
-Function LeftStr(const AText: AnsiString; const ACount: Integer): AnsiString;
|
|
|
+Function LeftStr(const AText: AnsiString; const ACount: Integer): AnsiString;inline;
|
|
|
Function RightStr(const AText: AnsiString; const ACount: Integer): AnsiString;
|
|
|
-Function MidStr(const AText: AnsiString; const AStart, ACount: Integer): AnsiString;
|
|
|
-Function RightBStr(const AText: AnsiString; const AByteCount: Integer): AnsiString;
|
|
|
-Function MidBStr(const AText: AnsiString; const AByteStart, AByteCount: Integer): AnsiString;
|
|
|
-Function AnsiLeftStr(const AText: AnsiString; const ACount: Integer): AnsiString;
|
|
|
-Function AnsiRightStr(const AText: AnsiString; const ACount: Integer): AnsiString;
|
|
|
-Function AnsiMidStr(const AText: AnsiString; const AStart, ACount: Integer): AnsiString;
|
|
|
-Function LeftBStr(const AText: AnsiString; const AByteCount: Integer): AnsiString;
|
|
|
-Function LeftStr(const AText: WideString; const ACount: Integer): WideString;
|
|
|
+Function MidStr(const AText: AnsiString; const AStart, ACount: Integer): AnsiString;inline;
|
|
|
+Function RightBStr(const AText: AnsiString; const AByteCount: Integer): AnsiString;inline;
|
|
|
+Function MidBStr(const AText: AnsiString; const AByteStart, AByteCount: Integer): AnsiString;inline;
|
|
|
+Function AnsiLeftStr(const AText: AnsiString; const ACount: Integer): AnsiString;inline;
|
|
|
+Function AnsiRightStr(const AText: AnsiString; const ACount: Integer): AnsiString;inline;
|
|
|
+Function AnsiMidStr(const AText: AnsiString; const AStart, ACount: Integer): AnsiString;inline;
|
|
|
+Function LeftBStr(const AText: AnsiString; const AByteCount: Integer): AnsiString;inline;
|
|
|
+Function LeftStr(const AText: WideString; const ACount: Integer): WideString;inline;
|
|
|
Function RightStr(const AText: WideString; const ACount: Integer): WideString;
|
|
|
-Function MidStr(const AText: WideString; const AStart, ACount: Integer): WideString;
|
|
|
+Function MidStr(const AText: WideString; const AStart, ACount: Integer): WideString;inline;
|
|
|
|
|
|
{ ---------------------------------------------------------------------
|
|
|
Extended search and replace
|
|
@@ -87,9 +88,9 @@ type
|
|
|
TStringSeachOption = TStringSearchOption;
|
|
|
|
|
|
Function SearchBuf(Buf: PChar; BufLen: Integer; SelStart, SelLength: Integer; SearchString: String; Options: TStringSearchOptions): PChar;
|
|
|
-Function SearchBuf(Buf: PChar; BufLen: Integer; SelStart, SelLength: Integer; SearchString: String): PChar; // ; Options: TStringSearchOptions = [soDown]
|
|
|
+Function SearchBuf(Buf: PChar; BufLen: Integer; SelStart, SelLength: Integer; SearchString: String): PChar;inline; // ; Options: TStringSearchOptions = [soDown]
|
|
|
Function PosEx(const SubStr, S: string; Offset: Cardinal): Integer;
|
|
|
-Function PosEx(const SubStr, S: string): Integer; // Offset: Cardinal = 1
|
|
|
+Function PosEx(const SubStr, S: string): Integer;inline; // Offset: Cardinal = 1
|
|
|
Function PosEx(c:char; const S: string; Offset: Cardinal): Integer;
|
|
|
|
|
|
{ ---------------------------------------------------------------------
|
|
@@ -100,20 +101,20 @@ type
|
|
|
TSoundexLength = 1..MaxInt;
|
|
|
|
|
|
Function Soundex(const AText: string; ALength: TSoundexLength): string;
|
|
|
-Function Soundex(const AText: string): string; // ; ALength: TSoundexLength = 4
|
|
|
+Function Soundex(const AText: string): string;inline; // ; ALength: TSoundexLength = 4
|
|
|
|
|
|
type
|
|
|
TSoundexIntLength = 1..8;
|
|
|
|
|
|
Function SoundexInt(const AText: string; ALength: TSoundexIntLength): Integer;
|
|
|
-Function SoundexInt(const AText: string): Integer; //; ALength: TSoundexIntLength = 4
|
|
|
+Function SoundexInt(const AText: string): Integer;inline; //; ALength: TSoundexIntLength = 4
|
|
|
Function DecodeSoundexInt(AValue: Integer): string;
|
|
|
Function SoundexWord(const AText: string): Word;
|
|
|
Function DecodeSoundexWord(AValue: Word): string;
|
|
|
-Function SoundexSimilar(const AText, AOther: string; ALength: TSoundexLength): Boolean;
|
|
|
-Function SoundexSimilar(const AText, AOther: string): Boolean; //; ALength: TSoundexLength = 4
|
|
|
-Function SoundexCompare(const AText, AOther: string; ALength: TSoundexLength): Integer;
|
|
|
-Function SoundexCompare(const AText, AOther: string): Integer; //; ALength: TSoundexLength = 4
|
|
|
+Function SoundexSimilar(const AText, AOther: string; ALength: TSoundexLength): Boolean;inline;
|
|
|
+Function SoundexSimilar(const AText, AOther: string): Boolean;inline; //; ALength: TSoundexLength = 4
|
|
|
+Function SoundexCompare(const AText, AOther: string; ALength: TSoundexLength): Integer;inline;
|
|
|
+Function SoundexCompare(const AText, AOther: string): Integer;inline; //; ALength: TSoundexLength = 4
|
|
|
Function SoundexProc(const AText, AOther: string): Boolean;
|
|
|
|
|
|
type
|
|
@@ -138,17 +139,17 @@ Function RPos(c:char;const S : AnsiString):Integer; overload;
|
|
|
Function RPos (Const Substr : AnsiString; Const Source : AnsiString) : Integer; overload;
|
|
|
function AddChar(C: Char; const S: string; N: Integer): string;
|
|
|
function AddCharR(C: Char; const S: string; N: Integer): string;
|
|
|
-function PadLeft(const S: string; N: Integer): string;
|
|
|
-function PadRight(const S: string; N: Integer): string;
|
|
|
+function PadLeft(const S: string; N: Integer): string;inline;
|
|
|
+function PadRight(const S: string; N: Integer): string;inline;
|
|
|
function PadCenter(const S: string; Len: Integer): string;
|
|
|
function Copy2Symb(const S: string; Symb: Char): string;
|
|
|
function Copy2SymbDel(var S: string; Symb: Char): string;
|
|
|
-function Copy2Space(const S: string): string;
|
|
|
-function Copy2SpaceDel(var S: string): string;
|
|
|
+function Copy2Space(const S: string): string;inline;
|
|
|
+function Copy2SpaceDel(var S: string): string;inline;
|
|
|
function AnsiProperCase(const S: string; const WordDelims: TSysCharSet): string;
|
|
|
function WordCount(const S: string; const WordDelims: TSysCharSet): Integer;
|
|
|
function WordPosition(const N: Integer; const S: string; const WordDelims: TSysCharSet): Integer;
|
|
|
-function ExtractWord(N: Integer; const S: string; const WordDelims: TSysCharSet): string;
|
|
|
+function ExtractWord(N: Integer; const S: string; const WordDelims: TSysCharSet): string;inline;
|
|
|
function ExtractWordPos(N: Integer; const S: string; const WordDelims: TSysCharSet; var Pos: Integer): string;
|
|
|
function ExtractDelimited(N: Integer; const S: string; const Delims: TSysCharSet): string;
|
|
|
function ExtractSubstr(const S: string; var Pos: Integer; const Delims: TSysCharSet): string;
|
|
@@ -199,32 +200,31 @@ begin
|
|
|
Result:=False;
|
|
|
end;
|
|
|
|
|
|
-Function AnsiContainsText(const AText, ASubText: string): Boolean;
|
|
|
-
|
|
|
+Function AnsiContainsText(const AText, ASubText: string): Boolean;inline;
|
|
|
begin
|
|
|
AnsiContainsText:=AnsiPos(ASubText,AText)<>0;
|
|
|
end;
|
|
|
|
|
|
|
|
|
-Function AnsiStartsText(const ASubText, AText: string): Boolean;
|
|
|
+Function AnsiStartsText(const ASubText, AText: string): Boolean;inline;
|
|
|
begin
|
|
|
Result:=AnsiCompareText(Copy(AText,1,Length(AsubText)),ASubText)=0;
|
|
|
end;
|
|
|
|
|
|
|
|
|
-Function AnsiEndsText(const ASubText, AText: string): Boolean;
|
|
|
+Function AnsiEndsText(const ASubText, AText: string): Boolean;inline;
|
|
|
begin
|
|
|
result:=AnsiCompareText(Copy(AText,Length(AText)-Length(ASubText)+1,Length(ASubText)),asubtext)=0;
|
|
|
end;
|
|
|
|
|
|
|
|
|
-Function AnsiReplaceText(const AText, AFromText, AToText: string): string;
|
|
|
+Function AnsiReplaceText(const AText, AFromText, AToText: string): string;inline;
|
|
|
begin
|
|
|
Result := StringReplace(AText,AFromText,AToText,[rfReplaceAll,rfIgnoreCase]);
|
|
|
end;
|
|
|
|
|
|
|
|
|
-Function AnsiMatchText(const AText: string; const AValues: array of string): Boolean;
|
|
|
+Function AnsiMatchText(const AText: string; const AValues: array of string): Boolean;inline;
|
|
|
begin
|
|
|
Result:=(AnsiIndexText(AText,AValues)<>-1)
|
|
|
end;
|
|
@@ -248,43 +248,39 @@ end;
|
|
|
Case sensitive search/replace
|
|
|
---------------------------------------------------------------------}
|
|
|
|
|
|
-Function AnsiContainsStr(const AText, ASubText: string): Boolean;
|
|
|
-
|
|
|
+Function AnsiContainsStr(const AText, ASubText: string): Boolean;inline;
|
|
|
begin
|
|
|
Result := AnsiPos(ASubText,AText)<>0;
|
|
|
end;
|
|
|
|
|
|
|
|
|
-
|
|
|
-Function AnsiStartsStr(const ASubText, AText: string): Boolean;
|
|
|
-
|
|
|
+Function AnsiStartsStr(const ASubText, AText: string): Boolean;inline;
|
|
|
begin
|
|
|
Result := AnsiPos(ASubText,AText)=1;
|
|
|
end;
|
|
|
|
|
|
|
|
|
-Function AnsiEndsStr(const ASubText, AText: string): Boolean;
|
|
|
+Function AnsiEndsStr(const ASubText, AText: string): Boolean;inline;
|
|
|
begin
|
|
|
Result := AnsiPos(ASubText,AText)=(length(AText)-length(ASubText)+1);
|
|
|
end;
|
|
|
|
|
|
|
|
|
-Function AnsiReplaceStr(const AText, AFromText, AToText: string): string;
|
|
|
+Function AnsiReplaceStr(const AText, AFromText, AToText: string): string;inline;
|
|
|
begin
|
|
|
Result := StringReplace(AText,AFromText,AToText,[rfReplaceAll]);
|
|
|
end;
|
|
|
|
|
|
|
|
|
-Function AnsiMatchStr(const AText: string; const AValues: array of string): Boolean;
|
|
|
+Function AnsiMatchStr(const AText: string; const AValues: array of string): Boolean;inline;
|
|
|
begin
|
|
|
Result:=AnsiIndexStr(AText,Avalues)<>-1;
|
|
|
end;
|
|
|
|
|
|
|
|
|
Function AnsiIndexStr(const AText: string; const AValues: array of string): Integer;
|
|
|
-
|
|
|
-var i : longint;
|
|
|
-
|
|
|
+var
|
|
|
+ i : longint;
|
|
|
begin
|
|
|
result:=-1;
|
|
|
if high(AValues)=-1 Then
|
|
@@ -295,8 +291,6 @@ begin
|
|
|
end;
|
|
|
|
|
|
|
|
|
-
|
|
|
-
|
|
|
{ ---------------------------------------------------------------------
|
|
|
Playthingies
|
|
|
---------------------------------------------------------------------}
|
|
@@ -332,7 +326,7 @@ begin
|
|
|
end;
|
|
|
|
|
|
|
|
|
-Function AnsiReverseString(const AText: AnsiString): AnsiString;
|
|
|
+Function AnsiReverseString(const AText: AnsiString): AnsiString;inline;
|
|
|
|
|
|
begin
|
|
|
Result:=ReverseString(AText);
|
|
@@ -342,19 +336,18 @@ end;
|
|
|
|
|
|
Function StuffString(const AText: string; AStart, ALength: Cardinal; const ASubText: string): string;
|
|
|
|
|
|
-var i,j : longint;
|
|
|
+var i,j : SizeUInt;
|
|
|
|
|
|
begin
|
|
|
j:=length(ASubText);
|
|
|
i:=length(AText);
|
|
|
- SetLength(Result,i-ALength+j);
|
|
|
+ SetLength(Result,i+j-ALength);
|
|
|
move (AText[1],result[1],AStart-1);
|
|
|
move (ASubText[1],result[AStart],j);
|
|
|
- move (AText[AStart+ALength], Result[AStart+j],i-AStart-ALength+1);
|
|
|
+ move (AText[AStart+ALength], Result[AStart+j],i+1-AStart-ALength);
|
|
|
end;
|
|
|
|
|
|
|
|
|
-
|
|
|
Function RandomFrom(const AValues: array of string): string; overload;
|
|
|
|
|
|
begin
|
|
@@ -364,7 +357,7 @@ end;
|
|
|
|
|
|
|
|
|
|
|
|
-Function IfThen(AValue: Boolean; const ATrue: string; AFalse: string): string;
|
|
|
+Function IfThen(AValue: Boolean; const ATrue: string; AFalse: string): string;inline;
|
|
|
|
|
|
begin
|
|
|
if avalue then
|
|
@@ -375,7 +368,7 @@ end;
|
|
|
|
|
|
|
|
|
|
|
|
-Function IfThen(AValue: Boolean; const ATrue: string): string; // ; AFalse: string = ''
|
|
|
+Function IfThen(AValue: Boolean; const ATrue: string): string;inline; // ; AFalse: string = ''
|
|
|
|
|
|
begin
|
|
|
if avalue then
|
|
@@ -390,7 +383,7 @@ end;
|
|
|
VB emulations.
|
|
|
---------------------------------------------------------------------}
|
|
|
|
|
|
-Function LeftStr(const AText: AnsiString; const ACount: Integer): AnsiString;
|
|
|
+Function LeftStr(const AText: AnsiString; const ACount: Integer): AnsiString;inline;
|
|
|
|
|
|
begin
|
|
|
Result:=Copy(AText,1,ACount);
|
|
@@ -407,7 +400,7 @@ begin
|
|
|
Result:=Copy(AText,l-j+1,j);
|
|
|
end;
|
|
|
|
|
|
-Function MidStr(const AText: AnsiString; const AStart, ACount: Integer): AnsiString;
|
|
|
+Function MidStr(const AText: AnsiString; const AStart, ACount: Integer): AnsiString;inline;
|
|
|
|
|
|
begin
|
|
|
if (ACount=0) or (AStart>length(atext)) then
|
|
@@ -417,65 +410,52 @@ end;
|
|
|
|
|
|
|
|
|
|
|
|
-Function LeftBStr(const AText: AnsiString; const AByteCount: Integer): AnsiString;
|
|
|
+Function LeftBStr(const AText: AnsiString; const AByteCount: Integer): AnsiString;inline;
|
|
|
|
|
|
begin
|
|
|
Result:=LeftStr(AText,AByteCount);
|
|
|
end;
|
|
|
|
|
|
|
|
|
-
|
|
|
-Function RightBStr(const AText: AnsiString; const AByteCount: Integer): AnsiString;
|
|
|
-
|
|
|
+Function RightBStr(const AText: AnsiString; const AByteCount: Integer): AnsiString;inline;
|
|
|
begin
|
|
|
Result:=RightStr(Atext,AByteCount);
|
|
|
end;
|
|
|
|
|
|
|
|
|
-
|
|
|
-Function MidBStr(const AText: AnsiString; const AByteStart, AByteCount: Integer): AnsiString;
|
|
|
-
|
|
|
+Function MidBStr(const AText: AnsiString; const AByteStart, AByteCount: Integer): AnsiString;inline;
|
|
|
begin
|
|
|
Result:=MidStr(AText,AByteStart,AByteCount);
|
|
|
end;
|
|
|
|
|
|
|
|
|
-
|
|
|
-Function AnsiLeftStr(const AText: AnsiString; const ACount: Integer): AnsiString;
|
|
|
-
|
|
|
+Function AnsiLeftStr(const AText: AnsiString; const ACount: Integer): AnsiString;inline;
|
|
|
begin
|
|
|
Result := copy(AText,1,ACount);
|
|
|
end;
|
|
|
|
|
|
|
|
|
-
|
|
|
-Function AnsiRightStr(const AText: AnsiString; const ACount: Integer): AnsiString;
|
|
|
-
|
|
|
+Function AnsiRightStr(const AText: AnsiString; const ACount: Integer): AnsiString;inline;
|
|
|
begin
|
|
|
Result := copy(AText,length(AText)-ACount+1,ACount);
|
|
|
end;
|
|
|
|
|
|
|
|
|
-
|
|
|
-Function AnsiMidStr(const AText: AnsiString; const AStart, ACount: Integer): AnsiString;
|
|
|
-
|
|
|
+Function AnsiMidStr(const AText: AnsiString; const AStart, ACount: Integer): AnsiString;inline;
|
|
|
begin
|
|
|
Result:=Copy(AText,AStart,ACount);
|
|
|
end;
|
|
|
|
|
|
-Function LeftStr(const AText: WideString; const ACount: Integer): WideString;
|
|
|
|
|
|
+Function LeftStr(const AText: WideString; const ACount: Integer): WideString;inline;
|
|
|
begin
|
|
|
Result:=Copy(AText,1,ACount);
|
|
|
end;
|
|
|
|
|
|
|
|
|
-
|
|
|
Function RightStr(const AText: WideString; const ACount: Integer): WideString;
|
|
|
-
|
|
|
var
|
|
|
j,l:integer;
|
|
|
-
|
|
|
begin
|
|
|
l:=length(atext);
|
|
|
j:=ACount;
|
|
@@ -484,16 +464,12 @@ begin
|
|
|
end;
|
|
|
|
|
|
|
|
|
-
|
|
|
-Function MidStr(const AText: WideString; const AStart, ACount: Integer): WideString;
|
|
|
-
|
|
|
+Function MidStr(const AText: WideString; const AStart, ACount: Integer): WideString;inline;
|
|
|
begin
|
|
|
Result:=Copy(AText,AStart,ACount);
|
|
|
end;
|
|
|
|
|
|
|
|
|
-
|
|
|
-
|
|
|
{ ---------------------------------------------------------------------
|
|
|
Extended search and replace
|
|
|
---------------------------------------------------------------------}
|
|
@@ -607,19 +583,17 @@ end;
|
|
|
|
|
|
|
|
|
|
|
|
-Function SearchBuf(Buf: PChar; BufLen: Integer; SelStart, SelLength: Integer; SearchString: String): PChar; // ; Options: TStringSearchOptions = [soDown]
|
|
|
-
|
|
|
+Function SearchBuf(Buf: PChar; BufLen: Integer; SelStart, SelLength: Integer; SearchString: String): PChar;inline; // ; Options: TStringSearchOptions = [soDown]
|
|
|
begin
|
|
|
Result:=SearchBuf(Buf,BufLen,SelStart,SelLength,SearchString,[soDown]);
|
|
|
end;
|
|
|
|
|
|
|
|
|
-
|
|
|
Function PosEx(const SubStr, S: string; Offset: Cardinal): Integer;
|
|
|
|
|
|
var i : pchar;
|
|
|
begin
|
|
|
- if (offset<1) or (offset>length(s)) then exit(0);
|
|
|
+ if (offset<1) or (offset>SizeUInt(length(s))) then exit(0);
|
|
|
i:=strpos(@s[offset],@substr[1]);
|
|
|
if i=nil then
|
|
|
PosEx:=0
|
|
@@ -628,21 +602,21 @@ begin
|
|
|
end;
|
|
|
|
|
|
|
|
|
-Function PosEx(const SubStr, S: string): Integer; // Offset: Cardinal = 1
|
|
|
-
|
|
|
+Function PosEx(const SubStr, S: string): Integer;inline; // Offset: Cardinal = 1
|
|
|
begin
|
|
|
posex:=posex(substr,s,1);
|
|
|
end;
|
|
|
|
|
|
+
|
|
|
Function PosEx(c:char; const S: string; Offset: Cardinal): Integer;
|
|
|
|
|
|
var l : longint;
|
|
|
begin
|
|
|
- if (offset<1) or (offset>length(s)) then exit(0);
|
|
|
+ if (offset<1) or (offset>SizeUInt(length(s))) then exit(0);
|
|
|
l:=length(s);
|
|
|
{$ifndef useindexbyte}
|
|
|
- while (offset<=l) and (s[offset]<>c) do inc(offset);
|
|
|
- if offset>l then
|
|
|
+ while (SizeInt(offset)<=l) and (s[offset]<>c) do inc(offset);
|
|
|
+ if SizeInt(offset)>l then
|
|
|
posex:=0
|
|
|
else
|
|
|
posex:=offset;
|
|
@@ -703,7 +677,7 @@ end;
|
|
|
|
|
|
|
|
|
|
|
|
-Function Soundex(const AText: string): string; // ; ALength: TSoundexLength = 4
|
|
|
+Function Soundex(const AText: string): string;inline; // ; ALength: TSoundexLength = 4
|
|
|
|
|
|
begin
|
|
|
Result:=Soundex(AText,4);
|
|
@@ -736,15 +710,12 @@ begin
|
|
|
end;
|
|
|
|
|
|
|
|
|
-
|
|
|
-Function SoundexInt(const AText: string): Integer; //; ALength: TSoundexIntLength = 4
|
|
|
-
|
|
|
+Function SoundexInt(const AText: string): Integer;inline; //; ALength: TSoundexIntLength = 4
|
|
|
begin
|
|
|
Result:=SoundexInt(AText,4);
|
|
|
end;
|
|
|
|
|
|
|
|
|
-
|
|
|
Function DecodeSoundexInt(AValue: Integer): string;
|
|
|
|
|
|
var
|
|
@@ -766,7 +737,6 @@ begin
|
|
|
end;
|
|
|
|
|
|
|
|
|
-
|
|
|
Function SoundexWord(const AText: string): Word;
|
|
|
|
|
|
Var
|
|
@@ -781,9 +751,7 @@ begin
|
|
|
end;
|
|
|
|
|
|
|
|
|
-
|
|
|
Function DecodeSoundexWord(AValue: Word): string;
|
|
|
-
|
|
|
begin
|
|
|
Result := Chr(Ord0+ (AValue mod 7));
|
|
|
AValue := AValue div 7;
|
|
@@ -795,41 +763,31 @@ begin
|
|
|
end;
|
|
|
|
|
|
|
|
|
-
|
|
|
-Function SoundexSimilar(const AText, AOther: string; ALength: TSoundexLength): Boolean;
|
|
|
-
|
|
|
+Function SoundexSimilar(const AText, AOther: string; ALength: TSoundexLength): Boolean;inline;
|
|
|
begin
|
|
|
Result:=Soundex(AText,ALength)=Soundex(AOther,ALength);
|
|
|
end;
|
|
|
|
|
|
|
|
|
-
|
|
|
-Function SoundexSimilar(const AText, AOther: string): Boolean; //; ALength: TSoundexLength = 4
|
|
|
-
|
|
|
+Function SoundexSimilar(const AText, AOther: string): Boolean;inline; //; ALength: TSoundexLength = 4
|
|
|
begin
|
|
|
Result:=SoundexSimilar(AText,AOther,4);
|
|
|
end;
|
|
|
|
|
|
|
|
|
-
|
|
|
-Function SoundexCompare(const AText, AOther: string; ALength: TSoundexLength): Integer;
|
|
|
-
|
|
|
+Function SoundexCompare(const AText, AOther: string; ALength: TSoundexLength): Integer;inline;
|
|
|
begin
|
|
|
Result:=AnsiCompareStr(Soundex(AText,ALength),Soundex(AOther,ALength));
|
|
|
end;
|
|
|
|
|
|
|
|
|
-
|
|
|
-Function SoundexCompare(const AText, AOther: string): Integer; //; ALength: TSoundexLength = 4
|
|
|
-
|
|
|
+Function SoundexCompare(const AText, AOther: string): Integer;inline; //; ALength: TSoundexLength = 4
|
|
|
begin
|
|
|
Result:=SoundexCompare(AText,AOther,4);
|
|
|
end;
|
|
|
|
|
|
|
|
|
-
|
|
|
Function SoundexProc(const AText, AOther: string): Boolean;
|
|
|
-
|
|
|
begin
|
|
|
Result:=SoundexSimilar(AText,AOther);
|
|
|
end;
|
|
@@ -961,16 +919,19 @@ begin
|
|
|
Result:=Result+StringOfChar(C,N-l);
|
|
|
end;
|
|
|
|
|
|
-function PadRight(const S: string; N: Integer): string;
|
|
|
+
|
|
|
+function PadRight(const S: string; N: Integer): string;inline;
|
|
|
begin
|
|
|
Result:=AddCharR(' ',S,N);
|
|
|
end;
|
|
|
|
|
|
-function PadLeft(const S: string; N: Integer): string;
|
|
|
+
|
|
|
+function PadLeft(const S: string; N: Integer): string;inline;
|
|
|
begin
|
|
|
Result:=AddChar(' ',S,N);
|
|
|
end;
|
|
|
|
|
|
+
|
|
|
function Copy2Symb(const S: string; Symb: Char): string;
|
|
|
|
|
|
var
|
|
@@ -990,12 +951,12 @@ begin
|
|
|
S:=TrimRight(Copy(S,Length(Result)+1,Length(S)));
|
|
|
end;
|
|
|
|
|
|
-function Copy2Space(const S: string): string;
|
|
|
+function Copy2Space(const S: string): string;inline;
|
|
|
begin
|
|
|
Result:=Copy2Symb(S,' ');
|
|
|
end;
|
|
|
|
|
|
-function Copy2SpaceDel(var S: string): string;
|
|
|
+function Copy2SpaceDel(var S: string): string;inline;
|
|
|
begin
|
|
|
Result:=Copy2SymbDel(S,' ');
|
|
|
end;
|
|
@@ -1067,15 +1028,15 @@ begin
|
|
|
end;
|
|
|
end;
|
|
|
|
|
|
-function ExtractWord(N: Integer; const S: string; const WordDelims: TSysCharSet): string;
|
|
|
|
|
|
+function ExtractWord(N: Integer; const S: string; const WordDelims: TSysCharSet): string;inline;
|
|
|
var
|
|
|
i: Integer;
|
|
|
-
|
|
|
begin
|
|
|
Result:=ExtractWordPos(N,S,WordDelims,i);
|
|
|
end;
|
|
|
|
|
|
+
|
|
|
function ExtractWordPos(N: Integer; const S: string; const WordDelims: TSysCharSet; var Pos: Integer): string;
|
|
|
var
|
|
|
i,j,l: Integer;
|
|
@@ -1296,17 +1257,18 @@ const
|
|
|
Arabics : Array[1..13] of Integer
|
|
|
= (1,4,5,9,10,40,50,90,100,400,500,900,1000);
|
|
|
Romans : Array[1..13] of String
|
|
|
- = ('i','iV','V','iX','X','XL','L','XC','C','CD','D','CM','M');
|
|
|
+ = ('I','IV','V','IX','X','XL','L','XC','C','CD','D','CM','M');
|
|
|
|
|
|
var
|
|
|
i: Integer;
|
|
|
|
|
|
begin
|
|
|
+ Result:='';
|
|
|
for i:=13 downto 1 do
|
|
|
while (Value >= Arabics[i]) do
|
|
|
begin
|
|
|
- Value:=Value-Arabics[i];
|
|
|
- Result:=Result+Romans[i];
|
|
|
+ Value:=Value-Arabics[i];
|
|
|
+ Result:=Result+Romans[i];
|
|
|
end;
|
|
|
end;
|
|
|
|
|
@@ -1510,7 +1472,7 @@ end;
|
|
|
|
|
|
Function RPosEX(C:char;const S : AnsiString;offs:cardinal):Integer; overload;
|
|
|
|
|
|
-var I : Integer;
|
|
|
+var I : SizeUInt;
|
|
|
p,p2: pChar;
|
|
|
|
|
|
Begin
|
|
@@ -1580,7 +1542,7 @@ begin
|
|
|
rPosex:=0;
|
|
|
llen:=Length(SubStr);
|
|
|
maxlen:=length(source);
|
|
|
- if offs<maxlen then maxlen:=offs;
|
|
|
+ if SizeInt(offs)<maxlen then maxlen:=offs;
|
|
|
if (llen>0) and (maxlen>0) and ( llen<=maxlen) then
|
|
|
begin
|
|
|
// i:=maxlen;
|