• Publicidad

Editar ficheros .dat en un solo .dat y por columnas

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

Re: Editar ficheros .dat en un solo .dat y por columnas

Notapor explorer » 2012-04-16 04:17 @220

enric73 escribiste:¿cómo modificaría el sprintf() de esa línea agregando un "\n" a la cadena de formato?
Poniendo un '\' y una 'n' al final de la cadena de formato. :lol: :lol: :lol:

enric73 escribiste:¿O cómo modificaría la forma de imprimir hacia el archivo, haciendo un bucle, por ejemplo, haciendo un print() de cada elemento de @dat, con su "\n" correspondiente?
Con un bucle for().

enric73 escribiste:He visto que de esta manera se intercalan los datos cada dos ficheros (U y V). Pero lo quiero más sencillo. Primero que se guarden los datos del fichero U (todos seguidos), luego los del fichero V (todos seguidos) para una cierta hora pero sin intercalar los datos del fichero U y V, luego otra vez todos los datos de los ficheros U y V para la siguiente hora... ¿En este caso el each_array() no lo necesitaría?
Pues no, claro. Como ya tienes los datos de U en el array @u, pues lo sacas, y luego el array @v.

¡Adelante!
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

Publicidad

Re: Editar ficheros .dat en un solo .dat y por columnas

Notapor enric73 » 2012-04-16 08:41 @403

Hola explorer,

muchas gracias, estoy mirando tu escrito. De momento el primer apartado, no he utilizado /n, si no que he dejado más espacios entre los valores.

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. push @dat, sprintf"%.2f %.2f ", $u, $v;
Coloreado en 0.002 segundos, usando GeSHi 1.0.8.4


Ahora voy a mirar como poner los archivos seguidos en orden de hora y sin alternar los valores.

Muchas gracias
enric73
Perlero nuevo
Perlero nuevo
 
Mensajes: 154
Registrado: 2012-03-16 06:27 @311

Re: Editar ficheros .dat en un solo .dat y por columnas

Notapor enric73 » 2012-04-16 11:01 @501

Buenas tardes, no sé cómo sacar los datos de los ficheros U* y V* que tengo metidos en los array @U y @V en un solo dat. He repicado el script pero estoy bloqueado, estoy hecho un lio ya, entre los arrays, escalares y la manera de pintarlos. No sé cómo meter los diferentes ficheros .dat (UGRD* y VGRD*) en una sola columna o línea y uno detrás del otro (ficheros enteros, primero uno entero de la componente U, luego uno entero de la componente V, luego el siguiente de la componente U, después otro fichero entero de la componente V, y así sucesivamente...).

Adjunto el script. Gracias.

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. #!/usr/bin/perl
  2.     use v5.10; 
  3.     use Data::CTable;
  4.     use POSIX 'strftime';
  5.     use Class::Date qw(date now);
  6.  #   use List::MoreUtils qw<zip each_array>;
  7.     use autodie;
  8.  
  9. my @archivos_U = </home/enric/ASCII/2012041600/UGRD10m*.dat>;
  10. my @archivos_V = </home/enric/ASCII/2012041600/VGRD10m*.dat>;
  11.  
  12. die "ERROR: No coinciden el numero de archivos U y V.\n"
  13.  if @archivos_U != @archivos_V;
  14.  
  15. #Process
  16. my @dat;
  17.  
  18. my $archivo_u = @archivos_U;
  19. my $archivo_v = @archivos_V;
  20. open my $U, '<', $archivo_u;
  21. open my $V, '<', $archivo_v;
  22.  
  23. #read files
  24. my @u = <$U>;
  25. my @v = <$V>;
  26.  
  27. #die "ERROR: No tenen el mateix nombre de linees els arxius $archivo_U[$i] i $archivo_V[$i]"
  28.  #  if @u != @v;
  29.  
  30. #Close files
  31. close $U;
  32. close $V;
  33.  
  34. my $u = @u
  35. my $v = @v
  36. push @dat, sprintf"%.2f %.2f ", $u, $v;
  37.  
  38. $file = "ventscol2.dat";
  39. open( DATA, ">$file" );
  40. print DATA @dat;
  41. close DATA;                      }
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4
enric73
Perlero nuevo
Perlero nuevo
 
Mensajes: 154
Registrado: 2012-03-16 06:27 @311

Re: Editar ficheros .dat en un solo .dat y por columnas

Notapor explorer » 2012-04-16 14:34 @648

Pero si no es tan complicado... si tenemos un array, eso implica que tenemos que hacer un bucle que recorra sus elementos. Y por cada uno, lo pintamos.

Según lo que dices ahora, el problema es mucho más fácil de solucionar. Solo hay que leer los archivos barajados con zip, y luego, volcar los datos de todo el archivo, línea a línea.
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. #!/usr/bin/perl
  2. use v5.10;
  3. #use POSIX 'strftime';
  4. #use Class::Date qw(date now);
  5. use List::MoreUtils qw<zip>;
  6. use autodie;
  7.  
  8. my @archivos_U = </home/enric/ASCII/2012041400/UGRD10m*.dat>;
  9. my @archivos_V = </home/enric/ASCII/2012041400/VGRD10m*.dat>;
  10.  
  11. die "ERROR: No coinciden el número de archivos U y V.\n"
  12.     if @archivos_U != @archivos_V;
  13.  
  14. # Aquí falta ordenar los archivos por hora
  15.  
  16.  
  17. # Proceso
  18. my @archivos = zip(@archivos_U, @archivos_V);
  19.  
  20. open my $VENT, '>', 'vent.dat';
  21.  
  22. for my $archivo (@archivos) {
  23.     open my $FILE, '<', $archivo;
  24.     while (<$FILE>) {
  25.         chomp;
  26.         printf $VENT "%.2f\n", $_;
  27.     }
  28.     close $FILE;
  29. }
  30.  
  31. close $VENT;
  32. __END__
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

Re: Editar ficheros .dat en un solo .dat y por columnas

Notapor enric73 » 2012-04-16 16:17 @720

Muchas gracias, explorer.

No me acordé de barajar con el zip, no caí en la cuenta. Tal como está el script no se guarda un fichero.dat al final. He intentado guardarlo pero queda vacío. Adjunto el script con unas líneas para guardar el .dat con nombre vent.dat. Espero poder ir más suelto en breve.

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1.  #!/usr/bin/perl
  2.     use v5.10;
  3.     #use POSIX 'strftime';
  4.     #use Class::Date qw(date now);
  5.     use List::MoreUtils qw<zip>;
  6.     use autodie;
  7.      
  8.     my @archivos_U = </home/enric/ASCII/2012041400/UGRD10m*.dat>;
  9.     my @archivos_V = </home/enric/ASCII/2012041400/VGRD10m*.dat>;
  10.      
  11.     die "ERROR: No coinciden el número de archivos U y V.\n"
  12.         if @archivos_U != @archivos_V;
  13.      
  14.     # Aquí falta ordenar los archivos por hora
  15.      
  16.      
  17.     # Proceso
  18.     my @archivos = zip(@archivos_U, @archivos_V);
  19.     open (Fichero, ">vent.dat") or die "$!\n";
  20.     for my $archivo (@archivos) {
  21.         open my $FILE, '<', $archivo;
  22.         while (<$FILE>) {
  23.             chomp;
  24.             printf $FILE "%.2f\n", $_;
  25.         }
  26.         close $FILE;
  27.     }
  28.       close Fichero;
  29.     __END__
  30.  
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4
enric73
Perlero nuevo
Perlero nuevo
 
Mensajes: 154
Registrado: 2012-03-16 06:27 @311

Re: Editar ficheros .dat en un solo .dat y por columnas

Notapor explorer » 2012-04-16 16:26 @726

Pues el caso es que me he dado cuenta de que hay un error en mi código.

Lo he arreglado y le he puesto lo que querías.

Y sí, te aconsejo que te pongas en serio con esto, si quieres seguir usando Perl.

Por dónde empezar.
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

Re: Editar ficheros .dat en un solo .dat y por columnas

Notapor enric73 » 2012-04-19 10:50 @493

¡Gracias, explorer!

Un saludo a todos.
enric73
Perlero nuevo
Perlero nuevo
 
Mensajes: 154
Registrado: 2012-03-16 06:27 @311

Anterior

Volver a Básico

¿Quién está conectado?

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