dudas sobre read, write, sysread, syswrite
Jorge R Colaccini
gralpaz@satlink.com
Sat, 1 Nov 1997 18:20:59 -0300
Hola listeros,
Estoy haciendo mis primeras armas con Perl, y como vengo del Basic, hay
cosas de las cuales me resulta dificil desprenderme.
Quiero saber si hay en Perl, alguna manera de procesar archivos de acceso
aleatorio (random) tal como en el Basic.
Necesito leer un registro determinado, modificarlo y volverlo a grabar en
la misma posicion. Se supone que sin reescribir todo el archivo ;-).
Estuve probando con read y sysread y me permiten leer, tal cual como lo
deseo (con la asistencia de seek, para posicionar adecuadamente). En este
caso mi duda es para que hay 2 funciones y en que caso se usa cada una, me
refiero a read y sysread.
Al querer sobreescribir, me encontre con que write, no es la exacta
contrapartida de read :-( ???.
Syswrite si parece ser la contrapartida de sysread, pero al usarla, me
graba el registro en la posicion correcta pero de ahi en mas, me trunca el
archivo. Hay solucion para esto? Estoy haciendo algo mal?
Aqui les mando el pedazo de codigo que estoy usando:
$
buffer='1234567890123456'; # nuevo contenido del registro a grabar
$r=100 ; # numero de registro a leer
$rlen=16; # largo de registro
$oset=($r-1)*$rlen; # posicion en el archivo
open (FILE, "+>random.txt"); #Esta bien que lo abra asi, o hay alguna
forma de abrirlo en binario?
seek FILE,$oset,SEEK_SET; #se posiciona
syswrite FILE, $buffer, $rlen;
close (FILE);
----------------------------------------
Jorge R. Colaccini
E-mail: gralpaz@satlink.com
Rosario, Santa Fe, Argentina
----------------------------------------