• 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.

Meter array en archivo de texto

Notapor ReNcOoR » 2009-11-17 21:54 @954

Hola, amigos, tengo un problemilla.

Trato de meter en un archivo todos los datos de un array:

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
open (texto,">archivo.txt")

@total = <texto>;

close (texto);
Coloreado en 0.002 segundos, usando GeSHi 1.0.8.4


Según una web donde busqué, me dice que de esta manera quedaría pero no me da los resultados esperados. Saludos y espero sus comentarios.
ReNcOoR
Perlero nuevo
Perlero nuevo
 
Mensajes: 19
Registrado: 2009-11-16 18:45 @823

Publicidad

Re: Meter array en archivo de texto

Notapor explorer » 2009-11-18 05:18 @262

Es que

@total = <texto>;

no es escribir a un fichero, sino leerlo.

Sería así:

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
open (texto,">archivo.txt")

print texto @total;

close (texto);
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4


o mejor:

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
open(my $texto, '>', 'archivo.txt')
    or die "ERROR: No puedo escribir en archivo.txt: $!\n";

print $texto @total;

close($texto);
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4
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-18 21:30 @937

Gracias, compañero, un saludo.

Ya está corregido. Quisiera saber cómo puedo leer un fichero que tenga la siguiente estructura.

Sintáxis: [ Descargar ] [ Ocultar ]
Using text Syntax Highlighting
blahh blahh blahh

blahh

blahh

carro:vaca

blahh

blahhh blahh
Coloreado en 0.000 segundos, usando GeSHi 1.0.8.4


Quisiera saber cómo hago para leer línea por línea y que cuando encuentre un valor de este tipo lo guarde en un array o un hash: carro:vaca, pez:casa, mesa:balon.

Espero haberme hecho entender. Un saludo.
Última edición por explorer el 2009-11-19 03:36 @192, editado 1 vez en total
Razón: Ortografía
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-19 04:49 @242

Pues tienes que abrir el fichero con open(), ir leyendo el contenido, línea a línea, con un while(my $linea = <$fichero>) y por cada línea ver si contiene un ':', que eso lo puedes saber con una expresión regular o con la función index().

Si la línea cumple con tus requisitos, pues la guardas con un push().
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-19 19:39 @860

Hola, explorer. ¿No será mucha molestia si me pones un ejemplo? Un saludo.
Última edición por explorer el 2009-11-20 04:15 @219, editado 1 vez en total
Razón: Ortografía
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-20 04:19 @221

Pero si solo hay que trasladar a Perl lo que te he dicho...

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
open(my $fichero, '<fichero.txt') or die "ERROR: No puedo leer el fichero.txt: $!\n";
while (my $linea = <$fichero>) {
    if ($linea =~ /:/) {
        chomp $linea;
        push @array, $linea;
    }
}
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4


Tendrías que leer más los tutoriales, leer sobre todo más código escrito por otros.
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-20 18:13 @800

Hola, explorer. Hasta el if() lo tenía bien claro pero trataba de poner otro if() que me dijera si había encontrado la frase o la línea; tal vez no se pueden anidar if() en Perl. ¿O sí?
ReNcOoR
Perlero nuevo
Perlero nuevo
 
Mensajes: 19
Registrado: 2009-11-16 18:45 @823

Re: Meter array en archivo de texto

Notapor erv-Z » 2009-11-20 19:06 @837

Sí, existe una función llamada elsif() de Perl, Ejemplo:

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
my $var = "holaaaa";
if ($var eq "Holaaaa") {
    print "sí\n";
}
elsif ($var eq "holaaaa") {
    print "Comprobación correcta\n";
}
else {
    print "Ninguna coincidieron\n";
}
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4
Última edición por explorer el 2009-11-21 05:26 @268, editado 1 vez en total
Razón: Ortografía, bloques de código, corrección del código
erv-Z
Perlero nuevo
Perlero nuevo
 
Mensajes: 158
Registrado: 2009-07-25 13:00 @583

Re: Meter array en archivo de texto

Notapor explorer » 2009-11-21 05:34 @274

if() y elsif() NO son funciones. Son sentencias de control , que en Perl siguen casi las mismas directrices que en otros lenguajes.

El ejemplo que además pones no muestra una anidación, sino una cascada de funciones if().

Un ejemplo de anidación sería:
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
if( $primera eq $comprobación ) {
    if ( $segunda eq $comprobación ) {
    }
}
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4
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 14:43 @655

Hola, amigos.

Este es el código completo pero cuando me busca las palabras no me las guarda ni en el fichero archivo.txt ni en pantalla. ¿Cuál será el problema? 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. print $content;
  21.  
  22. my @fuente;
  23.  
  24. push (@fuente, $content);
  25.  
  26. open (my $debug, ">archivo.txt");
  27.  
  28. close ($debug);
  29.  
  30. open (my $fichero, "archivo.txt");
  31.  
  32. while (my $linea = <$fichero>) {
  33.  
  34.     if ($linea =~ /:/) {
  35.         chomp $linea;
  36.  
  37.         push my @datos, $linea;
  38.     }
  39. }
  40.  
  41. close ($linea);
  42.  
  43. system 'pause>nul';
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4
Última edición por explorer el 2009-11-21 17:22 @765, editado 1 vez en total
Razón: Ortografía, sintaxis, bloques de código, indentación de código
ReNcOoR
Perlero nuevo
Perlero nuevo
 
Mensajes: 19
Registrado: 2009-11-16 18:45 @823

Siguiente

Volver a Básico

¿Quién está conectado?

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