• Publicidad

Insertar registros a archivo y mostrarlos

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

Insertar registros a archivo y mostrarlos

Notapor charlygarza » 2013-05-25 17:21 @764

  • Cree un archivo tipo texto con las siguientes características:
    • Cada palabra (campo) deberá estar separado por ':' (dos puntos) sin espacios intermedios
    • El último dato solamente lleva ENTER, NO COLOCAR ':' (dos puntos)
    • Que contenga 4 campos
  • Abra el archivo de modo lectura
  • Imprima los registros con todos sus campos
  • Abra el archivo de modo lectura-escritura
  • Imprima su contenido
  • Genere nuevos datos
  • Imprima contenido
  • Abra el archivo de modo concatenación
  • Agregue 3 nuevos registros
Tengo problema que al ingresar los registros me sobreescribe los 4 iniciales.

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. # Archivos OPEN
  2.  
  3. print "INFORMACIÓN ARCHIVO DATOS.TXT EN MODO LECTURA \n";
  4. print "=================================================================== \n";
  5. open(IN, "<D:/etc/datos.txt");
  6. while($linea = <IN>) {
  7.        ($pnombre,$snombre,$papellido,$sapellido)=split(/:/, $linea, 7);
  8.        print "Primer NOmbre: ".$pnombre. "    Segundo nombre: ". $snombre.  " \nPrimer apellido: ". $papellido. "   segundo apellido: ". $sapellido."\n";
  9. }
  10. close IN;
  11.  
  12.  
  13. print "\nINFORMACIÓN ARCHIVO DATOS.TXT EN MODO LECTURA Y ESCRITURA \n";
  14. print "=================================================================== \n";
  15. open(IN, "+<D:/etc/datos.txt");
  16. while($linea = <IN>) {
  17.        ($pnombre,$snombre,$papellido,$sapellido)=split(/:/, $linea, 7);
  18.        print "Primer NOmbre: ".$pnombre. "    Segundo nombre: ". $snombre.  " \nPrimer apellido: ". $papellido. "   segundo apellido: ". $sapellido."\n";
  19. }
  20. close IN;
  21.  
  22. print "\nINFORMACIÓN ARCHIVO DATOS.TXT EN MODO LECTURA Y ESCRITURA CON NUEVOS DATOS \n";
  23. print "=================================================================== \n";
  24. open(IN, "+<D:/etc/datos.txt");
  25.  
  26.        print IN "diego:andres:corado:lima\n";
  27.        print IN "liza:fernanda:corado:lima\n";
  28.        
  29.  
  30. close IN;
  31.  
  32. print "\nINFORMACIÓN ARCHIVO DATOS.TXT EN MODO LECTURA CON NUEVOS DATOS \n";
  33. print "=================================================================== \n";
  34. open(IN, "<D:/etc/datos.txt");
  35. while($linea = <IN>) {
  36.        ($pnombre,$snombre,$papellido,$sapellido)=split(/:/, $linea, 7);
  37.        print "Primer NOmbre: ".$pnombre. "    Segundo nombre: ". $snombre.  " \nPrimer apellido: ". $papellido. "   segundo apellido: ". $sapellido."\n";
  38. }
  39. close IN;
  40.  
  41. print "\nINFORMACIÓN ARCHIVO DATOS.TXT EN MODO CONCATENACIÓN \n";
  42. print "=================================================================== \n";
  43. open(IN, ">>D:/etc/datos.txt");
  44. while($linea = <IN>) {
  45.        ($pnombre,$snombre,$papellido,$sapellido)=split(/:/, $linea, 7);
  46.        print "Primer NOmbre: ".$pnombre. "    Segundo nombre: ". $snombre.  " \nPrimer apellido: ". $papellido. "   segundo apellido: ". $sapellido."\n";
  47. }
  48. close IN;
  49.  
Coloreado en 0.004 segundos, usando GeSHi 1.0.8.4
charlygarza
Perlero nuevo
Perlero nuevo
 
Mensajes: 26
Registrado: 2013-05-11 13:22 @598

Publicidad

Re: Insertar registros a archivo y mostrarlos

Notapor explorer » 2013-05-25 19:57 @873

El problema está a la hora de abrir el archivo en modo lectura/escritura.

Nada más abrirlo, mandas la orden de imprimir en él dos nuevos registros. El efecto es el que comentas: sobreescriben a los registros anteriores. Eso es debido a que en el momento de abrirlo, el "puntero" de lectura/escritura del archivo, está en la primera posición. Y es ahí donde estás mandando los dos nuevos registros, con lo que los anteriores quedan sobreescritos.

La solución es posicionar el puntero al final del archivo, para que los nuevos se agreguen ahí.

Eso lo puedes hacer con la instrucción
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1.        seek(IN, 0, 2);
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4

Más información en perldoc -f seek
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14486
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España


Volver a Básico

¿Quién está conectado?

Usuarios navegando por este Foro: Google [Bot] y 0 invitados

cron