Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   Busqueda de texto (https://www.clubdelphi.com/foros/showthread.php?t=79661)

Gerson12 27-07-2012 06:10:59

Busqueda de texto
 
1 Archivos Adjunto(s)
hola amigos de clubdelphi vengo a expresarles una duda que tengo ya que la verdad estoy aprendiendo mucho de este foro y gran ayuda de un amigo ,bueno vamos al grano lo que quiero hacer es una aplicación que busque textos que se le pondra en un edit y el texto sera buscado en un memo pero lo que me crea dificultad es que quiero que el edit solo sea una parte del texto a buscar ahora les dejare un ejemplo.

Ejemplo:


como dije quiero que el edit sea solo una parte de texto a seleccionar pero lo malo es quiero que 'file:' y'exe' sean como textos predeterminados de busqueda


Gracias
Espero que me hayan entendido eh echo lo mejor posible para q me entiendan gracias

roman 27-07-2012 06:19:42

No estoy seguro de entender pero vamos a ver. Si quieres buscar lo que está en el edit dentro del memo, sólo tendrías que poner:

Código Delphi [-]
Start := Pos(Edit.Text, Memo.Text);
if Start > 0 then
begin
  Memo.SelStart := Start;
  Memo.SelLength := Length(Edit.Text);
end;

Pero si quieres buscar el texto del edit pero sólo si está con el texto predeterminado, puedes concatenar dicho texto al momento de buscar:


Código Delphi [-]
Start := Pos('file:' + Edit.Text + '.exe', Memo.Text);
if Start > 0 then
begin
  Memo.SelStart := Start + Length('file:');
  Memo.SelLength := Length(Edit.Text);
end;

// Saludos

Gerson12 27-07-2012 06:30:13

Cita:

Empezado por roman (Mensaje 438300)
No estoy seguro de entender pero vamos a ver. Si quieres buscar lo que está en el edit dentro del memo, sólo tendrías que poner:

Código Delphi [-]
Start := Pos(Edit.Text, Memo.Text);
if Start > 0 then
begin
  Memo.SelStart := Start;
  Memo.SelLength := Length(Edit.Text);
end;

Pero si quieres buscar el texto del edit pero sólo si está con el texto predeterminado, puedes concatenar dicho texto al momento de buscar:


Código Delphi [-]
Start := Pos('file:' + Edit.Text + '.exe', Memo.Text);
if Start > 0 then
begin
  Memo.SelStart := Start + Length('file:');
  Memo.SelLength := Length(Edit.Text);
end;

// Saludos

gracias por la respuesta lo provare pero antes disculpame pero otra pregunta
como haria para agregar a otro memo el texto seleccionado por la busqueda

roman 27-07-2012 06:59:02

Podrías agregarlo como una nueva línea:

Código Delphi [-]
OtroMemo.Lines.Add(Edit.Text);

// Saludos

Gerson12 27-07-2012 07:01:34

roman disculpa pero el codigo q me enseñas no me soombrea todo lo q quiero solo me sombre lo q esta en el edit lo q yo quiero es sobrear todo incluyendo file: y .exe

José Luis Garcí 27-07-2012 09:13:33

Gerson12, si lo que vas a introducir es la ruta completa, tendrias que modificar sólo al código que te expuso Román lo siguiente
Código Delphi [-]
Start := Pos('file:' + Edit.Text + '.exe', Memo.Text);
if Start > 0 then
begin
  Memo.SelStart := Start + Length('file:');
  Memo.SelLength := Length('File:'+Edit.Text+'.exe');
end;


En caso contrario te indico que es mejor que crees un tabla en memoria carges los datos y busques con un like en Sql.

Esper te sirva de algo la ayuda

roman 27-07-2012 16:18:20

Cita:

Empezado por Gerson12 (Mensaje 438304)
roman disculpa pero el codigo q me enseñas no me soombrea todo lo q quiero solo me sombre lo q esta en el edit lo q yo quiero es sobrear todo incluyendo file: y .exe

Pues es que así lo tienes en la imagen que pusiste ;) Si quieres sombrear todo entonces así:

Código Delphi [-]
Start := Pos('file:' + Edit.Text + '.exe', Memo.Text);
if Start > 0 then
begin
  Memo.SelStart := Start;
  Memo.SelLength := Length('file:' + Edit.Text + '.exe');
end;

// Saludos

Gerson12 28-07-2012 07:15:41

Cita:

Empezado por roman (Mensaje 438332)
Pues es que así lo tienes en la imagen que pusiste ;) Si quieres sombrear todo entonces así:

Código Delphi [-]
Start := Pos('file:' + Edit.Text + '.exe', Memo.Text);
if Start > 0 then
begin
  Memo.SelStart := Start;
  Memo.SelLength := Length('file:' + Edit.Text + '.exe');
end;

// Saludos

bueno gracias por sus respuesta pero como les dije anterior mente quiero q seleccione todo no solo una parte les dejo mi codigo
Código Delphi [-]
procedure TForm1.Button1Click(Sender: TObject);
var
hotkey:integer;
begin
hotkey:=Pos('https://www'+Edit1.Text+'.com.pe',memo1.Text);
if hotkey>0 then
 Memo1.SelStart := hotkey;
  Memo1.SelLength := Length('https://www'+Edit1.Text+'.com.pe');
  Memo1.SetFocus;
end;
end.
else
begin
  ShowMessage ('no se encontro nada');

ecfisa 28-07-2012 08:43:39

Hola Gerson12.

A ver si entendí lo que buscas...

Supongamos que en Edit tenemos el texto:
Cita:

Un_Nombre_De_Pagina
En el Memo el siguiente texto:
Cita:

...
bla, bla, bla ...
bla, bla, ... https://www.Un_Nombre_De_Pagina.com.pe , bla, ..., etc
bla,bla,bla
...
Y queres que quede seleccionada la cadena "https://www.Un_Nombre_De_Pagina.com.pe".

Si no me equivoque, creo que podrías hacer:
Código Delphi [-]
procedure TForm1.Button1Click(Sender: TObject);
var
  pd, ph: Integer;
begin
  pd:= Pos('https://www.' + Edit1.Text + '.com.pe', Memo1.Text);
  if pd > 0 then
  begin
    ph:= pd;
    Memo1.SelStart:= ph-1;
    while not(Memo1.Text[ph] in [#13,' ']) and (ph < Length(Memo1.Text)) do
      inc(ph);
    Memo1.SelLength:= ph - pd;
    Memo1.SetFocus;
  end;
end;

Saludos.

Gerson12 28-07-2012 08:50:21

hola gracias por responder pero el problema q tengo es q este mira en la imagen

me selecciona la pagina google y todo pero tambien selecciona otra partes mas eso es lo q yo no quiero
Pd: quiero q esta accion se haga varias veces para busque las paginas y las agrege a un memo

ecfisa 28-07-2012 09:10:50

Hola.

Tenes razón... entonces proba de este modo:

Código Delphi [-]
procedure TForm1.Button1Click(Sender: TObject);
var
  p: Integer;
begin
  p:= Pos('https://www.' + Edit1.Text + '.com.pe', Memo1.Text);
  if p > 0 then
  begin
    Memo1.SelStart:= p - 1;
    Memo1.SelLength:= Length('https://www.' + Edit1.Text + '.com.pe');
    Memo1.SetFocus;
  end;
end;
Pero es claro que a menos que utilices variables en su lugar, siempre estarás limitado a buscar cadenas con el contenido 'https://www.' y '.com.pe'.

Saludos.

Gerson12 28-07-2012 15:18:21

gracias eficsa me salvastes era y disculpa me pudrieses decir como puedo hacer para q no solo seleccione a 1 sino a todos los textos buscados en este caso https.//www.google.com.pe en este caso pondre y paginas iguales a https.//www.google.com.pe y quiero q me seleccione todas y esas paginas me las agrege a un memo si no es mucha molesta me seria de mucha ayuda tu opinion gracias
Pd: a pero estoy usando variables en el codigo o a q te refieres con tu recomendacion:
Cita:

Pero es claro que a menos que utilices variables en su lugar, siempre estarás limitado a buscar cadenas con el contenido 'https://www.' y '.com.pe'.

ecfisa 28-07-2012 17:51:16

Hola Gerson12.

Cita:

Pd: a pero estoy usando variables en el codigo o a q te refieres con tu recomendacion:
Un ejemplo:
Código Delphi [-]
procedure TForm1.SeleccionarTexto(const Prefijo, Texto, Sufijo: string);
var
  p: Integer;
begin
  p:= Pos(Prefijo + Texto + Sufijo, Memo1.Text);
  if p > 0 then
  begin
    Memo1.SelStart:= p - 1;
    Memo1.SelLength:= Length(Prefijo + Texto + Sufijo);
    Memo1.SetFocus;
  end;
end;

Llamada:
Código Delphi [-]
procedure TForm1.Button1Click(Sender: TObject);
begin
  SeleccionarTexto('https://www.', Edit1.Text, '.com.pe');
end;
De ese modo si deseas buscar 'www.', '.com', '.com.es', etc, el procedimiento funcionará igual.

Saludos.

------------------------
Edito: Te pongo otro ejemplo que creo, deja mas en claro la flexibilidad de este modo:
Código Delphi [-]
 
  SeleccionarTexto(edPrefijo.Text, edTexto.Text, edSufijo.Text);

Gerson12 29-07-2012 01:41:44

ah te referias a eso gracias creia q era otra cosa ^^ porfa ayudame en esta ultima duda porfa
me pudrieses decir como puedo hacer para q no solo seleccione a 1 sino a todos los textos buscados en este caso https.//www.google.com.pe en este caso pondre y paginas iguales a https.//www.google.com.pe y quiero q me seleccione todas y esas paginas me las agrege a un memo

ecfisa 29-07-2012 02:17:10

Hola Gerson12.

Ya había leido tu inquietud en el mensaje #12, pero no respondí a ese punto, por que al menos a mi, no se me ocurre como realizar múltiples selecciones de texto en un TMemo del modo que venimos tratando.

Tal vez algún otro compañero conozca o se le ocurra la manera de lograrlo y nos eche un poco de luz. Lamento no poder ayudarte en eso...

Saludos. :)

Gerson12 29-07-2012 02:22:36

Cita:

Empezado por ecfisa (Mensaje 438414)
Hola Gerson12.

Ya había leido tu inquietud en el mensaje #12, pero no respondí a ese punto, por que al menos a mi, no se me ocurre como realizar múltiples selecciones de texto en un TMemo del modo que venimos tratando.

Tal vez algún otro compañero conozca o se le ocurra la manera de lograrlo y nos eche un poco de luz. Lamento no poder ayudarte en eso...

Saludos. :)

:( q lastima gracias entonces seguire buscando en internet algo q me pueda ayudar y gracias y disculpa esta es mi ultima inquietud por q pones el -1 en este codigo
Código Delphi [-]
 memo1.SelStart:=f-1;
Gracias ^^#:-)#

ecfisa 29-07-2012 02:58:57

Cita:

por q pones el -1 en este codigo
Hola Gerson12.

Por que la función Pos devuelve la posición del primer caracter de un string comenzando por la posición 1, pero la propiedad SelStart determina el primer caracter seleccionado a partir de la posición 0.

Saludos.

Gerson12 29-07-2012 03:34:34

gracias ^^ les agradesco mucho roman,eficsa,[José Luis Garcí] gracias a todos ^^

Gerson12 31-07-2012 02:30:08

Como Obtener cierto texto de un memo
 
hola amigos quisiera hacerles una pregunta es que segun eh visto por internet se puede obtener un texto de un memo supongamos que en el el texto esta escrito esto:
Código:

gfdg
df
gdf
g
dfgdfgdfg
holaamigosclubdelphi
dsf
sdfsdfsdfsdfsdf
sdfdsholaamigosclubdelphi

como veran yo quiero que el texto que dice'holaamigosclubdelphi' eso me obtenga y salga en otro memo
es posible hacer eso ¿?


Estuve averiguando y segun parece se tiene que usar settext o gettex pero realmente estoy confundido

roman 31-07-2012 02:41:33

Bueno, realmente esto ya lo preguntaste y se te respondió en el otro hilo. Detente a estudiar un poco las respuestas que te dimos para que aprendas a aplicar la técnica en este y otros casos.

//Saludos

Gerson12 31-07-2012 02:51:50

hola Roman pero lo que yo pregunte en el hilo pasado fue para hacer una busqueda o puede ser similar al otro hilo ¿? y q es get text(ya se q es obtener text xD) pero aparte como puedo usar un get text eso mas me interesa saber

roman 31-07-2012 03:05:11

Pues para encontrar el texto que dices tienes precisamente que hacer una búsqyeda, o sea, lo mismo que en el hilo anterior. No veo que relación pueda tener eso con GetText o SetText.

// Saludos

Gerson12 31-07-2012 03:10:15

pero yo quiero q lo buscado se agrege a otro memo diferente

roman 31-07-2012 03:36:01

Eso también lo preguntaste en el otro hilo

Cita:

Empezado por Gerson12 (Mensaje 438302)
gracias por la respuesta lo provare pero antes disculpame pero otra pregunta
como haria para agregar a otro memo el texto seleccionado por la busqueda

y también te contesté

Cita:

Empezado por roman (Mensaje 438303)
Podrías agregarlo como una nueva línea:

Código Delphi [-]
OtroMemo.Lines.Add(Edit.Text);

// Saludos


// Saludos

Gerson12 31-07-2012 03:40:30

ya gracias disculpa por las molestias la verdad recien entendi a q te referias si crees necesario borrar el tema haslo y disculpa :(

Casimiro Noteví 31-07-2012 09:38:52

He combinado ambos hilos porque es lo mismo.

Gerson12, si tienes dudas y no lo tienes claro entonces sigue con el mismo hilo, vuelve a preguntar, explica lo que no entiendes y se continua hasta que lo entiendas y lo resuelvas, pero abrir otro hilo no sirve de nada, salvo para dispersar la información.

Así que no hay problema, si no lo tienes claro, ya sabes, pregunta, que se te responderá. ( Para eso nos pagan :D )

roman 31-07-2012 16:47:34

No lo digas ni en broma, que hay algunos que exigen como si realmente nos pagaran :D

Yo lo que le recomendaría a Gerson, es que trate de entender las respuestas que se le dan en lugar de sólo aplicarlas en su sódigo. De esta manera podrá usarlas en otras partes y no sólo en el problema que origina la pregunta.

// Saludos

Casimiro Noteví 31-07-2012 17:56:23

Cita:

Empezado por roman (Mensaje 438510)
... que trate de entender las respuestas que se le dan en lugar de sólo aplicarlas en su sódigo

por supuesto, así tiene que ser si se quiere aprender ^\||/

roman 31-07-2012 17:59:30

Eso mismo!

// Saludos

ecfisa 31-07-2012 18:58:00

Hola.

En defensa de Gerson12, voy a decir que, aunque no identifico los temas como similares, se preocupo por consultar antes de de abrir un nuevo hilo.

Mensaje privado:
Cita:

FW: consulta si puedo abrir un nuevo tema ?
Cita:
Empezado por Gerson12
hola amigo quisiera hacerte una consulta es que te recuerdas de la consulta q hize anteriormente en el foro pero no se si esta permitido abrir un nuevo tema despues de de haber recibido ayuda de otro tema distinto es q necesito abrir un tema gracias por tu atencion
Discupe por la redundancia
--------------------------------
Hola Gerson12.

No hay ningún problema en que abras un nuevo hilo, es lo correcto si el tema es diferente.

Lo que no corresponde es abrir varios hilos haciendo una consulta similar o la misma. Si es la misma o está intimamente relacionada, lo correcto es ponerla en el hilo ya creado.

Podes crear todos los hilos que desees sobre las diferentes dudas que tengas. Y realmente espero que encuentres la ayuda necesaria en cada uno de ellos.

Saludos.
Indudablemente no me expresé lo suficientemente claro o no supo interpretarme, pero lo cierto es que no hubo desinterés de su parte.

Saludos. :)

roman 31-07-2012 19:04:28

Sí, tienes razón. En realidad, no veo tanto problema en haber abierto un nuevo hilo. Lo que percibí -y es lo que le comento- es que es importante tratar de entender las soluciones que le den pues así el mismo habría notdo que no era necesario.

// Saludos

Casimiro Noteví 31-07-2012 19:26:19

Vaya, queda claro :)

Gerson12 01-08-2012 06:16:12

gracias eficsa ^^ entonces ya vere la manera de encontrar solucion roman gracias roman lo q me dijistes de tu respuesta de comoa gregar lo buscado eso no era lo q tenia en mente pero bueno seguire buscando en san google gracias a todos
y gracias eficsa por tu defensa

roman 01-08-2012 07:12:15

Cita:

Empezado por Gerson12 (Mensaje 438552)
roman lo q me dijistes de tu respuesta de comoa gregar lo buscado eso no era lo q tenia en mente pero bueno seguire buscando

Y ¿por qué no nos dices qué es lo que tenías en mente?

// Saludos

Casimiro Noteví 01-08-2012 09:21:39

Cita:

Empezado por Gerson12 (Mensaje 438552)
gracias eficsa ^^ entonces ya vere la manera de encontrar solucion roman gracias roman lo q me dijistes de tu respuesta de comoa gregar lo buscado eso no era lo q tenia en mente pero bueno seguire buscando en san google gracias a todos
y gracias eficsa por tu defensa

Es que no somos adivinos, por eso hace falta que nos expliques claramente qué es lo que buscas.

Y en cuanto a la defensa... no veo que te hayan atacado ;)

ecfisa 01-08-2012 16:11:09

Hola.

Bueno parece que en este hilo me la paso aclarando... :D

Cuando usé la estereotipada y tal vez poco acertada frase : "En defensa de ..." mi intención fue poner de manifiesto el interés de Gerson12 por observar las normas, pero bajo ningún punto de vista por que hubiera visto un "ataque" hacia él.

Ya clarificado el punto, sólo nos queda esperar a que Gerson12 nos explique lo más detalladamente posible que es lo que en realidad desea hacer..

Un justificado saludo.:)

Casimiro Noteví 01-08-2012 16:26:42

Otra aclaración: :D
Sí, te había entendido :)

roman 01-08-2012 16:57:59

Sí, yo también te había entendido. Y sí, en este hilo hay más aclaraciones que cosas que aclarar. :D

// Saludos

Gerson12 02-08-2012 05:13:26

creo que me veo como un tonto :(

Tratare de explicarme lo mejor posible
lo q quiero hacer
es una aplicaccion q obtenga texto de un memo y ese texto obtenido lo agregue a un listbox
les dare un ejemplo
Cita:

supongamos q este texto esta en el memo1:
petronilarodolfopetronilarodolfopetronilarodolfo
petronilarodolfopetronilarodolfopetronilarodolfo
petronilarodolfopetronilarodolfopetronilarodolfo
petronilarodolfopetronilarodolfopetronilarodolfo
petronilarodolfopetronilahttp://www.remusica.bizrodolfopetronilarodolfodsfsdfsdf
dpetronilarodolfo
efsdfdspetronilhttp://www.otraweb1.bizarodolfopetronilarodolfo
dsfsdfsdfsdf
sdsf
ds
f
dsfdsfdsfhttp://www.otraweb2.biz
ahora que al presionar el boton1 me agregue los textos q estan dentro es este parametro 'http://'( agregar texto que estee dentro de estos dos )'.biz':
espero q esta ves me hayan entendido y si cumpen si pregunto demasiado =( y roman gracias por tu consejo me guie de una respuesta para otra cosa pero la verdad que como dije antes se poco pero me gustaria aprender mas viendo sus respuesta de ayuda gracias espero que esta ves me entiendan si puedo mas tarde pongo una imagen ya q no tengo delphi ahora .
PD:destino a donde se agregaran los textos extraidos seran un listobox.
Chau!

ecfisa 02-08-2012 09:26:01

Hola Gerson12.

Ahora creo haber entendido lo que buscas... Es copiar desde un TMemo hacia un TListBox, todos aquellos términos que comiencen en una cadena inicial A y otra final B incluyendo los caracteres que existan en el medio sin importar cuales sea.

Entonces podrías hacer:
Código Delphi [-]
...
uses StrUtils;

procedure Cargar(aMemo: TMemo; const Sufijo, Prefijo: string; TS: TStrings);
var
  p1, p2: Integer;
begin
  p2:=1;
  repeat
    p1:= PosEx(Sufijo, aMemo.Text, p2);
    p2:= PosEx(Prefijo, aMemo.Text, p1+1);
    if p1 <> 0 then
      TS.Add(Copy(aMemo.Text, p1, p2-p1 + Length(Prefijo)));
  until (p1 = 0)or(p1 > p2);
end;

Llamada de ejemplo:
Código Delphi [-]
procedure TForm1.Button1Click(Sender: TObject);
begin
   Cargar(Memo1, 'http://www.', '.biz',  ListBox1.Items);
end;
Tomando como ejemplo el téxto de tu mensaje anterior, en ListBox1 obtendríamos:
Cita:

http://www.remusica.biz
http://www.otraweb1.biz
http://www.otraweb2.biz
Saludos. :)


La franja horaria es GMT +2. Ahora son las 22:55:18.

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