Club Delphi  
    Paypal   FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Varios
Registrarse FAQ Miembros Calendario Guía de estilo Buscar Temas de Hoy Marcar Foros Como Leídos

Coloboración Paypal con ClubDelphi

 
 
Herramientas Buscar en Tema Desplegado
  #8  
Antiguo 04-10-2010
rrf rrf is offline
Miembro
 
Registrado: ago 2003
Ubicación: S/C Tenerife, España
Posts: 454
Poder: 23
rrf Va por buen camino
Smile

Hola de nuevo.

Aquí está la función y la forma de llamarla. Resuelve todos los problemas que planteaba cuando empecé este hilo.

La función reemplaza las apariciones de un nombre de constante en el código de un programa Delphi.

No confunde los nombres "acerco52" con "co5".

Si el nombre de la constante aparece varias veces en una misma línea, actúa con cada aparición de forma independiente, por lo que se evita el error comentado en el párrafo anterior.

En el ejemplo se recorre un memo en el cual previamente se habría cargado el código de 'archivo.pas'.

Código Delphi [-]
procedure TForm1.Button3Click(Sender: TObject);
var
  cc : integer ;
  aa, bb, ff : string ;
begin
        // Reemplazar en un memo
        //-----------------------

  Memo1.Lines.LoadFromFile( 'archivo.pas');

  for cc := 0 to Memo1.Lines.Count -1 do
  begin
    bb := LowerCase ( Memo1.Lines [cc] ) ;            // Línea del memo
    aa := LowerCase ( 'Texto a buscar' ) ;           // Texto a buscar
    ff := 'texto con el que se reemplaza' ;        // Texto para sustituir

    if 0< pos ( aa, bb )
    then
      begin
        Memo1.Lines [cc] := Cambia_en_linea( Memo1.Lines [cc], aa, ff, cc) ;
      end;
  end;

end;


function TForm1.Cambia_en_linea ( bb, aa, ff : string; nn: integer ): string;
var
  cc : integer ;
  ab, aa1, bb0, bb1 : string ;
  antes, despues : boolean ;
begin
       // Reemplaza en la línea del memo los nombres de las constantes
       //---------------------------------------------------------------

  aa1 := LowerCase( aa ) ;
  bb0 := bb ;
  bb1 := bb + ' ' ;
  cc := pos ( aa1, Lowercase ( bb1 ) ) ;

  while cc > 0
  do
  begin
    if  cc=1     // al inicio de la línea
    then
      begin
        ab := copy (bb1, cc + Length ( aa1 ), 1 ) ;
        if ab[1] in  ['a'..'z', 'A'..'Z', '0'..'9','_' ]
          then bb0 := StringReplace( bb0, aa1, 'nonotnonot', [rfIgnoreCase])
          else bb0 := StringReplace( bb0, aa1, 'siyessiyes', [rfIgnoreCase]) ;
      end

    else if cc > 1
    then         // a la mitad o final de la línea
      begin
        ab := copy (bb1, cc -1, 1 ) ;
        if ab[1] in  ['a'..'z', 'A'..'Z', '0'..'9','_' ]
          then antes := false
          else antes := true ;

        ab := copy (bb1, cc + Length ( aa1 ), 1 ) ;
        if ab[1] in  ['a'..'z', 'A'..'Z', '0'..'9','_' ]
          then despues := false
          else despues := true ;

        if ( antes ) and ( despues )
          then bb0 := StringReplace( bb0, aa1, 'siyessiyes', [rfIgnoreCase])
          else bb0 := StringReplace( bb0, aa1, 'nonotnonot', [rfIgnoreCase]) ;
      end;

    cc := pos ( aa1, Lowercase ( bb0 ) ) ;
    if cc > 0
      then bb1 := bb0 + ' ' ;
  end;

  bb0 := StringReplace( bb0, 'siyessiyes', ff,  [rfreplaceall, rfIgnoreCase]) ;
  bb0 := StringReplace( bb0, 'nonotnonot', aa1, [rfreplaceall, rfIgnoreCase]) ;

  Result := bb0 ;

end;

Lo dejo en el foro por si a alguna persona le puede resultar útil en alguna situación parecida.

Gracias de nuevo a Casimiro y a Reevil. Sin sus sugerencias y explicaciones no creo que lo hubiera podido realizar tan fácil y rapidamente.

Saludos.

Última edición por rrf fecha: 04-10-2010 a las 20:37:59. Razón: mejora en presentación del código
Responder Con Cita
 


Herramientas Buscar en Tema
Buscar en Tema:

Búsqueda Avanzada
Desplegado

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
Sólo para expertos: "Error reading iError.Picture.Data:Out of system resources" sami76 Varios 2 04-10-2007 13:53:31
Particiones en "solo lectura " con cd_live de knoppix Diavlo Linux 1 03-10-2007 04:06:26
Necesito llamar a métodos de clases "hija" desde su clase "padre" Flecha OOP 17 20-04-2007 00:03:53
Reemplazar "," por ":" en un punto flotante DTAR SQL 2 09-05-2006 23:55:07
buscar palabras parecidas (estilo google) - "quiso decir...." ksellas Conexión con bases de datos 10 26-01-2005 00:30:49


La franja horaria es GMT +2. Ahora son las 00:58:34.


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