Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Varios
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 04-05-2014
Mantixd Mantixd is offline
Miembro
NULL
 
Registrado: dic 2013
Posts: 17
Poder: 0
Mantixd Va por buen camino
Comparar 2 memos

Buenas mi duda es que quisiera saber como puedo comparar el texto de 2 memos mandar a 1 tercer memo el texto diferente por ejemplo si tengo en el memo1

Código:
ESTOY EN CLUBDELPHI
y en el memo 2 tengo

Código:
ESTOY EN CLUBDELPHI HACE POCO
que al presionar un boton compare esos 2 memos y mande a un 3er memo el texto diferente que vendria siendo

Código:
HACE POCO
Tengo algo como esto pero no creo estar bien porque obviamente no me envia buenos resultados que digamos


Código Delphi [-]
    for j := 0 to SL.Count - 1 do
       for g := 0 to SL.Count - 1 do


            if (Memo1.Lines[j] = Memo2.Lines[g] ) then
            Memo3.Lines.Add(Memo2.Lines[j]);
Responder Con Cita
  #2  
Antiguo 04-05-2014
Avatar de nlsgarcia
[nlsgarcia] nlsgarcia is offline
Miembro Premium
 
Registrado: feb 2007
Ubicación: Caracas, Venezuela
Posts: 2.206
Poder: 21
nlsgarcia Tiene un aura espectacularnlsgarcia Tiene un aura espectacular
Mantixd,

Cita:
Empezado por Mantixd
...como puedo comparar el texto de 2 memos y mandar a 1 tercer memo el texto diferente...
Revisa este código:
Código Delphi [-]
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;

type
  TForm1 = class(TForm)
    Memo1: TMemo;
    Memo2: TMemo;
    Button1: TButton;
    Label1: TLabel;
    Label2: TLabel;
    Memo3: TMemo;
    Label3: TLabel;
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
var
   i : Integer;
   L1, L2 : String;
   Pos : Integer;

begin

   Memo3.Clear;

   for i := 0 to Memo1.Lines.Count - 1 do
   begin

       L1 := Memo1.Lines.Strings[i];
       L2 := Memo2.Lines.Strings[i];
       Pos := AnsiPos(L1,L2);

       if (Pos > 0) then
          Delete(L2,Pos,Length(L1));

       Memo3.Lines.Add(TrimLeft(L2));

   end;

end;

end.
El código anterior en Delphi 7 bajo Windows 7 Professional x32, compara línea a línea el texto de TMemo1 con TMemo2 y guarda en TMemo3 el diferencial de TMemo2 menos TMemo1, como se muestra en la imagen:



Espero sea útil

Nelson.
Responder Con Cita
  #3  
Antiguo 04-05-2014
Mantixd Mantixd is offline
Miembro
NULL
 
Registrado: dic 2013
Posts: 17
Poder: 0
Mantixd Va por buen camino
Muchisimas gracias por tu respuesta y si es lo que estoy buscando pero tal vez me falto ser mas especifico o alomejor no entendi bien el codigo, quisiera que leyera los datos de ambos memos pero que no importe como esten ordenados osea


Código:
        
         Memo1                                             Memo2                                     Memo3
                     
ESTOY EN CLUBDELPHI                        HOLA COMO ESTAS                                             BIEN
HOLA COMO ESTAS BIEN                     HACE POCO ESTOY EN CLUBDELPHI                             HACE POCO
No se si me este dando a entender osea que no necesite estar igual el texto en ambos memos que encuentre las palabras sin importar la pocision donde esten
Responder Con Cita
  #4  
Antiguo 04-05-2014
Avatar de nlsgarcia
[nlsgarcia] nlsgarcia is offline
Miembro Premium
 
Registrado: feb 2007
Ubicación: Caracas, Venezuela
Posts: 2.206
Poder: 21
nlsgarcia Tiene un aura espectacularnlsgarcia Tiene un aura espectacular
Mantixd,

Cita:
Empezado por Mantixd
...quisiera que leyera los datos de ambos memos pero que no importe como estén ordenados...
Pregunto:

1- ¿Cual es la finalidad de este trabajo? , la pregunta se refiere a si es un trabajo de universidad (Que universidad, Que cátedra, Que país) o de otro tipo.

2- ¿Que pasa si una línea de Memo1 difiere con más de una línea de Memo2?

3- ¿Puede poner un ejemplo más completo de la salida requerida con todos los casos posibles?.

Espero sea útil

Nelson.
Responder Con Cita
  #5  
Antiguo 04-05-2014
Mantixd Mantixd is offline
Miembro
NULL
 
Registrado: dic 2013
Posts: 17
Poder: 0
Mantixd Va por buen camino
Es una idea que se me ocurrio jeje

Soy de Mexico estudio en la Universidad Autonoma de Sinaloa (UAS) en la carrera de Ing. de Software pero lo hago como practica ya que no se mucho de delphi jeje y claro me explicare mejor por ejemplo esto esta en el memo1

Código:
         MEMO1                            
    Memo1: TMemo;             
    Memo2: TMemo;             
    Button1: TButton;           
    Label1: TLabel;               
    Label2: TLabel;                
    Memo3: TMemo;
    Label3: TLabel;
En el memo2 tengo casi todos los mismos datos pero con espacios (para que no esten iguales)

Código:
        
         MEMO2
     Memo1: TMemo;
             
    Memo2: TMemo;             
    Button1: TButton;
           
    Label1: TLabel;

y al presionar el boton esto deberia de ocurrir en el memo3

Código:
           MEMO3
    Label2: TLabel;                
    Memo3: TMemo;
    Label3: TLabel;
ya que son los datos diferentes. no se si me habre dado mas a entender
Responder Con Cita
  #6  
Antiguo 04-05-2014
Avatar de nlsgarcia
[nlsgarcia] nlsgarcia is offline
Miembro Premium
 
Registrado: feb 2007
Ubicación: Caracas, Venezuela
Posts: 2.206
Poder: 21
nlsgarcia Tiene un aura espectacularnlsgarcia Tiene un aura espectacular
Mantixd,

Cita:
Empezado por Mantixd
...me explicare mejor por ejemplo (Msg #5)...


Pregunto: ¿Quieres colocar en Memo3 solamente las líneas que tenga Memo1 y no estén en Memo2?, eso difiere de lo expresado en el Msg #1.

Espero sea útil

Nelson.
Responder Con Cita
  #7  
Antiguo 05-05-2014
Mantixd Mantixd is offline
Miembro
NULL
 
Registrado: dic 2013
Posts: 17
Poder: 0
Mantixd Va por buen camino
Si tienes toda la razon supongo que tengo un gran problema al darme a explicar es exactamente asi como tu preguntaste

Cita:
Pregunto: ¿Quieres colocar en Memo3 solamente las líneas que tenga Memo1 y no estén en Memo2?, eso difiere de lo expresado en el Msg #1.
eso mismo quiero hacer. si una linea esta en memo 1 pero en memo2 NO ESTE, entonces aparezca en el memo3 pero sin importar si tiene espacios o esta en otra pocision del memo que la busque y la compare.


OSEA AMBOS MEMOS TENDRAN LOS MISMOS DATOS PERO REVUELTOS Y SOLO HABRA UN DATO EN EL MEMO1 QUE SERA DIFERENTE Y ESE APARECERA EN EL MEMO3

espero haberme dado a entender mejor un saludo nlsgarcia muchas gracias!
Responder Con Cita
  #8  
Antiguo 05-05-2014
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 36
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
Cita:
Empezado por Mantixd Ver Mensaje
..., quisiera que leyera los datos de ambos memos pero que no importe como esten ordenados osea
Código:
        
Memo1                       Memo2                                     Memo3
                     
ESTOY EN CLUBDELPHI         HOLA COMO ESTAS                           BIEN
HOLA COMO ESTAS BIEN        HACE POCO ESTOY EN CLUBDELPHI             HACE POCO
No se si me este dando a entender osea que no necesite estar igual el texto en ambos memos que encuentre las palabras sin importar la pocision donde esten
Hola.
Código Delphi [-]
procedure TForm1.btnPasarClick(Sender: TObject);
var
  i: Integer;
  TS1,TS2: TStrings;
begin
  Memo3.Clear;
  TS1:= TStringList.Create;
  TS2:= TStringList.Create;
  try
    ExtractStrings([' ',',',';','.'],[],PChar(Memo1.Text),TS1);
    ExtractStrings([' ',',',';','.'],[],PChar(Memo2.Text),TS2);
    // Palabras que existen en Memo1 y en Memo2 no
    for i:= 0 to TS1.Count-1 do
      if TS2.IndexOf(TS1[i])= -1 then
        Memo3.Lines.Add(TS1[i]);
    // Palabras que existen en Memo2 y en Memo1 no
    for i:= 0 to TS2.Count-1 do
      if TS1.IndexOf(TS2[i]) = -1 then
        Memo3.Lines.Add(TS2[i]);
  finally
    TS1.Free;
    TS2.Free;
  end;
end;

Resultado:


Saludos
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....
Responder Con Cita
  #9  
Antiguo 05-05-2014
Mantixd Mantixd is offline
Miembro
NULL
 
Registrado: dic 2013
Posts: 17
Poder: 0
Mantixd Va por buen camino
Muchisimas Gracias ecfisa tu codigo me dio exactamente lo que estaba buscando me alegra mucho que sean tan amables con los nuevos espero poder aprender mucho de uds para despues tmb poder ayudar a los demas muchas gracias ECFISA Y NLSGARCIA!
Responder Con Cita
  #10  
Antiguo 05-05-2014
Avatar de nlsgarcia
[nlsgarcia] nlsgarcia is offline
Miembro Premium
 
Registrado: feb 2007
Ubicación: Caracas, Venezuela
Posts: 2.206
Poder: 21
nlsgarcia Tiene un aura espectacularnlsgarcia Tiene un aura espectacular
Mantixd,

Cita:
Empezado por nlsgarcia
Pregunto: ¿Quieres colocar en Memo3 solamente las líneas que tenga Memo1 y no estén en Memo2?, eso difiere de lo expresado en el Msg #1.
Cita:
Empezado por Mantixd
...es exactamente así como tu preguntaste...SOLO HABRA UN DATO EN EL MEMO1 QUE SERA DIFERENTE Y ESE APARECERA EN EL MEMO3...


Revisa este código:
Código Delphi [-]
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;

type
  TForm1 = class(TForm)
    Memo1: TMemo;
    Memo2: TMemo;
    Button1: TButton;
    Label1: TLabel;
    Label2: TLabel;
    Memo3: TMemo;
    Label3: TLabel;
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
var
   i,j : Integer;
   L1, L2 : String;
   Match : Boolean;

begin

   Memo3.Clear;

   for i := 0 to Memo1.Lines.Count - 1 do
   begin

      Match := False;

      L1 := Trim(Memo1.Lines.Strings[i]);

      for j := 0 to Memo2.Lines.Count - 1 do
      begin

         L2 := Trim(Memo2.Lines.Strings[j]);

         if CompareText(L1,L2) = 0 then
         begin
            Match := True;
            Break;
         end;

      end;

      if not Match then
         Memo3.Lines.Add(L1);

   end;

end;

end.
El código anterior en Delphi 7 bajo Windows 7 Professional x32, coloca en TMemo3 solamente las líneas que tenga TMemo1 y no estén en TMemo2?, como se muestra en la siguiente imagen:



Nota: En el código propuesto se eliminan los espacios en blanco al principio y final de las líneas a comparar, pero no los internos por lo cual puede haber diferencias en las comparaciones por desigualdad de los espacios en blanco de las líneas a comparar.

Espero sea útil

Nelson.

Última edición por nlsgarcia fecha: 05-05-2014 a las 01:29:23.
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Comparar dos memos creus Varios 5 17-11-2006 16:29:47
Memos en Firebird pichi Vignola Varios 1 04-09-2006 17:30:59
Gráficos,Memos con sql Io SQL 2 20-07-2005 19:27:23
Memos davidgaldo Varios 2 27-04-2004 18:48:18
listado con memos superhopi OOP 5 13-05-2003 13:17:37


La franja horaria es GMT +2. Ahora son las 19:31:57.


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
Copyright 1996-2007 Club Delphi