[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