Perl en Español

  1. Home
  2. Tutoriales
  3. Foro
  4. Artículos
  5. Donativos
  6. Publicidad
 
Índice general » Mundo Perl » Básico » Comparación de "párrafo" completo  RESUELTO Responder al tema
Nuevo tema


Página 1 de 1  [ 8 mensajes ] 
 
Nota 2011-12-28 16:09 @715

Perlero Nuevo
Registrado: 2011-12-28 15:53 @703
Mensajes: 5
Comparación de "párrafo" completo
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:
Syntax: [ Download ] [ Hide ]
Using text Syntax Highlighting
<etiqueta>
mi nombre es
ebidrey
<etiqueta>


Fichero 2:
Syntax: [ Download ] [ Hide ]
Using text Syntax Highlighting
hola
<etiqueta>
mi nombre es
ebidrey
<etiqueta>
y soy nuevo
en perl en español


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.


Nota 2011-12-29 07:54 @371
Avatar de Usuario
Administrador
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España
Mensajes: 10249
Re: Comparación de "párrafo" completo
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


Nota 2011-12-29 11:17 @512

Perlero Nuevo
Registrado: 2011-12-28 15:53 @703
Mensajes: 5
Re: Comparación de "párrafo" completo
Muchas gracias por tu respuesta, ahora he escrito algo de código:

Syntax: [ Download ] [ Hide ]
  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í.


Nota 2011-12-29 13:22 @598
Avatar de Usuario
Administrador
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España
Mensajes: 10249
Re: Comparación de "párrafo" completo
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


Nota 2011-12-29 13:36 @608

Perlero Nuevo
Registrado: 2011-12-28 15:53 @703
Mensajes: 5
Re: Comparación de "párrafo" completo
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


Nota 2011-12-29 13:46 @615

Perlero Nuevo
Registrado: 2011-12-28 15:53 @703
Mensajes: 5
Re: Comparación de "párrafo" completo
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:
Syntax: [ Download ] [ Hide ]
  1. señor 
  2. estoy buscando una 
  3. solucion a  
  4. mi problema 
  5. en perl 


File 2:
Syntax: [ Download ] [ Hide ]
  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.


Nota 2011-12-29 18:25 @809
Avatar de Usuario
Administrador
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España
Mensajes: 10249
Re: Comparación de "párrafo" completo  RESUELTO
Bueno, yo tengo una solución, siguiendo más o menos tus indicaciones:
Syntax: [ Download ] [ Hide ]
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__

_________________
JF^D Perl programming


Nota 2011-12-30 08:29 @395

Perlero Nuevo
Registrado: 2011-12-28 15:53 @703
Mensajes: 5
Re: Comparación de "párrafo" completo
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.


Responder al tema  [ 8 mensajes ] 

Reglas del Foro
No puedes abrir nuevos temas en este Foro
No puedes responder a temas en este Foro
No puedes editar tus mensajes en este Foro
No puedes borrar tus mensajes en este Foro
No puedes enviar adjuntos en este Foro

Publicidad

Socializa

Síguenos por Twitter

Suscríbete GRATUITAMENTE al Boletín de Perl en Español

Saltar a:  
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Traducción al español por Huan Manwë para phpbb-es.com
phpBB SEO