From: <jfu...@us...> - 2011-06-19 17:01:28
|
Revision: 3544 http://jcl.svn.sourceforge.net/jcl/?rev=3544&view=rev Author: jfudickar Date: 2011-06-19 17:01:22 +0000 (Sun, 19 Jun 2011) Log Message: ----------- Overloaded Function StringsToStr added: function StringsToStr(const List: TStrings; const Sep: string; const NumberOfItems: SizeInt; const AllowEmptyString: Boolean = True): string; overload; Modified Paths: -------------- trunk/jcl/source/common/JclStrings.pas Modified: trunk/jcl/source/common/JclStrings.pas =================================================================== --- trunk/jcl/source/common/JclStrings.pas 2011-06-17 09:47:58 UTC (rev 3543) +++ trunk/jcl/source/common/JclStrings.pas 2011-06-19 17:01:22 UTC (rev 3544) @@ -358,7 +358,9 @@ // TStrings Manipulation procedure StrIToStrings(S, Sep: string; const List: TStrings; const AllowEmptyString: Boolean = True); procedure StrToStrings(S, Sep: string; const List: TStrings; const AllowEmptyString: Boolean = True); -function StringsToStr(const List: TStrings; const Sep: string; const AllowEmptyString: Boolean = True): string; +function StringsToStr(const List: TStrings; const Sep: string; const AllowEmptyString: Boolean = True): string; overload; +function StringsToStr(const List: TStrings; const Sep: string; const NumberOfItems: SizeInt; const AllowEmptyString: + Boolean = True): string; overload; procedure TrimStrings(const List: TStrings; DeleteIfEmpty: Boolean = True); procedure TrimStringsRight(const List: TStrings; DeleteIfEmpty: Boolean = True); procedure TrimStringsLeft(const List: TStrings; DeleteIfEmpty: Boolean = True); @@ -3322,7 +3324,7 @@ end; end; -function StringsToStr(const List: TStrings; const Sep: string; const AllowEmptyString: Boolean): string; +function StringsToStr(const List: TStrings; const Sep: string; const AllowEmptyString: Boolean = True): string; var I, L: SizeInt; begin @@ -3337,13 +3339,40 @@ end; end; // remove terminating separator - if List.Count <> 0 then + if List.Count > 0 then begin L := Length(Sep); Delete(Result, Length(Result) - L + 1, L); end; end; +function StringsToStr(const List: TStrings; const Sep: string; const NumberOfItems: SizeInt; const AllowEmptyString: + Boolean = True): string; +var + I, L, N: SizeInt; +begin + Result := ''; + if List.Count > NumberOfItems then + N := NumberOfItems + else + N := List.Count; + for I := 0 to N - 1 do + begin + if (List[I] <> '') or AllowEmptyString then + begin + // don't combine these into one addition, somehow it hurts performance + Result := Result + List[I]; + Result := Result + Sep; + end; + end; + // remove terminating separator + if N > 0 then + begin + L := Length(Sep); + Delete(Result, Length(Result) - L + 1, L); + end; +end; + procedure TrimStrings(const List: TStrings; DeleteIfEmpty: Boolean); var I: SizeInt; This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |