From: <ou...@us...> - 2011-01-15 10:08:52
|
Revision: 3476 http://jcl.svn.sourceforge.net/jcl/?rev=3476&view=rev Author: outchy Date: 2011-01-15 10:08:45 +0000 (Sat, 15 Jan 2011) Log Message: ----------- some new string index, prefix and suffix functions. Modified Paths: -------------- trunk/jcl/source/common/JclAnsiStrings.pas trunk/jcl/source/common/JclStrings.pas Modified: trunk/jcl/source/common/JclAnsiStrings.pas =================================================================== --- trunk/jcl/source/common/JclAnsiStrings.pas 2011-01-13 17:12:07 UTC (rev 3475) +++ trunk/jcl/source/common/JclAnsiStrings.pas 2011-01-15 10:08:45 UTC (rev 3476) @@ -386,10 +386,15 @@ function StrRepeatChar(C: AnsiChar; Count: SizeInt): AnsiString; function StrFind(const Substr, S: AnsiString; const Index: SizeInt = 1): SizeInt; function StrHasPrefix(const S: AnsiString; const Prefixes: array of AnsiString): Boolean; -function StrIndex(const S: AnsiString; const List: array of AnsiString): SizeInt; +function StrHasSuffix(const S: AnsiString; const Suffixes: array of AnsiString): Boolean; +function StrIHasPrefix(const S: AnsiString; const Prefixes: array of AnsiString): Boolean; +function StrIHasSuffix(const S: AnsiString; const Suffixes: array of AnsiString): Boolean; +function StrIndex(const S: AnsiString; const List: array of AnsiString; CaseSensitive: Boolean = False): SizeInt; function StrILastPos(const SubStr, S: AnsiString): SizeInt; function StrIPos(const SubStr, S: AnsiString): SizeInt; +function StrIPrefixIndex(const S: AnsiString; const Prefixes: array of AnsiString): SizeInt; function StrIsOneOf(const S: AnsiString; const List: array of AnsiString): Boolean; +function StrISuffixIndex(const S: AnsiString; const Suffixes: array of AnsiString): SizeInt; function StrLastPos(const SubStr, S: AnsiString): SizeInt; function StrMatch(const Substr, S: AnsiString; Index: SizeInt = 1): SizeInt; function StrMatches(const Substr, S: AnsiString; const Index: SizeInt = 1): Boolean; @@ -397,6 +402,7 @@ function StrNPos(const S, SubStr: AnsiString; N: SizeInt): SizeInt; function StrPrefixIndex(const S: AnsiString; const Prefixes: array of AnsiString): SizeInt; function StrSearch(const Substr, S: AnsiString; const Index: SizeInt = 1): SizeInt; +function StrSuffixIndex(const S: AnsiString; const Suffixes: array of AnsiString): SizeInt; // String Extraction function StrAfter(const SubStr, S: AnsiString): AnsiString; @@ -2568,14 +2574,29 @@ Result := StrPrefixIndex(S, Prefixes) > -1; end; -function StrIndex(const S: AnsiString; const List: array of AnsiString): SizeInt; +function StrHasSuffix(const S: AnsiString; const Suffixes: array of AnsiString): Boolean; +begin + Result := StrSuffixIndex(S, Suffixes) > -1; +end; + +function StrIHasPrefix(const S: AnsiString; const Prefixes: array of AnsiString): Boolean; +begin + Result := StrIPrefixIndex(S, Prefixes) > -1; +end; + +function StrIHasSuffix(const S: AnsiString; const Suffixes: array of AnsiString): Boolean; +begin + Result := StrISuffixIndex(S, Suffixes) > -1; +end; + +function StrIndex(const S: AnsiString; const List: array of AnsiString; CaseSensitive: Boolean): SizeInt; var I: SizeInt; begin Result := -1; for I := Low(List) to High(List) do begin - if StrSame(S, List[I]) then + if StrCompare(S, List[I], CaseSensitive) = 0 then begin Result := I; Break; @@ -2593,11 +2614,45 @@ Result := Pos(StrUpper(SubStr), StrUpper(S)); end; +function StrIPrefixIndex(const S: AnsiString; const Prefixes: array of AnsiString): SizeInt; +var + I: SizeInt; + Test: AnsiString; +begin + Result := -1; + for I := Low(Prefixes) to High(Prefixes) do + begin + Test := StrLeft(S, Length(Prefixes[I])); + if CompareText(Test, Prefixes[I]) = 0 then + begin + Result := I; + Break; + end; + end; +end; + function StrIsOneOf(const S: AnsiString; const List: array of AnsiString): Boolean; begin Result := StrIndex(S, List) > -1; end; +function StrISuffixIndex(const S: AnsiString; const Suffixes: array of AnsiString): SizeInt; +var + I: SizeInt; + Test: AnsiString; +begin + Result := -1; + for I := Low(Suffixes) to High(Suffixes) do + begin + Test := StrRight(S, Length(Suffixes[I])); + if CompareText(Test, Suffixes[I]) = 0 then + begin + Result := I; + Break; + end; + end; +end; + function StrLastPos(const SubStr, S: AnsiString): SizeInt; var Last, Current: PAnsiChar; @@ -2832,7 +2887,7 @@ for I := Low(Prefixes) to High(Prefixes) do begin Test := StrLeft(S, Length(Prefixes[I])); - if StrSame(Test, Prefixes[I]) then + if CompareStr(Test, Prefixes[I]) = 0 then begin Result := I; Break; @@ -2863,6 +2918,23 @@ Result := 0; end; +function StrSuffixIndex(const S: AnsiString; const Suffixes: array of AnsiString): SizeInt; +var + I: SizeInt; + Test: AnsiString; +begin + Result := -1; + for I := Low(Suffixes) to High(Suffixes) do + begin + Test := StrRight(S, Length(Suffixes[I])); + if CompareStr(Test, Suffixes[I]) = 0 then + begin + Result := I; + Break; + end; + end; +end; + //=== String Extraction ====================================================== function StrAfter(const SubStr, S: AnsiString): AnsiString; Modified: trunk/jcl/source/common/JclStrings.pas =================================================================== --- trunk/jcl/source/common/JclStrings.pas 2011-01-13 17:12:07 UTC (rev 3475) +++ trunk/jcl/source/common/JclStrings.pas 2011-01-15 10:08:45 UTC (rev 3476) @@ -249,12 +249,15 @@ function StrRepeatChar(C: Char; Count: SizeInt): string; function StrFind(const Substr, S: string; const Index: SizeInt = 1): SizeInt; function StrHasPrefix(const S: string; const Prefixes: array of string): Boolean; +function StrHasSuffix(const S: string; const Suffixes: array of string): Boolean; function StrIndex(const S: string; const List: array of string; CaseSensitive: Boolean = False): SizeInt; function StrIHasPrefix(const S: string; const Prefixes: array of string): Boolean; +function StrIHasSuffix(const S: string; const Suffixes: array of string): Boolean; function StrILastPos(const SubStr, S: string): SizeInt; function StrIPos(const SubStr, S: string): SizeInt; function StrIPrefixIndex(const S: string; const Prefixes: array of string): SizeInt; function StrIsOneOf(const S: string; const List: array of string): Boolean; +function StrISuffixIndex(const S: string; const Suffixes: array of string): SizeInt; function StrLastPos(const SubStr, S: string): SizeInt; function StrMatch(const Substr, S: string; Index: SizeInt = 1): SizeInt; function StrMatches(const Substr, S: string; const Index: SizeInt = 1): Boolean; @@ -262,6 +265,7 @@ function StrNPos(const S, SubStr: string; N: SizeInt): SizeInt; function StrPrefixIndex(const S: string; const Prefixes: array of string): SizeInt; function StrSearch(const Substr, S: string; const Index: SizeInt = 1): SizeInt; +function StrSuffixIndex(const S: string; const Suffixes: array of string): SizeInt; // String Extraction function StrAfter(const SubStr, S: string): string; @@ -2314,6 +2318,11 @@ Result := StrPrefixIndex(S, Prefixes) > -1; end; +function StrHasSuffix(const S: string; const Suffixes: array of string): Boolean; +begin + Result := StrSuffixIndex(S, Suffixes) > -1; +end; + function StrIndex(const S: string; const List: array of string; CaseSensitive: Boolean): SizeInt; var I: SizeInt; @@ -2334,6 +2343,11 @@ Result := StrIPrefixIndex(S, Prefixes) > -1; end; +function StrIHasSuffix(const S: string; const Suffixes: array of string): Boolean; +begin + Result := StrISuffixIndex(S, Suffixes) > -1; +end; + function StrILastPos(const SubStr, S: string): SizeInt; begin Result := StrLastPos(StrUpper(SubStr), StrUpper(S)); @@ -2366,6 +2380,23 @@ Result := StrIndex(S, List) > -1; end; +function StrISuffixIndex(const S: string; const Suffixes: array of string): SizeInt; +var + I: SizeInt; + Test: string; +begin + Result := -1; + for I := Low(Suffixes) to High(Suffixes) do + begin + Test := StrRight(S, Length(Suffixes[I])); + if CompareText(Test, Suffixes[I]) = 0 then + begin + Result := I; + Break; + end; + end; +end; + function StrLastPos(const SubStr, S: string): SizeInt; var Last, Current: PChar; @@ -2629,6 +2660,23 @@ Result := 0; end; +function StrSuffixIndex(const S: string; const Suffixes: array of string): SizeInt; +var + I: SizeInt; + Test: string; +begin + Result := -1; + for I := Low(Suffixes) to High(Suffixes) do + begin + Test := StrRight(S, Length(Suffixes[I])); + if CompareStr(Test, Suffixes[I]) = 0 then + begin + Result := I; + Break; + end; + end; +end; + //=== String Extraction ====================================================== function StrAfter(const SubStr, S: string): string; This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |