• Publicidad

Concatenar archivos de texto 1 a 1

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

Concatenar archivos de texto 1 a 1

Notapor FluiD » 2011-05-29 17:45 @781

Hola, hace tiempo que no trasteo con Perl y me cuesta la vida cada vez que tengo que hacer algún apaño...

Quiero hacer un script que abra 2 archivos de texto en los cuales hay palabras del tipo (por ejemplo):

Sintáxis: [ Descargar ] [ Ocultar ]
Using text Syntax Highlighting
Dic1:
aaa
bbb
ccc
...
Coloreado en 0.000 segundos, usando GeSHi 1.0.8.4

Sintáxis: [ Descargar ] [ Ocultar ]
Using text Syntax Highlighting
Dic2:
111
112
113
...
Coloreado en 0.000 segundos, usando GeSHi 1.0.8.4


Pues bueno, lo que quiero hacer es algo tan simplón como que las concatene 1 a 1:

Sintáxis: [ Descargar ] [ Ocultar ]
Using text Syntax Highlighting
Dic1+Dic2:
aaa111
bbb112
ccc113
Coloreado en 0.000 segundos, usando GeSHi 1.0.8.4


Lo he intentado anidando 2 bucles pero como es lógico me las concatena 1 a todas:
Sintáxis: [ Descargar ] [ Ocultar ]
Using text Syntax Highlighting
aaa111
aaa112
aaa113
bbb111
bbb112
...
Coloreado en 0.000 segundos, usando GeSHi 1.0.8.4


Pues eso, que algo tan simple y no tengo narices a hacerlo :-(

A ver si alguien me orienta un poquete.

Saludossss

MiG.G
FluiD
Perlero nuevo
Perlero nuevo
 
Mensajes: 14
Registrado: 2009-10-16 14:38 @651

Publicidad

Re: Concatenar archivos de texto 1 a 1

Notapor explorer » 2011-05-29 18:34 @815

Sería interesante ver el código...

Por otra parte, puedes usar el comando paste, tal y como se comenta en el hilo Unir dos archivos.

Ahí también hay código para hacerlo en Perl.
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: Concatenar archivos de texto 1 a 1

Notapor panterozo » 2011-05-31 15:40 @694

Hola FluiD:

Esta es mi version ;)

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. #!/usr/bin/perl
  2.  
  3. use strict;
  4. my $a = 'aaa
  5. bbb
  6. ccc';
  7. my $b = '111
  8. 112
  9. 113';
  10.  
  11. my $fh = undef;
  12. open($fh,"<",\$a);
  13. my %hash;
  14. my $i=0;
  15. while(<$fh>){
  16.         # Sacamos las letras del primer archivo (suponiendo que cada línea en el archivo tenga 3 letras)
  17.         my @array;
  18.         @array = $_ =~ m/(\w)+(\w)+(\w)+/x;
  19.         $hash{"$i"} = \@array;
  20.         $i++;  
  21. }
  22. # Lo mismo para el segundo archivo
  23. my $fh1 = undef;
  24. open($fh1,"<",\$b);
  25. my %hash1;
  26. my $i=0;
  27. while(<$fh1>){
  28.         # Sacamos los numeros
  29.         my @array1;
  30.         @array1 = $_ =~ m/(\d)+(\d)+(\d)+/x;      
  31.         $hash1{"$i"} = \@array1;
  32.         $i++;
  33. }
  34. foreach my $k (sort keys  %hash){
  35.         # $i mantiene el valor anterior
  36.         for(my $j=0; $j < $i; $j++){
  37.                 # Imprime en pantalla, pero lo puedes guardar claramente
  38.                 print sprintf "%- 10s".${$hash{$k}}[$j];
  39.                 print sprintf "%- 10s".${$hash1{$k}}[$j];
  40.         }
  41.         print "\n";
  42. }
  43.  
Coloreado en 0.003 segundos, usando GeSHi 1.0.8.4


Pero claramente puede hacerse menos complicada :P... Esto funciona si el largo de la fila es igual en ambos archivos y además tienen la misma cantidad de líneas ;)

pd: El archivo lo puedes abrir como...
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. open(F,"<archivoA");
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4

y lo recorres...
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. while(<F>){
  2.     # y aquí pones que saque los números o letras...
  3. }
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4

Saludos¡¡¡


No es lo que pediste :s.. jajaja, pero creo que es bastante cerca de lo que pedias ;)

Sintáxis: [ Descargar ] [ Ocultar ]
Using text Syntax Highlighting
          a          1          a          1          a          1
          b          1          b          1          b          2
          c          1          c          1          c          3
Coloreado en 0.000 segundos, usando GeSHi 1.0.8.4


Eso es lo que muestra, pero basta con que imprimas distinto ;)

basta que cambies el foreach asi...

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. foreach my $k (sort keys  %hash){
  2.         foreach(@{$hash{$k}}){print $_;}
  3.         foreach(@{$hash1{$k}}){print $_;}
  4.         print "\n";
  5. }
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4


Mis disculpas por no leer bien o recordar qué era lo que pedías... Pero estas cosas suceden ;)
panterozo
Perlero nuevo
Perlero nuevo
 
Mensajes: 160
Registrado: 2010-01-26 08:36 @400


Volver a Básico

¿Quién está conectado?

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