• Publicidad

Juntar dos archivos de texto y sacarlos a otro

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

Juntar dos archivos de texto y sacarlos a otro

Notapor Icaro » 2009-09-06 16:08 @714

Bueno, me presento, soy Icaro, estoy empezando en esto de Perl. Después de hacer un curso guiado para meter correctamente el captcha de la web, me dispongo a hacer mi pregunta.

Mi problema es que tengo dos archivos de texto, Texto1.txt, Texto2.txt y contienen una lista de palabras.

Ejemplo:
Sintáxis: [ Descargar ] [ Ocultar ]
Using text Syntax Highlighting
texto1: Admin, 123, great, Password
texto2: Great, Admin, 123, password, excel, good
Coloreado en 0.000 segundos, usando GeSHi 1.0.8.4


Y la salida sería esto:

Sintáxis: [ Descargar ] [ Ocultar ]
Using text Syntax Highlighting
Text3.txt: AdminGreat, AdminAdmin, Admin123, Adminpassword ... PasswordGreat, PasswordAdmin, etc
Coloreado en 0.000 segundos, usando GeSHi 1.0.8.4


Lo he puesto en forma de línea para ahorrar espacio, pero las palabras están de esta manera (en forma de columna única):

Sintáxis: [ Descargar ] [ Ocultar ]
Using text Syntax Highlighting
Admin
123
great
Coloreado en 0.000 segundos, usando GeSHi 1.0.8.4


El problema que me surgió al intentarlo en PHP y Java es que se queda colgado debido a la cantidad de palabras, y como quiero aprender Perl pues es la mejor ocasión para empezar :)

Gracias de antemano.
Icaro
Perlero nuevo
Perlero nuevo
 
Mensajes: 3
Registrado: 2009-09-06 15:57 @706

Publicidad

Re: Juntar dos archivos de texto y sacarlos a otro

Notapor explorer » 2009-09-06 16:16 @719

Bienvenido a los foros de Perl en Español, Icaro.

¿Tienes hecho algún código en Perl para resolver este problema?
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: Juntar dos archivos de texto y sacarlos a otro

Notapor Icaro » 2009-09-06 16:21 @723

No, no sé aún cómo va todo esto del Perl y menos cómo abrir un archivo de texto y demás, por eso solicito la ayuda :). Revisé otro código que hay por el foro en el que el user juntaba y ordenaba dos archivos de texto pero no conseguí adaptarlo y desistí.

P.S: Perdón por las faltas, nunca las cometo, tengo fiebre y no veo el teclado.

P.S: Son tildes u acento gráfico, no son acentos :).
Última edición por explorer el 2009-09-06 16:34 @731, editado 2 veces en total
Razón: Tildes :)
Icaro
Perlero nuevo
Perlero nuevo
 
Mensajes: 3
Registrado: 2009-09-06 15:57 @706

Re: Juntar dos archivos de texto y sacarlos a otro

Notapor explorer » 2009-09-06 16:31 @730

Pues de eso se trata... de intentarlo...

Puedes empezar por visitar la sección de Tutoriales, en la pestaña superior.

Por lo que veo del problema, se puede realizar así:
* Abrir el primer fichero y leer las palabras y meterlas en un array
* Lo mismo para segundo fichero, en otro array
* Hacer un bucle por todas las palabras del primer arreglo. Por cada una de ellas,
* Hacer un bucle por todas las palabras del segundo arreglo.
* Imprimir la concatenación de la primera y la segunda palabras.
* Fin del bucle segundo
* Fin del bucle primero

De cada de estas operaciones hay decenas de ejemplos, en estos foros.

Haz una prueba con tu código, y si no te sale, lo publicas y vemos cómo arreglarlo.
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: Juntar dos archivos de texto y sacarlos a otro

Notapor Icaro » 2009-09-06 17:15 @760

Veamos, con algo de ayuda de ustedes y de Internet tengo esto:

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. use strict;
  2. use warnings;
  3.  
  4. my %frequencies = ();
  5. my $re = '';
  6. print "Archivo de salida:";
  7. chomp($re = <STDIN>);
  8. Begin();
  9.  
  10. sub Begin {
  11.    print "Archivo de entrada:";
  12.    chomp(my $ro = <STDIN>);
  13.    open(RO, $ro) or die "No se pudo abrir el archivo $ro: $!";
  14.    open(RE, ">>$re") or die "No se pudo abrir el archivo $re: $!";
  15.    print RE while <RO>;
  16.    close(RO);
  17.    close(RE);
  18.    Addfile();
  19. }
  20.  
  21. sub Addfile {
  22.    print "¿Agregar otro archivo?(s/n):"; #puedes juntar más de dos textos#
  23.    chomp(my $response = <STDIN>);
  24.    if( $response eq 's') {
  25.       Begin();
  26.    }
  27.    else {
  28.       Count();
  29.    }
  30. }
  31.  
  32. sub Count {
  33.    print "\n*** Frecuencia en las que se reptie la palabra... ***\n"; #Es innecesario pero me gusta#
  34.    open(FH,$re) or die "No se pudo abrir el archivo $re: $!";
  35.    while(<FH>) {
  36.       my ($word) = $_ =~ /^(\w+)/;
  37.       $frequencies{$word}++;
  38.    }
  39.    close(FH);
  40.    foreach my $word (sort {$frequencies{$b} <=> $frequencies{$a}} keys %frequencies) {
  41.       print "$word\t$frequencies{$word}\n";
  42.    }
  43. }
  44. exit;
Coloreado en 0.003 segundos, usando GeSHi 1.0.8.4


Uso hash porque creo que será mejor ya que utilizaré listas de palabras muy grandes. El problema es que me genera el archivo de esta forma:

Sintáxis: [ Descargar ] [ Ocultar ]
Using text Syntax Highlighting
aaaaa
bbbbb
ccccc
ddddd
11111
22222
33333
44444
Coloreado en 0.000 segundos, usando GeSHi 1.0.8.4


O sea, en vez de guardar como yo quiero lo único que hace es añadir la palabras del archivo 2 debajo de las del archivo 1 en vez de combinarla.
Icaro
Perlero nuevo
Perlero nuevo
 
Mensajes: 3
Registrado: 2009-09-06 15:57 @706

Re: Juntar dos archivos de texto y sacarlos a otro

Notapor explorer » 2009-09-07 02:59 @166

No debes usar hash porque Perl no almacena los pares clave/valor en el orden en que se los das. A la hora de recuperarlos te llevarás la sorpresa de que has perdido el orden en que fueron leídas de los ficheros.

Y en cuanto a la combinación... no existe porque no la haces.

Lo único que hace el programa que muestras es hacer una estadística de la frecuencia de aparición de las palabras y luego sacarlas por ese orden. Pero no hay combinación ninguna.

¿No dices que lo tienes hecho para PHP y Java? Pues coges las líneas para PHP y apenas tienes que modificar muy poco para obtener el de Perl.

Ya has hecho la parte de abrir y leer ficheros, que podría quedar mejor así:

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. #!/usr/bin/perl
  2. use strict;
  3. use warnings;
  4. use diagnostics;
  5.  
  6. open my $fichero1, q[<], 'Texto1.txt';  # Abrimos
  7. open my $fichero2, q[<], 'Texto2.txt';
  8.  
  9. my @palabras1 = <$fichero1>;            # Leemos
  10. my @palabras2 = <$fichero2>;
  11.  
  12. close $fichero1;                        # Cerramos
  13. close $fichero2;
  14.  
  15. chomp @fichero1;                        # Quitamos los caracteres de fin de línea
  16. chomp @fichero2;
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4


Ahora ya tienes todas las palabras leídas en dos arreglos. Solo te queda realizar un doble bucle que recorra cada una ellos, sacando la concatenación de los elementos. El operador de concatenación, en Perl, es el '.'. También puedes hacer la concatenación poniendo las dos variables en una expresión entrecomillada: por ejemplo: print "$palabra1$palabra2\n";

Ánimo, ¡que solo quedan 5 líneas!

P.D. ¿De cuántas palabras estamos hablando para que no funcione en PHP y Java?
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


Volver a Básico

¿Quién está conectado?

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

cron