Tracey

Stylistic really I also finding typing pred(Count) is less error
prone the - 1 sometimes gets lost

N

----- Original Message -----
From: "Tracey Maule" <[EMAIL PROTECTED]>
To: "Multiple recipients of list delphi" <[EMAIL PROTECTED]>
Sent: Friday, November 01, 2002 10:48 AM
Subject: Re: [DUG]: Friday Challange


Just as an aside, could u tell me why u are all using pred(itemcount)
instead of (itemcount - 1)????


----- Original Message -----
From: Stephen Bertram
To: Multiple recipients of list delphi
Sent: Friday, November 01, 2002 9:38 AM
Subject: RE: [DUG]: Friday Challange


I've done this in 5 different ways.  One of the more flexible is

function statement(Sep, Quote: String): string;
var
  I: integer;
begin
  Result := Sep;
  for I := 0 to pred(ItemCount) do
    Result := format('%s%s%s%s%s',[Result,Sep,Quote,Item[I],Quote])
  Delete(Result, 1, Length(Sep);
end;

The main advantage of this is speed where the list is large - the
conditional is removed from the iteration.
(Note that many variants of SQL limit the number of parameters in a list to
255 and the length of the list to 2000 or 4000.)

One of our standard method for comma separated lists is to use a stringlist
(not efficient but simple and avoids empty lists):

function statement(FieldName, EmptyCondition: String; Quote: Boolean):
string;
var
  i integer;
  ResList : TStringList;
begin
  ResList := TStringList.Create;
  for I := 0 to pred(ItemCount) do
    if Quote
      ResList.Add(Format('''%s''',[Item[i]]))
    else
      ResList.Add(Item[i]);
  if ResList.Count > 0 then
    Result := Format('%s in (%s)',[FieldName, ResList.CommaText]
  else
    Result := EmptyCondition;
  ResList.Free;
end;

Result := $0.02;

Stephen

  -----Original Message-----
  From: Neven MacEwan [mailto:neven@;mwk.co.nz]
  Sent: Friday, 1 November 2002 12:28 a.m.
  To: Multiple recipients of list delphi
  Subject: [DUG]: Friday Challange


  Hi all,

  Further to my enpty string question, I'm writing a lot of
  functions that return a set of strings joined by a separator
  ie 'col1, col2,...' or 'col1 = 'a' and colb = 'b'' (as you may guess
  these are all parts of SQL Statements)

  given a function 'Itemcount' that returns the number of items
  and item(i) that returns the item string, and function sep what is the
  best form of such a function

  to seed the duscussion I'll give you one of my variants

  function statement: string;
  var
    I: integer;
  begin
    Result := '';
    for I := 0 to pred(ItemCount) do
      if I = 0 then Result := Item(I)
      else Result := format('%s%s%s',[Result,Sep,Item(I)])
  end;

  Variants and explainations pls

  Neven


---------------------------------------------------------------------------
    New Zealand Delphi Users group - Delphi List - [EMAIL PROTECTED]
                  Website: http://www.delphi.org.nz
To UnSub, send email to: [EMAIL PROTECTED] 
with body of "unsubscribe delphi"
Web Archive at: http://www.mail-archive.com/delphi%40delphi.org.nz/

Reply via email to