Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   Función para comprar dos strings (https://www.clubdelphi.com/foros/showthread.php?t=79222)

Jere_84 16-06-2012 16:20:47

Función para comprar dos strings
 
Hola Club!, hay alguna función de tipo Booleana que compare dos cadenas de texto? Estuve probando hay muchas pero pero no me convencen. Requiero comparar dos strings dentro de un ciclo, algo asi seria lo que necesito:

Código Delphi [-]
if Funcion(oClientDataSet.Fields.Fields[i].FieldName, vCamposClave)= False then
  begin
     //...
  end;

Slds.

mightydragonlor 16-06-2012 17:30:21

Esta función te devuelve la cantidad de diferencias que encuentra entre las cadenas, aún así, no queda muy claro lo que necesitas.

Código Delphi [-]
function Diferencias(Str1, Str2: String): Integer;
var
  d : array of array of Integer;
  Len1, Len2 : Integer;
  i,j,cost:Integer;
begin
  Len1:=Length(Str1);
  Len2:=Length(Str2);
  SetLength(d,Len1+1);
  for i := Low(d) to High(d) do
    SetLength(d[i],Len2+1);
 
  for i := 0 to Len1 do
    d[i,0]:=i;
 
  for j := 0 to Len2 do
    d[0,j]:=j;
 
  for i:= 1 to Len1 do
    for j:= 1 to Len2 do
    begin
      if Str1[i]=Str2[j] then
        cost:=0
      else
        cost:=1;
      d[i,j]:= Min(d[i-1, j] + 1,
                   Min(d[i, j-1] + 1,
                       d[i-1, j-1] + cost)
                            );
    end;
  Result:=d[Len1,Len2];
end;

Jere_84 16-06-2012 17:59:57

Cita:

Empezado por mightydragonlor (Mensaje 435266)
Esta función te devuelve la cantidad de diferencias que encuentra entre las cadenas, aún así, no queda muy claro lo que necesitas.

Código Delphi [-]
function Diferencias(Str1, Str2: String): Integer;
var
  d : array of array of Integer;
  Len1, Len2 : Integer;
  i,j,cost:Integer;
begin
  Len1:=Length(Str1);
  Len2:=Length(Str2);
  SetLength(d,Len1+1);
  for i := Low(d) to High(d) do
    SetLength(d[i],Len2+1);
 
  for i := 0 to Len1 do
    d[i,0]:=i;
 
  for j := 0 to Len2 do
    d[0,j]:=j;
 
  for i:= 1 to Len1 do
    for j:= 1 to Len2 do
    begin
      if Str1[i]=Str2[j] then
        cost:=0
      else
        cost:=1;
      d[i,j]:= Min(d[i-1, j] + 1,
                   Min(d[i, j-1] + 1,
                       d[i-1, j-1] + cost)
                            );
    end;
  Result:=d[Len1,Len2];
end;

Gracias mightydragonlor, pero lo único que necesito es que me digo si son o no iguales. Imagino que debe haber alguna que sea boolean.
Slds.

mightydragonlor 16-06-2012 18:11:23

Cita:

Empezado por Jere_84 (Mensaje 435267)
Gracias mightydragonlor, pero lo único que necesito es que me digo si son o no iguales. Imagino que debe haber alguna que sea boolean.
Slds.

Prueba con esto.
Código Delphi [-]
procedure TForm1.Button1Click(Sender: TObject);
Var a,b: String;
  Function Igualdad(Str1, Str2: String): Boolean;
  Begin
    If Str1=Str2 Then Result:=True Else Result:=False;
  end;
begin
  a:= '123';
  b:= '123';
  If Igualdad(a,b) = True Then ShowMessage('Son iguales!') Else ShowMessage('Son diferentes!');
end;

ecfisa 16-06-2012 20:40:19

Cita:

lo único que necesito es que me digo si son o no iguales.
Hola Jere_84.

Entonces, otra posibilidad es utilizar cualquiera de las funciones StrCompare o AnsiStrCompare, estas devuelven un valor que según la propia ayuda de Delphi es:
Código:

Condition  Return Value
S1 > S2          > 0
S1 < S2    < 0
S1 = S2          = 0

Ahora podrías hacer:
Código Delphi [-]
 if Boolean(CompareStr('Hola', 'Hola')) then // True si son <>
    ShowMessage('Diferentes')
  else
    ShowMessage('Iguales');

Saludos.

Delphius 18-06-2012 04:13:29

Pues... no conozco si existe una función para comprar strings. Es la primera vez que "escucho" que se tenga que pagar por usarlos :D

Ahora yendo a tu pregunta: Define para ti que dos strings sean iguales... porque a mi me huele a que te estás complicando al puro %$#&@. Define realmente que es "compararlos"
En principio para algo tan trivial y básico ¿Hace falta una función? ¿Que o quien te impide hacer algo como:

Código Delphi [-]
if String1 = String2
   then ShowMessage('Son Iguales macho. ¿Que no ves?')
   else ShowMessage('Pues resulta que somos distintos. Y no hizo falta de más para compararnos')
;

Digo... o es que yo me volví más tarado, que puede ser y no descarto :D , o es que tu esperas algo más de una "comparación". A ver si te explicas porque...

Saludos,

cloayza 18-06-2012 20:51:19

Bueno en delphi xe existen varias funciones para realizar lo que requieres...

Unit: SysUtils.Pas
  • SameStr
  • SameText
  • CompareStr
  • CompareText
  • AnsiCompareStr
  • AnsiCompareText
  • CompareMem

Cada una con sus características.

En la unit StrUtils.Pas, existen mas funciones la cosa sería buscar...

Saludos cordiales


Saludos

Jere_84 18-06-2012 21:42:38

Cita:

Empezado por cloayza (Mensaje 435410)
Bueno en delphi xe existen varias funciones para realizar lo que requieres...

Unit: SysUtils.Pas
  • SameStr
  • SameText
  • CompareStr
  • CompareText
  • AnsiCompareStr
  • AnsiCompareText
  • CompareMem

Cada una con sus características.

En la unit StrUtils.Pas, existen mas funciones la cosa sería buscar...

Saludos cordiales


Saludos

Muchas Gracias, me quede con: SameText

Slds.


La franja horaria es GMT +2. Ahora son las 18:45:31.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi