Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   Eliminar, actualizar e insertar linea en un memo (https://www.clubdelphi.com/foros/showthread.php?t=42197)

gulder 06-04-2007 20:04:09

Eliminar, actualizar e insertar linea en un memo
 
hola foro como andan yo por aqui con un pequeño proble con un memo lo que pasa es que tengo en memo un texto grande y necesito buscar en ese texto una palabra y despues donde este esa palabra tengo que eliminar esa linea o insertar o actualizar cada vez que se repita dicha palabra que me recomiendan por que no he podido hacer nada grasias de antemano gulder.:confused:

roman 06-04-2007 20:26:14

Las líneas de un memo (memo.lines) son de tipo TStrings, así que puedes usar los métodos Delete, Insert, etc. de esa clase.

// Saludos

gulder 06-04-2007 20:48:35

grasias roman
 
grasias roman por contestar tan pronto yo entiendo lo que usted dice, lo que pasa es como hago para encontrar la palabra y eliminar toda esa linea sin importar de que esa linea tenga algo de mas escrito.

te explico lo que estoy haciendo tengo una aplicacion que me permite crear componentes en tiempo de ejecucion en tonces cuando creo u nuevo componente en un memo registro el nombre del componente y otras propiedades, el problema esta cuando el usuario elimina un componente debe eliminar del memo todo lo que tenga que ver con dicho componente entonces por eso tengo que buscar con el nombre del componente en el memo y eliminar la linea puesto que cuando creo un componente en el memo se inserta lo siguiente, ejemplo creo un boton entonces en el memo asigno

boton.nombre //aqui hay un comentario
boton.text //aqui hay un comentario
boton.letf //aqui hay un comentario
boton.caption //aqui hay un comentario

entonces cuando el usuario elimina el componente boton debe eliminar todas esas lineas del memo.

epero haberme explicado grasias de antemano gulder:confused:

roman 06-04-2007 21:11:10

Para buscar la palabra puedes usar la función Pos aplicada a memo.text, o bien PosEx de la unidad StrUtils si quieres hacer búsquedas secuenciales. En ambos casos, la función te devolverá el índice (basado en 1) de donde empieza la palabra dentro del texto, o 0 si no se encuentra. Este índice lo puedes usar como parámetro al mensaje EM_LINEFROMINDEX para obtener el índice de la línea en el memo.

Ejemplo:

Código Delphi [-]
var
  i, j: integer;

begin
  i := Pos('palabra', Memo1.Text);
  Dec(i); // EM_LINEFROMCHAR usa el índice del caracter, basado en 0

  if i >= 0 then
  begin
    j := Memo1.Perform(EM_LINEFROMCHAR, i, 0);
    Memo1.Lines.Delete(j);
  end;
end;

// Saludos

roman 06-04-2007 21:17:09

Por otra parte, quizá quieras considerar otras opciones para lo que haces. Por ejemplo, en lugar de un archivo de texto plano, podrías usar un archivo INI. En lugar de guardar

Código:

boton.nombre //aqui hay un comentario
boton.text //aqui hay un comentario
boton.letf //aqui hay un comentario
boton.caption //aqui hay un comentario

cuando creas el boton, podrías guardar

Código:

[boton]
nombre = nombre del botón
text = texto del botón
letf = ...
caption = ...

es decir, todo lo relacionado a una componente, en una sección del archivo INI. Delphi cuenta con la clase TIniFile que trivializa el manejo de estos archivos.

// Saludos

ArdiIIa 06-04-2007 21:23:16

Perdona roman por la intromisión:
EM_LINEFROMINDEX, no lo tengo documentado por ningún sitio.
Donde está definido ?
Lo mas parecido que he visto es EM_LINEINDEX

roman 06-04-2007 21:26:30

¡Ah! Tienes razón :), es EM_LINEFROMCHAR no EM_LINEFROMINDEX.

// Saludos

ArdiIIa 06-04-2007 21:31:21

Luego en el wparam, habría que pasarle el valor de la variable I, NO??
es decir
Código Delphi [-]
j := Memo1.Perform(EM_LINEFROMCHAR, I,0);

roman 06-04-2007 21:39:07

Je, je, muy cierto, ya lo he corregido en el original (ambos errores). Gracias :)

// Saludos

gulder 09-04-2007 22:47:01

grasias roman, ArdiIIa
 
grasias roman, ArdiIIa y disculpen la demora estoy mirando lo que dicen grasias

gulder 10-04-2007 21:15:51

grasias roman, ArdiIIa
 
grasias roman, ArdiIIa y disculpen la demora estube mirando lo que dicen y funciona de maravillas bueno estoy buscando de como remplazar una palabra del memo dependiendo de un string le agradeceria cualquier comentario grasias de antemano gulder

Chris 17-04-2007 00:26:40

para reemplazar palabras, en la unidad StrUtils existen algunas funciones para esta tarea, la que yo he utilizado es StringReplace de la unidad SysUtils. La utilizas de la siguiente forma

Código Delphi [-]

{ estructura de la función
function StringReplace(const S, OldPattern, NewPattern: string; Flags: TReplaceFlags): string;

TReplaceFlags es un set que puede contener los siguientes dos valores:
rfReplaceAll = reemplaza todas las ocurrencias de OldPattern, si no la colocas en flags, entonces solo reemplazará la primera ocurrencia.

rfIgnoreCase = si la incluyes en "Flags" entonces no distinguirá entre mayúsculas y minúsculas.
}

StringReplace(Memo1.Text,'ReemplazarEsto','ReemplzarConEsto',[rfReplaceAll,rfIgnoreCase]

He nacido para ayudar a la humanidad. Ojala te sirva. bye.

gulder 22-04-2007 00:36:38

gracias D&W
 
gracias D&W me has dejado sorprendido puesto que habia hecho una funcion que hacia lo que me mencionastes he perdido tiempo valioso haciendo algo que delphi ya tenia jejeje :D


La franja horaria es GMT +2. Ahora son las 02:49:19.

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