martes, 18 de julio de 2017

Delphi tstringlist indexof case sensitive

Desarrollando una aplicación me encontré el siguiente problema:

Cargo un objeto TStringList con caracteres. Ejemplo 'T', 'e', 's', 't'

la propiedad indexOf del objecto TStringList devuelve las coincidencias sin tener en cuenta mayúsucla y minúsculas, es decir, no es caso sensitivo.

indexOf('t') devolvería el índice: 0. Que corresponde en realidad a 'T' (mayúscula)

Para corregirlo sustituir la función indexOf por:

function TForm1.searchStringListPosition(miLista: TStringList): integer;
begin
  for Result := 0 to miLista.count - 1 do
    if AnsiCompareStr(miLista[Result], pString) = 0 then Exit;
  Result := -1;
end;

Suerte! Esta tontería me dió muchos dolores de cabeza por eso me gustaría compartir esto.

---------------------------------------
Aclaraciones:

Aclaración 1:

Esta funcionalidad ha podido ser modificada en distintas versiones de delphi según  un comenario en: http://fpc-pascal.freepascal.narkive.com/GEdB2ACG/tstringlist-indexof-case-sensitivity

Post by James Mills
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
----------------------------

Michael

No hay comentarios:

Publicar un comentario

Jesús Moreno - Ingeniero Ténico Informático - consultor Informático

Hola, soy Jesús Moreno Ingeniero Técnico Informático en sistemas por la US y propietario de éste blog. Mi trabajo en los ultimos años se ...