[bcn-pm] consulta
Miquel Bordera
miquelbs at teleline.es
Tue Nov 18 17:00:00 CST 2003
Hola companys:
El programa que us llisto al final del meu missatge no te cap utilitat
practica; sols es una prova que estava fent. El cas es que no em funciona
tal com hauria de funcionar i no entenc el perque.
Es un programa que crea un fitxer de 4 linies com aquest:
1=a
2=b
3=c
4=d
El que fa es crear-lo en mode binari, tot separant cada linia amb el
caracter "\n" de salt de linia.
El cas es que quan faig un TYPE en una finestra de MS-DOS (treballo amb
windows 98) el que apareix a la pantalla es algo semblant a aixo:
1=a
2=b
3=c
4=d
Malgrat tot la segona part del programa, encarregada de llegir el fitxer i
mostrar-lo per la pantalla funciona be i malgrat que no entenc massa be
perque passa aixo (potser el caracter "\n" que interpreta el compilador no
es correapon amb el salt de linia del Windows?)
A la tercera part del programa es pregunta quina es la linia que volem
canviar. La idea es modificar sols la linia especificada sense haber de
reescriure tot el fitxer.
A la quarta part es procedeix de la seguent forma:
1- S'obre el fitxer creat previament en mode binari.
2-. Es considera que cada linia te una longutud de 4 caracters (3 i el salt
de linia \n).
3-. S'escriu la nova linia sobre la vella en la posicio correcta.
I aqui ve el problema. Si, s'escriu la nova linia sobre la linia vella sobre
la posicio correcta que es calcula, pero al fitxer modificat han desaparegut
les linies posteriors. Es a dir, si modifico la linia 2, desapareixen la 3 i
la 4; Si modifico la 3, desapareix la linia 4.
Se suposa qu obric el fitxer en mode lectura-escriptura utilitzant
l'indicador "+>". ¿Que es el que esta malament d'aquest cenzill script?
Salutacions i disculpeu que faci preguntes tant elementals.
Intentare venir a la reunio del dia 27
Miquel Bordera.
----- El programa es el seguent -----
# CREEM EL FITXER
open(ARXIU,">prova.txt");
binmode ARXIU;
print ARXIU "1=A\n";
print ARXIU "2=B\n";
print ARXIU "3=C\n";
print ARXIU "4=D\n";
close(ARXIU);
# MOSTREM EL FITXER PER LA PANTALLA
open(ARXIU,"prova.txt");
binmode ARXIU;
while (not(eof(ARXIU))){
read (ARXIU,$a,4);
chop($a);
print "$a\n";
}
close(ARXIU);
# PREGUNTEM QUINA LINIA ES VOL EDITAR
print "indica quina linia vols modificar";
$a=<STDIN>;
chop($a);
print "indica la nova lletra que li vols posar";
$b=<STDIN>;
chop($b);
# MODIFIQUEM LA LINIA ESMENTADA
open(ARXIU,"+>prova.txt");
binmode ARXIU;
seek(ARXIU,($a-1)*4,0);
print ARXIU "$a=$b";
close(ARXIU);
More information about the Barcelona-pm
mailing list