• Publicidad

Empezando a programar. ¿Me ayudas?

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

Empezando a programar. ¿Me ayudas?

Notapor marco » 2007-03-29 15:16 @678

Hola, este es mi primer post en el foro.

Necesito hacer un script en Perl el cual abra un fichero de texto del tipo:
Código: Seleccionar todo
Simple
4
0 1 1 0
1 0 0 1
1 0 0 1
0 1 1 0


El script debe de leer el número de la 2º linea y guardarlo (4). Después debe recorrer la matriz por filas y comprobar donde hay uno y donde hay cero. En definitiva, debo saber cómo poder irme a una fila en concreto del archivo txt y cómo puedo recorrer una fila de la susodicha matriz.
Agradezco cualquier tipo de ayuda, porque acabo de empezar con esto y estoy liado.

Un saludo
marco
Perlero nuevo
Perlero nuevo
 
Mensajes: 3
Registrado: 2007-03-29 14:45 @656

Publicidad

Notapor explorer » 2007-03-29 17:03 @752

Bienvenido a los foros de Perl en Español, marco.

Debes poner las instrucciones de apertura de ficheros. Luego, leer una línea que no guardarás. Volver a leer otra vez y ya tendrás la segunda línea. Se la das al usuario (por ejemplo), con un print.

Como la segunda línea queremos obtener el número, pues nos indica el tamaño de la matriz, tenemos que convertirla a justamente eso. Para ello, hacemos un chomp para quitarle el retorno de carro final. Y nada más. Ya tendremos el número.

Luego, dices que hay que distinguir donde hay un 1 y donde hay un 0, pero no dices qué es lo que hay que hacer en cada caso.

Podríamos suponer que nos lo da el usuario. Entonces se lo preguntas (un print con el mensaje y esperamos su respuesta leyendo el teclado con <>). Le preguntaremos por una fila y una columna. Comprobaremos que ha introducido unas coordenadas iguales o inferiores al número leído antes. Sino, repetimos hasta que (while) así sea.

Luego, con el dato de la fila, hacemos un bucle (for) por esa cantidad. La última fila leída es la que nos interesa. Luego, con el dato de la columna debemos mirar dentro de la fila.

Para ello, como los números dentro de la fila están separados con un simple blanco, convertimos la fila en una lista de valores con la ayuda de split. Por medio de un acceso a la lista usando el número de columna como índice dentro de ella, accederemos al dato que buscamos.

Finalmente, con un if le diremos al usuario si era un 0 o un 1 o un mensaje similar.

¡Adelante!
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

Notapor marco » 2007-03-29 21:20 @931

Hola, de momento llevo:
Código: Seleccionar todo
#!/usr/bin/perl
print "Escribe el nombre del archivo de entrada: ";
chop ($entrada=<STDIN>);
print "Escribe el nombre del archivo de salida: ";
chop ($salida=<STDIN>);

open (ENTRADA,"<$entrada");
open (SALIDA,">$salida");
print $linea=<ENTRADA>   

pero es en esa ultima linea donde me atasco, pues no sabria como seguir para que me lellera la sigueinte fila del fichero..

Una ayudita!!!
marco
Perlero nuevo
Perlero nuevo
 
Mensajes: 3
Registrado: 2007-03-29 14:45 @656

Notapor explorer » 2007-03-30 01:37 @109

A ver...

Si con
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
$linea = <ENTRADA>;
Coloreado en 0.002 segundos, usando GeSHi 1.0.8.4
lees una línea, con
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
$linea = <ENTRADA>;
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4
lees la siguiente, ¿no?
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

Notapor marco » 2007-03-30 07:22 @348

Lo primero darte las gracias por la ayuda. Lo segundo: Consigo ponerme en la linea que me interesa del fichero pero una vez allí no sé cómo hacer para guarda los cuatro números de una fila en un array, para posteriormente recorrerlo y ver si son 0 ó 1.
Pongo aquí lo que llevo de código:

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
#!/usr/bin/perl
use strict;
open(MYDATA, "d.txt") or
  die("Error: cannot open file 'd.txt'\n");
my $line;
my @matrix;
my $lnum = 0;
my $grado=-5;

while( $line = <MYDATA> ){
  chomp($line);

if ( $lnum eq "2")
   {
   print "Matriz de indice $line\n";
   $grado=$line;
   $lnum++;        
   }        
while ( $lnum  <$grado+4)
   {
   $lnum++;
   print "$line\n";
   $matrix[0]=$line;
   $line = <MYDATA>
   #$matrix[0]=$line;
   #print "$matrix[0]";

   }
if ( $line eq "Simple")
   {
   print "Grafo de tipo Simple!\n";
   $lnum=2;
   }

}
close MYDATA;
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4
marco
Perlero nuevo
Perlero nuevo
 
Mensajes: 3
Registrado: 2007-03-29 14:45 @656

Notapor explorer » 2007-03-30 11:56 @539

Sería algo parecido a esto.

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
# Meter en el array @line los elementos separados por " " de $line
@line = split(" ",$line);

# Impresión del elemento puesto en la posición $grado
print $line[$grado];
Coloreado en 0.001 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: Empezando a programar. ¿Me ayudas?

Notapor creating021 » 2007-04-01 10:38 @484

Hay un método muy fácil para trabajar esto y es usando read() y un tipo de archivo determinado, para poder trabajar matrices de diversos tamaños y no tener que evaluar y hacer una condición para cada posibilidad.

Si te interesa te mando el código.
Expect the worst, is it the least you can do?
Avatar de Usuario
creating021
Perlero frecuente
Perlero frecuente
 
Mensajes: 595
Registrado: 2006-02-23 16:17 @720
Ubicación: Frente al monitor


Volver a Básico

¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 1 invitado