• Publicidad

Comparación de "párrafo" completo

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

Comparación de "párrafo" completo

Notapor ebidrey » 2011-12-28 16:09 @715

Buenas tardes. Este es mi primer post. Junto con saludarles, quisiera saber si alguien conoce una forma de comparar si un fichero tiene un párrafo completo de otro fichero. Es decir:

Fichero 1:
Sintáxis: [ Descargar ] [ Ocultar ]
Using text Syntax Highlighting
<etiqueta>
mi nombre es
ebidrey
<etiqueta>
Coloreado en 0.000 segundos, usando GeSHi 1.0.8.4


Fichero 2:
Sintáxis: [ Descargar ] [ Ocultar ]
Using text Syntax Highlighting
hola
<etiqueta>
mi nombre es
ebidrey
<etiqueta>
y soy nuevo
en perl en español
Coloreado en 0.000 segundos, usando GeSHi 1.0.8.4


La idea es que al comparar los ficheros, el script me diga si lo que está entre <etiqueta> es EXACTAMENTE lo mismo o no.

De antemano, muchas gracias.
ebidrey
Perlero nuevo
Perlero nuevo
 
Mensajes: 5
Registrado: 2011-12-28 15:53 @703

Publicidad

Re: Comparación de "párrafo" completo

Notapor explorer » 2011-12-29 07:54 @371

Bienvenido a los foros de Perl en español, ebidrey.

Por comparar, hay muchas formas. Con expresiones regulares, con index(), mirando línea a línea, etc.

¿No tienes algo de código ya hecho?
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: Comparación de "párrafo" completo

Notapor ebidrey » 2011-12-29 11:17 @512

Muchas gracias por tu respuesta, ahora he escrito algo de código:

Sintáxis: [ Descargar ] [ Ocultar ]
  1. while(<PATTERN>){ push(@pat,$_); } # Archivo "patrón a buscar" en un array 
  2. while(<INPUT>){ push(@inp,$_); }  # Archivo donde quiero buscar el patrón 
  3. foreach (@inp) 
  4.   if($_ =~ /patron_de_busqueda/) 
  5.   { 
  6.     push(@between, $counter); 
  7.   } 
  8.   $counter++; 
  9. my $end = pop(@between) - 1; 
  10. my $start = pop(@between) + 1; 
  11. my @new_inp; 
  12. my $i; 
  13.  
  14. for($i = $start; $i <= $end; $i++) 
  15.   push(@new_inp,$inp[$i]); #se ingresa al nuevo array lo que está entre líneas start y end 
  16.  
  17. is(@pat, @new_inp, "Added code is equal to the pattern"); 
  18.  
  19. #luego se compara cada elemento de @new_imp con @pat 
  20.  


¿Existirá algo más óptimo? Me parece que sí.
ebidrey
Perlero nuevo
Perlero nuevo
 
Mensajes: 5
Registrado: 2011-12-28 15:53 @703

Re: Comparación de "párrafo" completo

Notapor explorer » 2011-12-29 13:22 @598

A ver... a ver...

En el primer fichero, solo hay un párrafo, y tenemos que buscar cuántas veces aparece ese párrafo en el segundo fichero, ¿no?

En cuanto a tu código... creo que no hace nada de eso...
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: Comparación de "párrafo" completo

Notapor ebidrey » 2011-12-29 13:36 @608

lo que hace el codigo es ingresar un file grande a un array. Luego de esto, a este array, se le extrae solo lo que está dentro de determinadas etiquetas, por ejemplo, entre la etiqueta <hola> y la etiqueta <hola>. Este contenido se ingresa a otro array, que es un subconjunto de el array grande. Luego, con este array subconjunto, se compara con el file patron y, si son iguales, el resultado es verdadero.

Gracias por la respuesta.

Pd: La comparacion final no la puse debido a la trivialidad.

ebidrey
ebidrey
Perlero nuevo
Perlero nuevo
 
Mensajes: 5
Registrado: 2011-12-28 15:53 @703

Re: Comparación de "párrafo" completo

Notapor ebidrey » 2011-12-29 13:46 @615

Creo que no respondí bien a tu pregunta.

En un file (file1) hay un párrafo, y la idea es buscar si es que aparece exactamente igual en otro file (file2), pero que claramente posee un número superior de líneas, por ejemplo:

File 1:
Sintáxis: [ Descargar ] [ Ocultar ]
  1. señor 
  2. estoy buscando una 
  3. solucion a  
  4. mi problema 
  5. en perl 


File 2:
Sintáxis: [ Descargar ] [ Ocultar ]
  1. esto es lo que debo 
  2. sacar del gran 
  3. arreglo 
  4. <hola> 
  5. señor 
  6. estoy buscando una 
  7. solucion a 
  8. mi problema 
  9. en perl 
  10. <hola> 
  11. esto también 
  12. debo 
  13. sacarlo del gran 
  14. arreglo 


Entonces, lo rojo del file1, quiero determinar si es lo mismo que hay dentro de las etiquetas azules del file2. Necesito saber si es que no tiene ninguna variación. Espero que se entienda bien.

Muchas gracias.
ebidrey
Perlero nuevo
Perlero nuevo
 
Mensajes: 5
Registrado: 2011-12-28 15:53 @703

Re: Comparación de "párrafo" completo

Notapor explorer » 2011-12-29 18:25 @809

Bueno, yo tengo una solución, siguiendo más o menos tus indicaciones:
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. #!/usr/bin/perl
  2. use 5.010;
  3. use strict;
  4. use warnings;
  5. use diagnostics;
  6.  
  7.  
  8. my $fichero1 = '<etiqueta>
  9. mi nombre es
  10. ebidrey
  11. <etiqueta>';
  12.  
  13. my $fichero2 = 'hola
  14. <etiqueta>
  15. mi nombre es
  16. ebidrey
  17. <etiqueta>
  18. y soy nuevo
  19. en perl en español';
  20.  
  21. # extracción de la etiqueta (este paso se puede obviar si la etiqueta siempre es la misma)
  22. my($etiqueta) = $fichero1 =~ /<(.+?)>/;
  23.  
  24. # extracción del contenido de la etiqueta (lo mismo que antes)
  25. my($parrafo1) = $fichero1 =~ /(<$etiqueta>.+?<$etiqueta>)/s;
  26.  
  27. # comprobamos si existe el párrafo
  28. if (-1 != index $fichero2, $parrafo1) {
  29.     say "Encontrado";
  30. }
  31. else {
  32.     say "No encontrado";
  33. }
  34.  
  35. __END__
Coloreado en 0.005 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: Comparación de "párrafo" completo

Notapor ebidrey » 2011-12-30 08:29 @395

Muchas gracias, eres un monstruo del Perl, estoy muy impresionado con el lenguaje y con el foro también. Nos veremos muy seguido.

Feliz Año Nuevo

Gracias.
ebidrey
Perlero nuevo
Perlero nuevo
 
Mensajes: 5
Registrado: 2011-12-28 15:53 @703


Volver a Básico

¿Quién está conectado?

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

cron