• Publicidad

Meter array en archivo de texto

¿Apenas comienzas con Perl? En este foro podrás encontrar y hacer preguntas básicas de Perl con respuestas aptas a tu nivel.

Re: Meter array en archivo de texto

Notapor explorer » 2009-11-21 17:47 @782

Yo no veo en ninguna parte del programa que guardes nada a archivo.txt... por eso no te devuelve nada.
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14480
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Publicidad

Re: Meter array en archivo de texto

Notapor ReNcOoR » 2009-11-21 17:56 @789

Hola, explorer, ya está más o menos solucionado. Perdona la torpeza pero es que apenas comienzo. Éste es el código más o menos pero digo más o menos porque me guarda en el archivo pases las líneas pero enteras yo solo quiero tomar una cantidad de caracteres después de los 2 puntos. ¿Me podrías decir qué debo estudiar para poder manejar estas cadenas? Un saludo.

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. #!/usr/bin/perl
  2.  
  3. use LWP::UserAgent;
  4. use HTTP::Request;
  5.  
  6. my $ID = new LWP::UserAgent;
  7.  
  8. $ID-> agent ("Mozilla/5.0 (Windows; U; Windows NT 5.1; es-ES; rv:1.9.1.5) Gecko/20091102 Firefox/3.5.5");
  9.  
  10. print "Escriba la url de la web..\n";
  11.  
  12. my $url = <STDIN>;
  13.  
  14. my $req = HTTP::Request->new (GET => $url);
  15.  
  16. my $response = $ID->request ($req);
  17.  
  18. my $content = $response->content ();
  19.  
  20. my @contenido;
  21.  
  22. push (@contenido, $content);
  23.  
  24. open (AR, ">archivo.txt");
  25.  
  26. print AR @contenido;
  27.  
  28. print "archivo guardado\n";
  29.  
  30. close (AR);
  31.  
  32. my @pases;
  33.  
  34. print "buscando pases..\n";
  35.  
  36. open (AT, "archivo.txt");
  37.  
  38. while (my $linea = <AT>)
  39.  
  40.   {
  41.  
  42.     if ($linea =~ /:/)
  43.  
  44.     {
  45.  
  46.       chomp $linea;
  47.  
  48.      push @pases, $linea;
  49.  
  50.          }
  51.  
  52.       }
  53.  
  54. close (AT);
  55.  
  56. print "estos son tus pases..\n";
  57.  
  58. open (AQ, ">pases.txt");
  59.  
  60. print AQ @pases;
  61.  
  62. close (AQ);
  63.  
  64. system 'pause>nul';
Coloreado en 0.003 segundos, usando GeSHi 1.0.8.4
Última edición por explorer el 2009-11-21 18:07 @797, editado 1 vez en total
Razón: Ortografía, anglicismos
ReNcOoR
Perlero nuevo
Perlero nuevo
 
Mensajes: 19
Registrado: 2009-11-16 18:45 @823

Re: Meter array en archivo de texto

Notapor explorer » 2009-11-21 19:08 @839

Lo que no sé es por qué guardas lo que te has bajado desde Internet a un fichero, para luego volver a abrirlo. E incluso podrías ir grabando los @pases a medida de que los vas encontrando, reduciendo un poco el código.

Para extraer parte de una cadena de caracteres, pues depende de si sabes qué es lo que quieres extraer y/o de dónde.

Si sabes exactamente la posición dentro de la cadena, pues debes usar substr() o split() o unpack.

Si no sabes dónde es, puedes localizarlo con index o rindex o, más comúnmente, con una expresión regular. El qué utilizar en cada momento, depende de cada circunstancia.

Tu programa se puede quedar en algo así:
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. #!/usr/bin/perl
  2. use strict;                                     # Somos novatos y vamos a programar en Perl de forma estricta
  3. use warnings;                                   # ¡Perl! Avísame de todo lo raro que encuentres
  4. use diagnostics;                                # Y con mucha información, por favor
  5.  
  6. use LWP::UserAgent;                             # Vamos a conectarnos como clientes HTTP
  7. use HTTP::Request;                              # Haciendo peticiones HTTP, naturalmente
  8.  
  9. my $ID = LWP::UserAgent->new();                 # Vamos a ser un navegador Firefox (!)
  10. $ID-> agent ("Mozilla/5.0 (Windows; U; Windows NT 5.1; es-ES; rv:1.9.1.5) Gecko/20091102 Firefox/3.5.5");
  11.  
  12. print "Escriba la url de la web...\n";          # Preguntamos al jefe dónde tenemos que mirar
  13. my $url = <STDIN>;
  14. chomp $url;
  15.  
  16. my $req      = HTTP::Request->new(GET => $url);
  17. my $response = $ID->request($req);              # Hacemos una petición HTTP de tipo GET
  18. my $content  = $response->content();
  19.  
  20. die "PROBLEMAS: No he bajado nada: $response" if not $content;
  21.  
  22. my @pases;                                      # Comienzo de la búsqueda de pases
  23. open (AQ, ">pases.txt");
  24. print "Buscando pases...\n";
  25.  
  26. for my $linea (split /[\r\n]+/, $content) {     # Para todas las líneas bajadas
  27.  
  28.     if ($linea =~ /:/) {                        # Si la línea contiene un ':'
  29.         print AQ $linea;                        # La guardamos en el fichero, para la posteridad
  30.         push @pases, $linea;                    # Y en @pases, para informar después
  31.     }
  32. }
  33.  
  34. close (AQ);
  35.  
  36. print "Estos son tus pases...\n";               # Informamos
  37. print @pases;
  38.  
  39. print "Pulsa Enter para terminar..."; <>;
Coloreado en 0.002 segundos, usando GeSHi 1.0.8.4
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14480
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Re: Meter array en archivo de texto

Notapor ReNcOoR » 2009-11-21 19:24 @850

Muchas gracias, explorer. Me la pones algo difícil ya que use strict, use warnings, use diagnostics son para profesionales como usted. Es más, conozco gente que sabe mucho y no las usa. Un saludo.
ReNcOoR
Perlero nuevo
Perlero nuevo
 
Mensajes: 19
Registrado: 2009-11-16 18:45 @823

Re: Meter array en archivo de texto

Notapor explorer » 2009-11-21 19:31 @855

Te equivocas: strict, warnings y diagnostics son las mejores armas con las que cuentas para que el propio Perl te ayude a programar bien.

Pueden parecer pesadas, pero te crearán hábitos de programación muy buenos.

De hecho, programar con Modern::Perl en Perl v5.10, activa todas estas ayudas. Y en Perl v6, por defecto, se programa siempre en modo estricto.

Solo cuando tengas mucha experiencia, o dependa de las circunstancias, puedes dejar de usarlas.

Por ejemplo, cuando se trata de programar algo muy corto y/o rápido, o en pocas líneas, o cuando usas un editor de código Perl que te ayude a encontrar errores de escritura en el código.

Para todo lo demás, siempre son recomendables.
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14480
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Anterior

Volver a Básico

¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 9 invitados

cron