• Publicidad

Guardar campos de un fichero

Así que programas sin strict y las expresiones regulares son otro modo de hablar. Aquí encontrarás respuestas de nivel avanzado, no recomendable para los débiles de corazón.

Guardar campos de un fichero

Notapor javierg » 2007-01-02 06:09 @298

Buenas,

tengo el siguiente código

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
while ($linea = <CARGANODOS>)
 { printf FICHERONODOS $linea;>>>>OK
   ¿¿¿ DUDA ???
   }
Coloreado en 0.003 segundos, usando GeSHi 1.0.8.4

El fichero CARGANODOS es de la siguiente forma

Código: Seleccionar todo
nombre1 Ip1
nombre2 Ip2


Bien, me gustaría guardar el nombre en una variable y la ip en otra.
Bueno lo guardaré en un array, lo que me interesa es saber cómo se leen partes de una línea del fichero.

gracias
javierg
Perlero nuevo
Perlero nuevo
 
Mensajes: 48
Registrado: 2006-10-17 05:26 @268

Publicidad

Notapor monoswim » 2007-01-02 07:51 @369

en ese bucle tienes cada línea en $linea; si están los datos separados por un espacio puedes hacer
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
my ($nombre, $ip) = split(/ /,$linea);
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4


Saludos
MonoSwim
Perl Programming Language
Avatar de Usuario
monoswim
Perlero nuevo
Perlero nuevo
 
Mensajes: 452
Registrado: 2003-11-18 16:13 @717
Ubicación: Buenos Aires

Notapor explorer » 2007-01-02 20:19 @888

Y en caso de que el número de espacios en blanco sea variable, se puede usar la forma especial de split:
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
my ($nombre, $ip) = split(" ",$linea);
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4

Además, el espacio en blanco es el delimitador por defecto de la función split cuando se quiere dividir la variable por defecto $_, por lo que podemos usar:
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
while ( <CARGANODOS> ) {
    print FICHERONODOS "$_\n";
    ($nombre, $ip) = split;
    print "Nombre: $nombre. IP: $ip\n";
}
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4
con la ventaja de que además nos quitará los espacios en blanco que estén por delante y por detrás de los dos campos.
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 javierg » 2007-01-03 02:15 @135

BUenas,
muy curioso todo, lo he probado ambos casos y todo OK, pero solo con una excepción, que imagino que esta fuera del Perl, pero por si os interesase.
Utilizando Solaris
Cuando edito un fichero con el Vi, por ejemplo pruebas.txt, y por ejemplo el siguiente contenido

pruebas.txt
******************
Nombre1 Ip1


lo curioso de esto,que despues de Ip1 automaticamente me crea un retorno de carro¿¿ curioso ??lo he intentado eliminar con comandos pero no he podido.
Parte del script lo que hacia, era que con esas 2 variables usadas, hacía una frase, así que con el retorno de carrro me la partía. Solución: he añadido un espacio en blanco despues de Ip1, aunque se que no es solucion+


gracias por todo
javierg
Perlero nuevo
Perlero nuevo
 
Mensajes: 48
Registrado: 2006-10-17 05:26 @268

Notapor monoswim » 2007-01-03 07:12 @342

puedes usar un

chomp $linea;

Para eliminar el último caracter (salto de línea o retorno de carro) de la línea en cuestión...

Creo que era chomp, o chop, no me acuerdo bien...

Saludos
MonoSwim
Perl Programming Language
Avatar de Usuario
monoswim
Perlero nuevo
Perlero nuevo
 
Mensajes: 452
Registrado: 2003-11-18 16:13 @717
Ubicación: Buenos Aires

Notapor explorer » 2007-01-03 07:53 @370

Cuando lees la línea con <CARGANODOS>, te lees también el retorno de carro que está al final de esa línea.

Al hacer el split, en $ip quedará con ese retorno de carro.

Si luego hacemos un print "$ip\n"; pues entonces sale la ip con su retorno de carro más el retorno de carro nuevo ("\n").

La solución es la que te comenta monoSwim: haces un chomp a la línea nada más leerla, con lo que eliminarás el retorno de carro leído.
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
while ( <CARGANODOS> ) {
    chomp;
    print FICHERONODOS "$_\n";
    ($nombre, $ip) = split;
    print "Nombre: $nombre. IP: $ip\n";
}
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

Notapor javierg » 2007-01-03 08:35 @399

OK, muchisimas gracias por todo.
Haber si hay suerte y me acostumbro en esto del perl y me puedo conectar mas por el foro

Bye
javierg
Perlero nuevo
Perlero nuevo
 
Mensajes: 48
Registrado: 2006-10-17 05:26 @268

Notapor creating021 » 2007-01-03 11:12 @508

También puedes configurar Vi para que no haga una nueva línea (warp) :wink:
Para eso puedes ejecutar vi y usar el comando :help (no te puedo decir nada más porque estoy en GNU/Linux y vi es elvis en GNU)
Depronto esto te pueda ayudar.
http://bignosebird.com/docs/vi.shtml
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 Avanzado

¿Quién está conectado?

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