• Publicidad

Escritura en fichero

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

Escritura en fichero

Notapor darkborrego » 2009-04-28 05:05 @253

Hola,
resulta que me he quedado un poco atascado en una opción. Necesito escribir en una zona determinada de un fichero, pero sólo sé modificar sobreescribiendo o añadiendo datos al final del fichero.

Me gustaría saber cómo colocarme en una determinada línea, y dentro de esa línea ubicarme tras el 4º campo del fichero passwd.

Saludos y muchas gracias.
darkborrego
Perlero nuevo
Perlero nuevo
 
Mensajes: 11
Registrado: 2009-04-24 12:49 @576

Publicidad

Notapor explorer » 2009-04-28 05:34 @273

Creo que la solución más sencilla sería usando Tie::File.

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
use Tie::File;

tie @array, 'Tie::File', 'fichero' or die "ERROR: $!\n";

my $linea = $array[13];    # leemos línea 14ª

my @campos = split ':', $linea;   # la troceamos

$campos[3] = 'Dark Borrego';       # cambiamos valor 4º campo

$array[13] = join ':', @campos;   # reconstruimos línea
Coloreado en 0.003 segundos, usando GeSHi 1.0.8.4

aunque File::Tabular está muy bien si quieres tratarlo como una base de datos.

Pero si se trata de gestionar un fichero de passwd, una buena opción sería usar algo como AnyData::Format::Passwd o cualquiera de los que hay.

Algo así (no probado):
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
use AnyData;
my $usuarios = adTie( 'Passwd', '/etc/passwd' );

$usuarios->{darkborrego}->{fullname} = 'Dark Borrego';
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 darkborrego » 2009-04-29 07:09 @339

¡¡¡Muchas gracias artista!!!

Al final lo he realizado de una forma más simple y menos eficiente pero que entiendo un poco mejor. La que me pusiste me daba 3 errores aunque compilaba y funcionaba.

Solo tengo un problema: quiero modificar el fichero. Lee línea a línea y me gustaría escribir línea a línea. Abro el archivo con el operador '>' y me lo borra todo y si lo abro con el operador '>>' se borra todo, ¿¿¿qué estoy haciendo mal???

Saludos
darkborrego
Perlero nuevo
Perlero nuevo
 
Mensajes: 11
Registrado: 2009-04-24 12:49 @576

Notapor explorer » 2009-04-29 07:31 @354

Si el fichero tiene un formato reconocido y está formado por registros de igual longitud, podrías usar la función seek() para posicionarte dentro del fichero y modificar los registros.

Si el fichero es de tipo texto, en cada línea tiene un tamaño distinto, no es posible hacer eso (bueno, sí, pero es muy complicado).

Lo normal es: leer todo el fichero, hacer las modificaciones en memoria, y guardar la nueva versión del fichero. Si tienes la preocupación de si se puede perder información porque falle el programa justo en el momento de escribir (y por ello, quede el fichero en tamaño 0), puedes hacer antes de sobreescribir el fichero una copia de seguridad. O crear un fichero con un nombre nuevo. O... otras variantes.

Si, de todas formas, quieres sobreescribir el contenido, debes indicarlo de forma correcta en el open():
Código: Seleccionar todo
<  : lectura
>  : escritura
>> : añade al final del fichero


Si a éstos les añadimos un '+', entonces estamos indicando que deseamos leer y escribir a la vez:
Código: Seleccionar todo
+< : el método preferido para leer y escribir en el fichero
+> : hará lo mismo, pero antes borrará el fichero


Más información en perldoc perlopen.
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 darkborrego » 2009-05-01 12:39 @569

¡¡¡ok!!!, muchas gracias, tío. Lo del '+' no lo sabía y eso es lo que me provocaba el fallo de la forma que yo lo tenía.
darkborrego
Perlero nuevo
Perlero nuevo
 
Mensajes: 11
Registrado: 2009-04-24 12:49 @576


Volver a Básico

¿Quién está conectado?

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

cron