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 07-04-2014
Mantixd Mantixd is offline
Miembro
NULL
 
Registrado: dic 2013
Posts: 17
Poder: 0
Mantixd Va por buen camino
Comparar Array con datos en Memo

Buenas, lo que pasa es que quiero hacer un tipo Analizador Lexico digamos que en ensamblador, tengo un Arreglo donde tengo los registros y quiero que al escribir codigo fuente en un Memo y presionar un boton buscar me compare los datos del arreglo con los escritos en el Memo y si encuentra algunos me los ponga en un Memo2 o en un RichEdit, soy estudiante y aun estoy aprendiendo y pues disculpen mis horrores espero y me puedan ayudar saludos.

Código Delphi [-]
 meses: array[1..31] of string = ('AX','BX','CX','DX','AH','AL',
                                   'BH','BL','BP','CH','CL','CS',
                                    'CX','DH','DL','DI','DS',
                                    'EAX','EBP','EBX','ECX',
                                      'EDI','EDX','EIP','ES',
                                      'ESIFE','GS','IP','SI','SP','SS');

procedure TForm1.Button1Click(Sender: TObject);
var
  N,x:integer;
  a, sEtiqueta: String;

  Z : Integer;
Texto : string;

  I,J,Long,P,Posic:Integer;
  Reservada,Aux,Linea,Palabra:String;

   begin
       for x := Low(meses) to High(meses) do
   if Memo1.Text=meses[x] then  begin
   RichEdit1.Text:= Memo1.Text;

   end;
         end;
Responder Con Cita
  #2  
Antiguo 07-04-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
Hola Mantixd.

Si no te comprendí mal, sería:
Código Delphi [-]
const
  REGS: array[1..31] of string = (
    ' AX',' BX',' CX',' DX',' AH',' AL',' BH',' BL',' BP',' CH',' CL',' CS',
    ' CX',' DH',' DL',' DI',' DS',' EAX',' EBP',' EBX',' ECX',' EDI',' EDX',
    ' EIP',' ES',' ESIFE',' GS',' IP',' SI',' SP',' SS');

procedure TForm1.Button1Click(Sender: TObject);
var
  i, j: Integer;
begin
  Memo2.Lines.Clear;
  for i:= 0 to Memo1.Lines.Count-1 do
    for j:= Low(REGS) to High(REGS) do
      if AnsiPos(REGS[j], UpperCase(Memo1.Lines[i])) <> 0 then
        Memo2.Lines.Add(REGS[j]+' -> '+Memo1.Lines[i]);
end;
Agregué un espacio detras de cada nombre de registro y segmento declarado en el arreglo constante, por que sólamente serán nombres de registros si estan precedidos de un espacio. Es decir, podrían estar seguidos de una coma (instrucción), punto y coma (comentario), de dos puntos (dirección relativa), ..., pero nunca por otra cosa que un espacio o sería otra cosa que los mnemónicos buscados.

Saludos .)
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....

Última edición por ecfisa fecha: 07-04-2014 a las 23:19:56.
Responder Con Cita
  #3  
Antiguo 07-04-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
...quiero hacer un tipo Analizador Léxico digamos que en ensamblador, tengo un Arreglo donde tengo los registros y quiero que al escribir código fuente en un Memo y presionar un botón buscar me compare los datos del arreglo con los escritos en el Memo...
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;
    ListBox1: TListBox;
    Button1: TButton;
    Label1: TLabel;
    Label2: TLabel;
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

const
  RegAsm : Array[1..30] of string = ('AX','BX','CX','DX','AH','AL',
                                     'BH','BL','BP','CH','CL','CS',
                                     'DH','DL','DI','DS', 'GS', 'IP',
                                     'SI','SP','SS', 'ES',
                                     'EAX','EBP','EBX','ECX',
                                     'EDI','EDX','EIP','ESIFE');

var
  Form1: TForm1;

implementation

{$R *.dfm}

// Selecciona los Registros de Assembler de un TMemo con base en un Arreglo
procedure TForm1.Button1Click(Sender: TObject);
var
   SL: TStringList;
   i, j, k : Integer;
   Token : String;
   AuxStr : String;

begin

   SL := TStringList.Create;

   ListBox1.Clear;

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

      AuxStr := Memo1.Lines[i];

      for j := 1 to Length(AuxStr) do
      begin
         if (AuxStr[j] <> ' ') and (AuxStr[j] <> ',') then
            Token := Token + AuxStr[j]
         else
         begin
            SL.Add(Token);
            Token := EmptyStr;
         end
      end;

      SL.Add(Token);
      Token := EmptyStr;

      for j := 0 to SL.Count - 1 do
         for k := Low(RegAsm) to High(RegAsm) do
            if UpperCase(SL[j]) = UpperCase(RegAsm[k]) then
               ListBox1.Items.Add(UpperCase(RegAsm[k]));

      SL.Clear;

   end;

   SL.Free;

end;

end.
El código anterior, analiza el código fuente de un programa en Assembler como input en un TMemo en base a un arreglo de registros en Assembler y si hay ocurrencias coloca dichos registros en un TListBox, como se muestra en la siguiente imagen:



Espero sea útil

Nelson.

Última edición por nlsgarcia fecha: 07-04-2014 a las 23:49:06.
Responder Con Cita
  #4  
Antiguo 08-04-2014
Mantixd Mantixd is offline
Miembro
NULL
 
Registrado: dic 2013
Posts: 17
Poder: 0
Mantixd Va por buen camino
Gracias!

Muchas gracias por sus respuestas creo que al expresarme no me di a entender muy bien pero fueron de gran ayuda muchisimas gracias nlsgarcia tu codigo era exactamente lo que buscaba muchisimas gracias y ecfisa creo que no me di a entender muy bien por eso una disculpa pero igual muchisimas gracias por responder tan rapido
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 datos array Caral Varios 7 24-12-2015 03:15:28
Comparar Lineas de un Memo con un texto kirios OOP 4 21-03-2012 15:30:47
comparar un campo memo=empty? NSL94 Conexión con bases de datos 7 24-04-2007 19:14:05
Comparar dos bases de datos paty_rlopez Conexión con bases de datos 2 02-09-2006 20:18:46
texto en un MEMO ...encontrar comparar sakuragi OOP 4 27-02-2004 17:24:28


La franja horaria es GMT +2. Ahora son las 06:24:14.


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