[fpc-pascal]TStringList.indexOf (case-sensitivity)

James Mills prologic at daisy.ods.org
Wed Aug 27 13:59:26 CEST 2003


On Wed, Aug 27, 2003 at 09:39:10AM +0200, Michael Van Canneyt wrote:
> 
> 
> On Wed, 27 Aug 2003, James Mills wrote:
> 
> > Hi,
> >
> > Is TStringList.indexOf case sensitive or insensitive ?
> > TStrings.indexOf is case insensitive, but TStringList.indexOf overrides
> > the TStrings.indexOf implementation accoriding to the documentation.
> 
> It is case insensitive, but this was changed recently for Delphi
> compatibility.
> Older versions are case sensitive. Here are the relevant log entries:
> 
> revision 1.15
> date: 2003/05/29 23:13:57;  author: michael;  state: Exp;  lines: +5 -2
> fixed case insensitivity of TStrings.IndexOf
> ----------------------------
> revision 1.14
> date: 2002/12/10 21:05:44;  author: michael;  state: Exp;  lines: +12 -5
> + IndexOfName is case insensitive
> ----------------------------

Is there no other function that searches the list in a case insensitive
way ? I've been looking through the current FCL source and speaking to a
member of the list...

It seems perhaps I should write a descendant of TStringList, which I've
done and works for my purpose.

The other query I have with TStringList, is the sqlite unit uses
CommaText which replaces " with "" and other side affects you don't want
in an IRC Services application. I'm going to have a find a way around
this too. I've solved the problem of null values and quoted string
returns from sqlite by a simple algorithm check.

function TDatabase.simpleQuery(query: String): String;
var
   tmp:  String;
begin
   if NOT (SQL = nil) then
      begin
         SQL.Query(query, nil);
         if (SQL.List_Field.count > 0) then
            begin
               S := TStringList(SQL.List_Field.items[0]);
               tmp := S.Strings[0];
               if (tmp[1] = '"') AND (tmp[length(tmp)] = '"') then
                  begin
                     if ((length(tmp) - 2) = 0) then
                        begin
                           simpleQuery := '';
                        end
                     else
                        begin
                           (* tmp := copy(tmp, 2, (length(tmp) - 1)); *)
                           tmp := copy(tmp, 2, length(tmp));
                           tmp := copy(tmp, 1, (length(tmp) - 1));
                           simpleQuery := tmp;
                        end;
                  end
               else
                  begin
                     simpleQuery := tmp;
                  end;
            end
         else
            begin
               simpleQuery := '';
            end;
      end;
end;

This works for what I need.

cheers
James

> 
> Michael.
> 
> 
> _______________________________________________
> fpc-pascal maillist  -  fpc-pascal at lists.freepascal.org
> http://lists.freepascal.org/mailman/listinfo/fpc-pascal

-- 
-
-Zero Defect Software Engineers Group - ZDSEG
-
-You need only two tools. WD-40 and duct tape.
-If it doesn't move and it should, use WD-40.
-If it moves and shouldn't, use the tape.




More information about the fpc-pascal mailing list