lunes, 3 de noviembre de 2014

Parte 1ª - Tratamiento de cadenas de texto en Lazarus

En Lazarus tenemos un amplio repertorio de funciones para el análisis y manipulación de cadenas de texto. Así que sin más tardar pasemos a detallar algunas de las más importantes


AnsiCompareStr(const S1, const S2) : Integer;

Compara dos cadenas haciendo caso omiso de acentos. Esta comparación devuelve el siguiente resultado:

La comparación usa dos cadenas de texto (caracter a caracter) y nos dice si son iguales. Tiene en cuenta los caracteres ANSI(caracteres acentuados) y efectúa diferencia entre mayúsculas y minúsculas.

0 si S1 es igual que S2. Si ambas cadenas son iguales devuelve un 0.
> 0 si S1 es mayor que S2Devolverá 1 si S1 es superior a S2 
< 0 si S1 es menor que S2. Devuelve un -1 si S1 es inferior a S2

Veamos unas comparaciones:

AnsiCompareStr( 'HOLA', 'HOLA' ); {devuelve 0}
AnsiCompareStr( 'HOLA', 'HOLa' ); {devuelve  1}
AnsiCompareStr( 'HOLa', 'HOLA' ); {devuelve -1}

¿Cuando considera Lazarus que una cadena de texto es superior a otra?, pues el orden es el siguiente:

Letras mayúsculas > Letras minúsculas
Letras minúsculas > Números

Veamos un ejemplo(copiado de la wiki de lazarus) :

Program Comparamos;

{$H+}

Uses sysutils;

Procedure Comprobar(S1, S2 : String);
Var R : Longint;
begin
  R := AnsiCompareStr(S1,S2);
  Write ('"',S1,'" is ');
  If R < 0 then
    write ('less than ')
  else 
    begin
      If R = 0 then
           Write ('equal to ')
      else Write ('larger than ');
    end;
  Writeln ('"',S2,'"');
end;

Begin
  Comprobar('One string','One smaller string');
  Comprobar('One string','one string');
  Comprobar('One string','One string');
  Comprobar('One string','One tall string');
End.


AnsiCompareText(const S1, const S2) : Integer;
Es similar a AnsiCompareStr, pero se diferencia en que no distingue entre mayúsculas y minúsculas.


Veamos unas comparaciones:
AnsiCompareText( 'HOLA', 'HOLA' );  {devuelve 0}
AnsiCompareText( 'HOLA', 'HOLa' );  {devuelve 0}
AnsiCompareText( 'HOLa', 'HOLA' );  {devuelve 0}
AnsiCompareText( 'HOLA', 'HOLLA' ); {devuelve -1}
AnsiCompareText( 'HOLLA', 'HOLA' ); {devuelve 1}

El orden ahora entre cadenas es el siguiente:

Letras > Números

AdjustLineBreaks(const S);

Cambiará todas las apariciones de los caracteres #13 y #10 por los caracteres de fin de línea correctos para el sistema operativo en el que se ejecute. Para windows sería #13 y #10. Para linux y Unix sería #10 y para Mac OS es #13.