Club Delphi  
    Paypal   FTP   CCD     Buscar   Trucos   Trabajo   Foros

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

Colaboración Paypal con ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 17-08-2006
Avatar de Bicho
[Bicho] Bicho is offline
Miembro Premium
 
Registrado: jul 2003
Ubicación: Inca - Mallorca
Posts: 1.776
Poder: 24
Bicho Va por buen camino
La intención es lo que cuenta no??

Por cierto como va la tienda? cuanto le queda para abrir?? Ya se ha escogido nombre? (Aunque supongo que no se dirá hasta la inauguración no?)

Saludos
Responder Con Cita
  #2  
Antiguo 17-08-2006
Avatar de D-MO
D-MO D-MO is offline
Miembro
 
Registrado: ago 2005
Ubicación: root@debian:/#
Posts: 1.042
Poder: 22
D-MO Va por buen camino
Cita:
Empezado por Bicho
Por cierto como va la tienda? cuanto le queda para abrir?? Ya se ha escogido nombre?
Pues eso mismo he estado pensando días atras ya que no se ha sabido nada al respecto.

Saludos.
Responder Con Cita
  #3  
Antiguo 17-08-2006
Avatar de seoane
[seoane] seoane is offline
Miembro Premium
 
Registrado: feb 2004
Ubicación: A Coruña, España
Posts: 3.717
Poder: 26
seoane Va por buen camino
Encantado de ser útil, aquí estoy para lo que necesites Emilio
Responder Con Cita
  #4  
Antiguo 17-08-2006
Avatar de Emilio
*Emilio* Emilio is offline
Capo
 
Registrado: may 2003
Ubicación: Palma de Mallorca
Posts: 2.639
Poder: 10
Emilio Va por buen camino
Cita:
Empezado por Bicho
La intención es lo que cuenta no??
Por supuesto

Cita:
Empezado por Bicho
Por cierto como va la tienda? cuanto le queda para abrir?? Ya se ha escogido nombre? (Aunque supongo que no se dirá hasta la inauguración no?)
Bueno ya sabes lo que se dice, las cosas de palacio van despacio y encima en época estival como que todavía peor, en principio está previsto abrir entre el 15 de septiembre y 1 de octubre.

Cita:
Empezado por Bicho
Encantado de ser útil, aquí estoy para lo que necesites Emilio
Pues precisamente para el tema de la tienda virtual necesitaba ese coódigo.

Como solicité en su momento ideas para el nombre de la tienda, creo que debo decir cual se ha puesto en el hilo que inicié en la taberna, así que me voy pa la taberna a desvelar el nombrecito y a tomarme una birrita
__________________
Saludos
Emilio
Responder Con Cita
  #5  
Antiguo 17-08-2006
Avatar de dec
dec dec is offline
Moderador
 
Registrado: dic 2004
Ubicación: Alcobendas, Madrid, España
Posts: 13.141
Poder: 36
dec Tiene un aura espectaculardec Tiene un aura espectacular
Hola,

Sin demérito del resto de aportaciones de los compañeros, me gustaría añadir una que he preparado. Creo que en este caso que nos ocupa no nos vendría mal utilizar las conocidas Expresiones regulares, y, para Delphi, existe un componente de nombre TPerlRegExp que nos viene al pelo. Es un componente que utilizan proyectos como SynEdit, de código abierto, gratuito y que va muy bien.

Una vez contemos con el componente TPerlRegExp, que no tendremos ni que instalar para lo que nos ocupa, pienso en utilizar el componente TIdHttp para la descarga del código HTML de las páginas Web que nos interesan. Creo que ya todos sabéis de qué componente estoy hablando, así que paso adelante.

He subido una página Web que he subido a mi espacio en el ClubDelphi para que nos sirva a modo de pruebas. La URL de esta página es esta:

http://dec.clubdelphi.com/temporales...as-regexp.html

No contiene sino el código HTML de una página de estos mismos Foros, a la que he "infiltrado" el "textarea" que habremos de localizar...

A modo de prueba he creado un procedimiento que se encarga de descargar el código HTML de la página susomentada y de localizar los resultados obtenidos de la búsqueda en el código HTML de la expresión regular de marras. Este es el procedimiento que digo:

Código Delphi [-]
uses
  IdHttp, PerlRegEx;

procedure Busqueda(url, expRegular: string;
  var resultados: TStrings);
var
  i: integer;
  http: TIdHTTP;
  regex: TPerlRegEx;
  sRespuesta: TStringStream;
begin
  http := TIdHTTP.Create(nil);
  regex := TPerlRegEx.Create(nil);
  sRespuesta := TStringStream.Create('');
  try
    http.Get(url, sRespuesta);
    regex.RegEx := expRegular;
    regex.Subject := sRespuesta.DataString;
    regex.Options := [preCaseLess, preMultiLine,
                       preSingleLine, preUnGreedy];

    resultados.Clear;
    if regex.Match then
    begin
      // Resultados de la primera coincidencia
      for i := 1 to regex.SubExpressionCount do
        resultados.Add(regex.SubExpressions[i]);
      // Resultados de sucesivas coincidencia
      while regex.MatchAgain do begin
        for i := 1 to regex.SubExpressionCount do
          resultados.Add(regex.SubExpressions[i]);
      end;
    end;

  finally
    http.Free;
    regex.Free;
    sRespuesta.Free;
  end;
end;

Utilizando la magia del componente TPerlRegEx y mis pocos conocimientos de la sintaxis de las Expresiones Regulares, podemos conseguir resultados muy curiosos con el procedimiento anterior. Por ejemplo, vamos a localizar si más el contenido del "textarea" que infiltramos en el código HTML de la página de ejemplo:

Código:
procedure TForm1.btnBuscarClick(Sender: TObject);
const
  expRegular = '<textarea name="algo">(.*)</textarea>';
  sURL= 'http://dec.clubdelphi.com/temporales/pruebas-regexp.html';
var
  resultados: TStrings;
begin
  resultados := TStringList.Create;
  Busqueda(sURL, expRegular, resultados);
  ShowMessage(resultados.Text);
  resultados.Free;
end;
Luego de llamar al procedimiento "Busqueda" dentro de este método de ejemplo que he puesto arriba, en la variable "resultados" tendremos todos correspondientes a la búsqueda llevada a cabo. ¿Cómo? ¿Resultados, en plural? Así es, porque si hubiera más de una "textarea" con las características que buscamos obtendríamos el contenido de todos estos "textarea", como digo, dentro de la variable "resultados".

Ahora entramos un poco en la magia que digo tiene el componente TPerlRegEx y las propias Expresiones Regulares, claro está. En el ejemplo anterior buscábamos un "textarea" cuyo atributo "name" fuera "algo". Con esto ya debería ir bien, es decir, podría servirnos para lo que nos ocupa. Empero, un sencillo cambio en la expresión regular que hemos utilizado antes y podríamos obtener otros resultados, por ejemplo:

Código:
procedure TForm1.btnBuscarClick(Sender: TObject);
const
  expRegular = '<textarea name="(.*)">(.*)</textarea>';
  // ó expRegular = '<textarea name="algo">(.*)</textarea>';
  sURL= 'http://dec.clubdelphi.com/temporales/pruebas-regexp.html';
var
  resultados: TStrings;
begin
  resultados := TStringList.Create;
  Busqueda(sURL, expRegular, resultados);
  ShowMessage(resultados.Text);
  resultados.Free;
end;
Con el anterior ejemplo obtendríamos el contenido de todos los "textarea" del código HTML en que buscamos. En la variable "resultados", suponiendo que en el código HTML hubiera dos "textarea", tendríamos cuatro elementos: el primero, el valor del atributo "name" del primer "textarea", el segundo, el contenido del primer "textarea"; el tercer elemento de "resultados" sería el valor del atributo "nombre" del segundo "textarea", y, por último, en el cuarto elemento de "resultados" el contenido de este segundo "textarea".

Vale. Reconozco que me he entusiasmado con la posibilidad de lograr múltiples resultados, etc., pero, ya digo que para lo que nos ocupa no es necesario. Tan sólo trataba de transmitir cierto intererés en todo esto que hablamos: Expresiones Regulares, el componente "TPerlRegEx", etc. Para lo nuestro incluso podríamos dejar el procedimiento presentado al principio de este modo:

Código Delphi [-]
uses
  IdHttp, PerlRegEx;

procedure Busqueda(url, expRegular: string;
  var resultados: TStrings);
var
  i: integer;
  http: TIdHTTP;
  regex: TPerlRegEx;
  sRespuesta: TStringStream;
begin
  http := TIdHTTP.Create(nil);
  regex := TPerlRegEx.Create(nil);
  sRespuesta := TStringStream.Create('');
  try
    http.Get(url, sRespuesta);
    regex.RegEx := expRegular;
    regex.Subject := sRespuesta.DataString;
    regex.Options := [preCaseLess, preMultiLine,
                       preSingleLine, preUnGreedy];

    resultados.Clear;
    if regex.Match then
    begin
      // Resultados de la primera coincidencia
      for i := 1 to regex.SubExpressionCount do
        resultados.Add(regex.SubExpressions[i]);
    end;

  finally
    http.Free;
    regex.Free;
    sRespuesta.Free;
  end;
end;

Y así sólo se buscaría la primera coincidencia de lo que buscamos en el código HTML en que lo hacemos. Pero, a riesgo de ser pesado, quiero hacer notar que, aún así, podríamos seguir utilizando el poder que nos ofrecen las Expresiones Regulares...

Pero, me parece que ya está bien, porque además me he limitado ha hacer algunas pruebas, y se me escapan muchas cosas de las Expresiones Regulares, y ni el componente "TPerlRegEx" conozco medianamente bien. ¡Vosotros hacedme el caso justo y aquí paz y después gloria!

Notas:

- Si no conocéis el componente TPerlRegExp no tardéis en hacerlo.

- Todo lo dicho podrá mejorarse no poco, pero, supongo que una de las cosas que habría que mirar con más atención sería la posibilidad de no tener que descargar todo el código HTML de la página que nos interese, sino sólo lo necesario,... esto lo dejo caer por aquí pero, ya se ve que aporto nada más que esto, que tiene narices.
__________________
David Esperalta
www.decsoftutils.com

Última edición por dec fecha: 17-08-2006 a las 19:26:20.
Responder Con Cita
  #6  
Antiguo 18-08-2006
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
Bueno, ¿y es forzoso que sea en Delphi? Digo, porque en php es un "poquito" más fácil:

Código PHP:
$rgxp '#\<textarea name="algo"\>(.*)\</textarea\>#siU';
$contenido file_get_contents($la_url);

if (
preg_match($rgxp$contenido$matches))
{
  echo 
htmlspecialchars($matches[1]);

// Saludos
Responder Con Cita
  #7  
Antiguo 18-08-2006
Avatar de seoane
[seoane] seoane is offline
Miembro Premium
 
Registrado: feb 2004
Ubicación: A Coruña, España
Posts: 3.717
Poder: 26
seoane Va por buen camino
Cita:
Empezado por roman
Bueno, ¿y es forzoso que sea en Delphi? Digo, porque en php es un "poquito" más fácil:
Después de leer haber leído este hilo, lo primero que se me vino a la cabeza es que lo que pedía Emilio era algo muy similar, pero como no tengo idea de php tuve que arreglarme con el pobre delphi Aunque tengo que reconocer que esto de las expresiones regulares es algo fascinante
Responder Con Cita
  #8  
Antiguo 18-08-2006
Avatar de mamcx
mamcx mamcx is offline
Moderador
 
Registrado: sep 2004
Ubicación: Medellín - Colombia
Posts: 3.939
Poder: 27
mamcx Tiene un aura espectacularmamcx Tiene un aura espectacularmamcx Tiene un aura espectacular
Y no hay razones para no usarlas en Delphi!

http://regexpstudio.com/TRegExpr/TRegExpr.html

Otro camino es usar un parser de html, ya sabemos que el html puede ser invalido asi que necesitarias buscar un tag parser...
__________________
El malabarista.
Responder Con Cita
  #9  
Antiguo 04-11-2006
Avatar de Al González
[Al González] Al González is offline
In .pas since 1991
 
Registrado: may 2003
Posts: 5.610
Poder: 32
Al González Es un diamante en brutoAl González Es un diamante en brutoAl González Es un diamante en brutoAl González Es un diamante en bruto
Smile Sobre expresiones regulares y analizadores sintácticos

¡Hola a todos!

Cita:
Empezado por mamcx (sobre el tema de expresiones regulares)
...Y no hay razones para no usarlas en Delphi!

http://regexpstudio.com/TRegExpr/TRegExpr.html...
Al parecer ya no está disponible ese enlace, ¿tendrás otra dirección Web que conduzca a esos componentes? Gracias de antemano.

Cita:
Empezado por mamcx
...Otro camino es usar un parser de html, ya sabemos que el html puede ser invalido asi que necesitarias buscar un tag parser...
Tal vez les sea útil este enlace, donde hay varios de esos componentes:
http://www.torry.net/pages.php?id=216

Un abrazo regular.

Al González.
Responder Con Cita
Respuesta


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
Descargar Formulario monicasierrar OOP 8 29-09-2005 18:25:25
Descargar DBE brandolin Conexión con bases de datos 4 15-05-2004 03:07:21
Descargar correo pepe2000 Internet 1 17-02-2004 15:54:40
descargar una extencion migueilichenco Internet 1 28-11-2003 21:23:50
Descargar Firebird.. LucasArgentino Tablas planas 1 17-11-2003 14:58:04


La franja horaria es GMT +2. Ahora son las 07:17:47.


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