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 05-03-2010
diego007 diego007 is offline
Miembro
 
Registrado: nov 2009
Posts: 26
Poder: 0
diego007 Va por buen camino
Extraer palabras de un texto

Hola amigos, e buscado en internet y no encuentro mucho sobre este tema, lo que necesito es una funcion que extraiga todas las URLs de un texto (txt), osea, seria las palabras que inicien con "h tt p://", para esto creo que es necesario expresiones regulares, pero no tengo instalado ningun componente de este tipo
Si algien tiene alguna idea de como hacerlo, le agrdesco mucho (y si fuera posible sin ningun componente extra, le agradecere mucho mas )

Salu2
Responder Con Cita
  #2  
Antiguo 05-03-2010
BrunoBsso BrunoBsso is offline
Miembro
 
Registrado: nov 2009
Ubicación: Berisso, Buenos Aires, Argentina
Posts: 239
Poder: 15
BrunoBsso Va por buen camino
Hola.
Mirá, esta solución la acabo de "crear" (entre comillas porque seguro ya existe) y no se si será la más eficiente del mundo, seguro hay otra mucho mas eficiente. Pero a mí me funcionó y en definitiva eso es lo que cuenta.
Uso un TEdit para el texto, vos usá lo que necesites amoldándolo al código.
Basta de preámbulos, te paso el código que hice:
Código Delphi [-]
function EmpiezaHTTP(T:String; Indice:Integer):Boolean;
{DEVUELVE TRUE SI LA CADENA ENVIADA EMPIEZA CON HTTP}
begin
  Result:=False;
  if (LowerCase(T[Indice])='h') then
    if (LowerCase(T[Indice+1])='t') then
      if (LowerCase(T[Indice+2])='t') then
        if (LowerCase(T[Indice+3])='p') then
          if (LowerCase(T[Indice+4])=':') then
            if (LowerCase(T[Indice+5])='/') then
              if (LowerCase(T[Indice+6])='/') then
                Result:=True;
end;

procedure StrListToMemo(var Memo:TMemo; StrList:TStringList);
{ESTE PROC ALMACENA EL CONTENIDO DE UN TStringList EN UN TMemo}
var
  I:Integer;
begin
  for I := 0 to StrList.Count - 1 do
    Memo.Lines.Append(StrList.Strings[i]);
end;

procedure TForm1.Button1Click(Sender: TObject);
{LO HAGO CON UN TEdit PARA SIMPLIFICARLO, VOS DESPUÉS ACOMODALO A TU GUSTO}
{GUARDO TODAS LAS URLs EN UN TMemo}
var
  ListaURLs:TStringList; //Acá vamos a guardar todas las URLs que encontremos
  StrAuxiliar:String; //Acá almacenamos el string que sería una URL
  I:Integer;
begin
  ListaURLs:=TStringList.Create;
  I:=1;
  while (I<=Length(Edit1.Text)) do begin
    StrAuxiliar:='';
    if (EmpiezaHTTP(Edit1.Text,I)) then begin
      CantMovimientos:=0;
      while (Edit1.Text[i]<>' ') do begin //En la condición, el espacio en blanco es el final del string para la URL
        StrAuxiliar:=StrAuxiliar+Edit1.Text[i];
        I:=I+1;
      end;
      ListaURLs.Append(StrAuxiliar);
    end;
    I:=I+1;
  end;
  StrListToMemo(Memo1,ListaURLs);
end;

Y así como funciona:


Espero que te sea útil, que te de la solución que necesitás.
Si alguien tiene una mejor, o una función que haga esto mismo, que la escriba así yo también aprendo
Saludos!

Última edición por BrunoBsso fecha: 05-03-2010 a las 07:34:56. Razón: Puse una imagen
Responder Con Cita
  #3  
Antiguo 05-03-2010
Avatar de DriverOp
DriverOp DriverOp is offline
Miembro
 
Registrado: ago 2007
Posts: 93
Poder: 17
DriverOp Va por buen camino
Tengo una unidad para expresiones regulares llamada TRegExpr hechas por un ruso (Andrey V. Sorokin), es la única clase que encontré en su tipo. Funciona bien pero para textos grandes es terriblemente lento.
Responder Con Cita
  #4  
Antiguo 05-03-2010
BrunoBsso BrunoBsso is offline
Miembro
 
Registrado: nov 2009
Ubicación: Berisso, Buenos Aires, Argentina
Posts: 239
Poder: 15
BrunoBsso Va por buen camino
Tambien se me ocurre que con un Pos podrías verificar si tiene un http. Si Pos te da -1, entonces no tiene http el string que le pasaste.
Ni ganas de hacerlo ahora, pero después me voy a fijar.
Saludos!
Responder Con Cita
  #5  
Antiguo 05-03-2010
diego007 diego007 is offline
Miembro
 
Registrado: nov 2009
Posts: 26
Poder: 0
diego007 Va por buen camino
Gracias por su ayuda

Hola Bruno, muchas gracias por tu ayuda, el codigo si trabaja bien, pero solo con textos pequeños, ya con textos grandes se demora una eternida
e leido un poco sobre la funcion Post vi que era para encontrar palabras, aqui un ejemplo:
Código PHP:
var string;
    
integer;
s:='DELPHI PROGRAMMING';
i:=Pos('HI PR',s); 
mi pregunta es como se podria hacer para que cuando la encuentre, copie toda la URL?
Responder Con Cita
  #6  
Antiguo 05-03-2010
BrunoBsso BrunoBsso is offline
Miembro
 
Registrado: nov 2009
Ubicación: Berisso, Buenos Aires, Argentina
Posts: 239
Poder: 15
BrunoBsso Va por buen camino
Hola Diego.
La función Pos te devuelve el índice donde empieza el sustring que estás buscando.
Supongamos que en "DELPHI PROGRAMMING" estás buscando HI PR.
Pos te va a devolver 5. Lo único que te faltaría sería revisar si desde I=5 hasta I+4 el texto = 'HI PR'.
Código Delphi [-]
S,Aux:String;
I,P:Integer;
Es_HI_PR:boolean;
P:=Pos('HI PR', s);
for I:=P to P+4
  Aux:=Aux+S[i];
Es_HI_PR:=Aux='HI PR';
Eso es lo que te decía anoche después de haber hecho todo el código anterior, pero me dolía la cabeza como para ponerme a teclear.
Creo que con eso funcionaría.
Saludos!
Responder Con Cita
  #7  
Antiguo 05-03-2010
BrunoBsso BrunoBsso is offline
Miembro
 
Registrado: nov 2009
Ubicación: Berisso, Buenos Aires, Argentina
Posts: 239
Poder: 15
BrunoBsso Va por buen camino
Lightbulb Listo.

No me gustó la respuesta que te di, no tiene explicación.
Así que te prepare una aplicación que usa 2 TMemo: 1 con strings que tengan o no URLs y otro que va guardando cada una de las URLs del primero (cada URL en cada línea, y si la línea tiene más de una URL también la almacena).
Es demasiado largo para ponerlo acá, así que te paso el proyecto.
Saludos!
Archivos Adjuntos
Tipo de Archivo: zip URLs.zip (23,9 KB, 68 visitas)
Responder Con Cita
  #8  
Antiguo 06-03-2010
BrunoBsso BrunoBsso is offline
Miembro
 
Registrado: nov 2009
Ubicación: Berisso, Buenos Aires, Argentina
Posts: 239
Poder: 15
BrunoBsso Va por buen camino
Bueno a ver mostro si decís si te sirvió o no... yo ya estoy pensando en otra forma de hacerlo separando en palabras toda la línea.
Necesito que me digas si con eso basta o no te sirve.
Ya 3 personas bajaron el archivo y seguramente vos sos uno.
Dame una señal de vida así dejo de diagramar otra solución ¿dale?
Responder Con Cita
  #9  
Antiguo 06-03-2010
diego007 diego007 is offline
Miembro
 
Registrado: nov 2009
Posts: 26
Poder: 0
diego007 Va por buen camino
Esta fue

Hola Bruno, gracias por tu ayuda, disculpa por no contestarte antes (El viernes es uno de los peores dias para tratar de trabajar ) en este momento lo estoy integrando el codigo a mi programa y trabaja super bien, es muy rapido. esta era la solucion que busque desde mucho tiempo atras, de nuevo gracias

Salu2
Responder Con Cita
  #10  
Antiguo 06-03-2010
BrunoBsso BrunoBsso is offline
Miembro
 
Registrado: nov 2009
Ubicación: Berisso, Buenos Aires, Argentina
Posts: 239
Poder: 15
BrunoBsso Va por buen camino
Buenísimo, mejor.
La otra que ya terminé de hacer es mas lenta pero más simple.
Al fin puedo dejar de teclear jajaja
Saludos!
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
leer palabras de ficheros de texto alba13 OOP 10 21-10-2007 16:15:15
Leer varios archivos de texto y extraer solo 2 lineas de ese texto mp3968 Internet 1 17-05-2007 20:24:09
Extraer el texto de un archivo UTF-8 ixMike Varios 0 10-10-2006 19:31:45
voz a texto, sacar palabras de audio sakuragi Varios 2 28-07-2006 19:35:31
Cambiar texto o palabras de un archivo dfm HombreSigma OOP 3 29-07-2003 23:50:54


La franja horaria es GMT +2. Ahora son las 21:24:49.


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