• Jueves 14 de Noviembre de 2024, 07:50

Autor Tema:  Eliminar Una Palabra En Un Tmemo  (Leído 3859 veces)

Linspire

  • Miembro MUY activo
  • ***
  • Mensajes: 232
    • Ver Perfil
    • http://www.cedrela.com.mx
Eliminar Una Palabra En Un Tmemo
« en: Viernes 15 de Septiembre de 2006, 22:07 »
0
Hola a todos, estoy recorriendo un un Memo con un for para buscar una palabra dentro de el, mas o menos así.  :comp:

AnsiString palabra;

for(i=1;i<=Memo1->Lines-Count;i++)
palabra=Memo1->Lines->Strings;

en este caso la palabra buscada existe en varios renglones y lo quiero hacer es borrarla pero no he podido hacerlo, les agradeceré que me puedan decir como.

Gracias de antemano. :D
[size=109]My Blog de Programación[/i][/b][/size]
´


[size=109]Tan solo quiero pensar que todo es un sueño y que no quiero despertar
porque quiero controlarlo como yo quiera.
[/size]

Todo es posible, lo imposible solo cuesta un poco más. Dan Drown.

Max_D

  • Miembro MUY activo
  • ***
  • Mensajes: 117
    • Ver Perfil
    • http://sitioteca.spaces.live.com/
Re: Eliminar Una Palabra En Un Tmemo
« Respuesta #1 en: Viernes 15 de Septiembre de 2006, 22:31 »
0
En vez de buscarlo por lineas, podias buscarlo en el texto completo, mediante la propiedad Text.

Código: Text
  1. Memo1-&#62;Text
  2.  

Linspire

  • Miembro MUY activo
  • ***
  • Mensajes: 232
    • Ver Perfil
    • http://www.cedrela.com.mx
Re: Eliminar Una Palabra En Un Tmemo
« Respuesta #2 en: Viernes 15 de Septiembre de 2006, 23:23 »
0
Bueno, pues creo que tienes razón pero ese no es el problema, el problema es eliminar la palabra cuando sea encontrada.

Gracias por tu ayuda.
[size=109]My Blog de Programación[/i][/b][/size]
´


[size=109]Tan solo quiero pensar que todo es un sueño y que no quiero despertar
porque quiero controlarlo como yo quiera.
[/size]

Todo es posible, lo imposible solo cuesta un poco más. Dan Drown.

ArKaNtOs

  • Miembro de PLATA
  • *****
  • Mensajes: 1253
  • Nacionalidad: mx
    • Ver Perfil
Re: Eliminar Una Palabra En Un Tmemo
« Respuesta #3 en: Viernes 15 de Septiembre de 2006, 23:25 »
0
yo no se de c++ builder pero no seria mejor que copiaras a un variable el texto que te sirve y omitieras el copiado a la palabra que quieres "eliminar"? es decir que fueses leyendo las palabras y cada una la copiaras a una variable y cuando te encuentres con la palabra que no deseas simplemente no la copies :)

Linspire

  • Miembro MUY activo
  • ***
  • Mensajes: 232
    • Ver Perfil
    • http://www.cedrela.com.mx
Re: Eliminar Una Palabra En Un Tmemo
« Respuesta #4 en: Domingo 17 de Septiembre de 2006, 19:16 »
0
Pues bien amigos, ya pude resolver el asunto pero no al 100%

el código que utilizo es el siguiente

int i;
        AnsiString palabra;
        palabra="</TD>";

        for(i=0;i<=Memo2->Lines->Count;i++)
        {
                if(Memo2->Lines->Strings==palabra)
                {
                        Memo2->Lines->Delete(i);                        
                }                    
                else NULL;
        }

y con esto se borra la linea perfectamente, solo que hay lineas en que la palabra </TD> se encuentra después de un tabulador y en este caso no se puede borrar la línea, simplemente se pasa por alto. Por lo tanto. como borro el tabulador para que quede </TD> al principio y pueda ser borrado cuando se entra al for?

Ya intente con TrimRight() y TrimLeft() pero no pasa nada.

Espero puedan darme alguna solución o alguna idea.

Gracias de antemano.
[size=109]My Blog de Programación[/i][/b][/size]
´


[size=109]Tan solo quiero pensar que todo es un sueño y que no quiero despertar
porque quiero controlarlo como yo quiera.
[/size]

Todo es posible, lo imposible solo cuesta un poco más. Dan Drown.

Max_D

  • Miembro MUY activo
  • ***
  • Mensajes: 117
    • Ver Perfil
    • http://sitioteca.spaces.live.com/
Re: Eliminar Una Palabra En Un Tmemo
« Respuesta #5 en: Domingo 17 de Septiembre de 2006, 23:26 »
0
En la linea :

Citar
if(Memo2->Lines->Strings==palabra)

solo lo va a detectar si coincide la palabra completa. Mi idea es que, como la propiedad Text del Memo almacena todas las lineas concatenadas, se podria buscar las ocurrencias de "palabra" en Text, mediante la funcion "strchr(cs,c)", donde cs y c son *char.

Linspire

  • Miembro MUY activo
  • ***
  • Mensajes: 232
    • Ver Perfil
    • http://www.cedrela.com.mx
Re: Eliminar Una Palabra En Un Tmemo
« Respuesta #6 en: Lunes 18 de Septiembre de 2006, 21:10 »
0
Ok, gracias amigo, dejame intentar como dices.
[size=109]My Blog de Programación[/i][/b][/size]
´


[size=109]Tan solo quiero pensar que todo es un sueño y que no quiero despertar
porque quiero controlarlo como yo quiera.
[/size]

Todo es posible, lo imposible solo cuesta un poco más. Dan Drown.

Linspire

  • Miembro MUY activo
  • ***
  • Mensajes: 232
    • Ver Perfil
    • http://www.cedrela.com.mx
Re: Eliminar Una Palabra En Un Tmemo
« Respuesta #7 en: Lunes 18 de Septiembre de 2006, 22:25 »
0
maldita sea, llevi todo el fin de semana y no he podido hacer lo que quiero asi que me rindo, lo entienden?, me rindo, mejor opté por usar un TRichEdit y de esta forma reemplazo el texto que quiero, solo que hay un pequeño problema, no se como diablos se usa el método ReplaceDialog y no encontré ayuda suficiente en Builder (aparte de que mi inglés no es muy bueno), alguien podría decirme como se hace?

 &lt;_&lt;  :angry:
[size=109]My Blog de Programación[/i][/b][/size]
´


[size=109]Tan solo quiero pensar que todo es un sueño y que no quiero despertar
porque quiero controlarlo como yo quiera.
[/size]

Todo es posible, lo imposible solo cuesta un poco más. Dan Drown.

Max_D

  • Miembro MUY activo
  • ***
  • Mensajes: 117
    • Ver Perfil
    • http://sitioteca.spaces.live.com/
Re: Eliminar Una Palabra En Un Tmemo
« Respuesta #8 en: Martes 19 de Septiembre de 2006, 03:09 »
0
Hay una idea que quizas te pueda orientar, es mucho pseudocodigo pero algo es algo:

Código: Text
  1. int len = 0, x = 0, pos = 0, len_buscada = 0, y;
  2. AnsiString g;
  3. char * aux, * aux2, * buscada;
  4.  
  5. g = Memo1-&#62;Text;
  6. len = g.Length();
  7. aux = g.c_str();
  8. y = len_buscada;
  9.  
  10. while (x &#60; len)  {
  11.  
  12.    if (aux[x] == buscada[pos])  {
  13.        if (y &#62; 1)  {
  14.            y--;
  15.            pos++;
  16.            x++;
  17.        }
  18.        else  {
  19.            for (int i=0; i &#60; x - y; i++)  
  20.                  aux2[i] = aux[i];
  21.        }
  22.    }
  23.    else   {
  24.        y = len_buscada;
  25.    }
  26.    x++;  
  27.  
  28.  

Al final me salio menos pseucodigo del que pensaba, seguro que tiene muchos errores o faltan cosas pero es lo unico que se me ha ocurrido. Creo que en la ayuda de Delphi viene un ejemplo pero no se si viene como borrar las palabras.

Vatoicc

  • Miembro activo
  • **
  • Mensajes: 65
    • Ver Perfil
Re: Eliminar Una Palabra En Un Tmemo
« Respuesta #9 en: Martes 19 de Septiembre de 2006, 20:18 »
0
Citar
el código que utilizo es el siguiente

int i;
AnsiString palabra;
palabra="</TD>";

for(i=0;i<=Memo2->Lines->Count;i++)
{
if(Memo2->Lines->Strings==palabra)
{
Memo2->Lines->Delete(i);
}
else NULL;
}

Creo que el problema que tienes, es por que buscas la correspondencia en toda la linea, y es donde pasa lo que mencionas del tabulador

Si lo que quieres es borrar toda la linea del TMemo donde se encuentre la 'palabra', puedes hacer lo siguiente

Código: Text
  1.  
  2.    AnsiString palabra = &#34;&#60;/TD&#62;&#34;;
  3.    for( int i = 0; i &#60; Memo1-&#62;Lines-&#62;Count; i++ )
  4.       if( Memo1-&#62;Lines-&#62;Strings[i].Pos(palabra) &#62; 0 )
  5.       {
  6.          Memo1-&#62;Lines-&#62;Delete(i);
  7.          i--;
  8.       }
  9.  
  10.  

la funcion Pos de AnsiString te retorna 0 si palabra NO esta en la linea, checa la ayuda de AnsiString.

Y si lo que quieres es solo eliminar 'palabra' de la linea, puedes hacer lo siguiente:

Código: Text
  1.  
  2.    AnsiString palabra = &#34;&#60;/TD&#62;&#34;;
  3.    for( int i = 0; i &#60; Memo1-&#62;Lines-&#62;Count; i++ )
  4.    {
  5.       //Para el caso de que 'palabra' sea la linea completa del TMemo
  6.       if( Memo1-&#62;Lines-&#62;Strings[i] == palabra )
  7.       {
  8.          Memo1-&#62;Lines-&#62;Delete(i);
  9.          i--;
  10.          continue;
  11.       }
  12.       //Para el caso de que 'palabra sea parte de la linea del TMeno'
  13.       if( Memo1-&#62;Lines-&#62;Strings[i].Pos(palabra) &#62; 0 )
  14.       {
  15.          AnsiString Linea = Memo1-&#62;Lines-&#62;Strings[i];
  16.          int inicio = Memo1-&#62;Lines-&#62;Strings[i].Pos(palabra);
  17.          int fin = palabra.Length();
  18.          Memo1-&#62;Lines-&#62;Strings[i] = Linea.Delete(inicio,fin);
  19.       }
  20.    }
  21.  
  22.  

y asi solo borras 'palabra'.
Claro que puedes reducir el codigo del segundo caso, solo puse las otras variables para que se vea mas didactico.

Código: Text
  1.  
  2.    //Para el caso de que 'palabra sea parte de la linea del TMeno'
  3.    if( Memo1-&#62;Lines-&#62;Strings[i].Pos(palabra) &#62; 0 )
  4.       Memo1-&#62;Lines-&#62;Strings[i] = Memo1-&#62;Lines-&#62;Strings.Delete(Memo1-&#62;Lines-&#62;Strings[i].Pos(palabra),palabra.Length());
  5.  
  6.  

Espero que te sirva esto, por que si estas manejando solo texto, no veo por que usar un TRichEdit, pues gastarias recursos si aprobechar todo el componente
La paranoia es una vision mas sutil de la vida

Linspire

  • Miembro MUY activo
  • ***
  • Mensajes: 232
    • Ver Perfil
    • http://www.cedrela.com.mx
Re: Eliminar Una Palabra En Un Tmemo
« Respuesta #10 en: Miércoles 20 de Septiembre de 2006, 03:00 »
0
jeje :P , muchas, muchisimas  :D gracias Vatoicc, era justamente lo que quería y lo que no pude hacer en todo el fin de semana (nunca entedí el uso del maldito .Pos), voy a depurar el código para coomprender paso a paso como funciona. Muchas gracias también a Max_D por su ayuda, aunque sinceramente :(  no entendí mucho sobre el código que publicaste, pero de igual forma me sirve para aprender más.

Jeje, gracias nuevamente, no dudo en que puedo recurrir al foro cuando necesite su ayuda. :comp:

 :P Mil gracias!... :hola:
[size=109]My Blog de Programación[/i][/b][/size]
´


[size=109]Tan solo quiero pensar que todo es un sueño y que no quiero despertar
porque quiero controlarlo como yo quiera.
[/size]

Todo es posible, lo imposible solo cuesta un poco más. Dan Drown.

Linspire

  • Miembro MUY activo
  • ***
  • Mensajes: 232
    • Ver Perfil
    • http://www.cedrela.com.mx
Re: Eliminar Una Palabra En Un Tmemo
« Respuesta #11 en: Viernes 22 de Septiembre de 2006, 19:18 »
0
:rolleyes: Pues después de haber analizado las propuestas y soluciones que me dieron por fin pude crear el código que necesitaba. y que en realidad era la lo que quería en ESTA DISCUSIÓN, por ello publico el código por si a alguien le es útil. :D  

Código: Text
  1.  
  2. AnsiString Linea;
  3.         int i, inicio, fin;
  4.         String car=&#34;&#60;&#34;, car2=&#34;&#62;&#34;;
  5.        
  6.         for(i=0;i&#60;= Memo2-&#62;Lines-&#62;Count;i++)
  7.         {
  8.         Linea = Memo2-&#62;Lines-&#62;Strings[i];
  9.                 while(Linea.Pos(car))
  10.                 {
  11.                 inicio=Linea.Pos(car);
  12.                 fin=Linea.Pos(car2);
  13.                 Memo2-&#62;Lines-&#62;Strings[i] = Linea.Delete(inicio,fin);
  14.                 }
  15.         }
  16.  
  17.  

 :lightsabre: Como ven, elimina todo el texto en un TMemo (en una línea) que se encuentre entre "<" y ">", esto lo hice porque he estado cargando archivos .php y .html en un Memo pero solo necesito el texto y pues con este código puedo quitar todo el código HTML y quedarme solo con el texto. :P

Saludos!.. :comp:  :whistling:
[size=109]My Blog de Programación[/i][/b][/size]
´


[size=109]Tan solo quiero pensar que todo es un sueño y que no quiero despertar
porque quiero controlarlo como yo quiera.
[/size]

Todo es posible, lo imposible solo cuesta un poco más. Dan Drown.