• Publicidad

Manejar varios ficheros de texto

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

Manejar varios ficheros de texto

Notapor korsakof » 2016-03-02 11:14 @509

Hola.

Primeramente, saludar al foro. Soy nuevo en esto de Perl y me han encargado un sistema de gestión basado en unas listas de IP y URL (varios ficheros de texto plano).

El proceso sería validar o comprobar su existencia de dominios o IP que enviamos a través de un parámetro en esos ficheros.

Me gustaría saber si alguno ha tenido ese problema y si habría una forma genérica de cargar las listas y tener un método que lo comprobase en todos los ficheros, si existe esa cadena o no.

La idea es crear una especie de librería que recogiese esos métodos. Otra duda que me surge: ¿Qué tipo de fichero utilizar? ¿Cuál es la mejor forma de comparar, con regex o con eq?

¡Muchas gracias por la ayuda!
korsakof
Perlero nuevo
Perlero nuevo
 
Mensajes: 11
Registrado: 2016-03-02 03:20 @181

Publicidad

Re: Manejar varios ficheros de texto

Notapor explorer » 2016-03-02 16:50 @743

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

El tema de abrir archivos para buscar información en ellos se ha tratado algunas veces, sobre todo en el subforo de Bioinformática, ya que el problema es el mismo: buscar una cadena en uno o más archivos.

El utilizar regex o eq, pues depende.

Si, por ejemplo, leemos simplemente las líneas de los archivos, necesitaremos usar regex para localizar la IP o dominio en algún lugar de esas líneas.

Pero, si de cada línea extraemos los valores (quizás con un split()), entonces podríamos usar eq, ya que sí podemos hacer una comparación entre lo que buscamos y un campo concreto de la línea.

Esto lo puedes resolver con archivos simples de texto. Pero si el tamaño aumenta mucho, pues quizás es mejor empezar a pensar en usar una base de datos (SQLite, por ejemplo).
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14476
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Re: Manejar varios ficheros de texto

Notapor korsakof » 2016-03-09 03:11 @174

Hola,

El problema es que no podemos usar una BBDD y las URL vienen de muchas formas, la IP tiene una única. El tema había pensado en crear varios ficheros que dependiesen de una "librería" o manejador que por medio de unas funciones se pueda acceder fácilmente a esos ficheros y consultarlos.

El problema que también tengo es que algunos serán que busque lo contenido en una de las lineas del fichero y la otra que sea igual a la cadena que contiene el fichero.

Por cierto, ¿debería plantear esta duda en el foro de bioinformática?

Muchas gracias. Un saludo.
korsakof
Perlero nuevo
Perlero nuevo
 
Mensajes: 11
Registrado: 2016-03-02 03:20 @181

Re: Manejar varios ficheros de texto

Notapor explorer » 2016-03-09 11:07 @505

No creo que sea complicado el tema... depende de dónde partimos.

¿Puedes poner un ejemplo de los archivos? Aunque sean con direcciones falsas. Y luego, ejemplos de las búsquedas/comprobaciones que quieres hacer.

Con unas pocas líneas, vale. Aquellas que sean significativas.
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14476
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Re: Manejar varios ficheros de texto

Notapor korsakof » 2016-03-14 05:57 @290

Hola,

Os adjunto un ejemplo de aproximadamente las cadenas que quiero manejar.
Sintáxis: [ Descargar ] [ Ocultar ]
Using text Syntax Highlighting
5.5.5.5
555.555.555.555
plaster.com.au/system/logs/loguiert.exe
http://jarenmasteri.org/wp-content/plugins/klas.php
http://lokier.freetzi.com/
http://lokier.freetzi.com/imprimir/Caster.zip
https://kolilio.com/
kernel
kernel.org
lokier.toyiner.com
manquerkleiner.com/80.exe?1
Coloreado en 0.000 segundos, usando GeSHi 1.0.8.4


¡Muchas gracias por la ayuda!
korsakof
Perlero nuevo
Perlero nuevo
 
Mensajes: 11
Registrado: 2016-03-02 03:20 @181

Re: Manejar varios ficheros de texto

Notapor explorer » 2016-03-14 16:39 @735

Ya veo el problema... la entrada puede ser cualquier cosa, pero luego hay que ver si está en los archivos. Pero... ¿qué estamos buscando?

Quiero decir: una URI se compone de varios componentes: esquema, autoridad, ruta, consulta, fragmento (en la parte de autoridad estará el nombre del servidor).

Con un módulo como URI::Split se pueden obtener esos componentes por separado. Entonces... ¿cómo hacemos la comparación entre lo que recibimos por la entrada como argumento, y el contenido de los archivos?

¿Consideramos que lo hemos encontrado si la autoridad coincide? ¿O también debe coincidir todo lo demás (ruta, consulta, fragmento, esquema)?

Dicho de otra manera: si el argumento DEBE ser igual a alguna línea de los archivos, nos valdría con hacer una simple búsqueda y hacer comparaciones con 'eq', pero si nos vale que coincide la parte de autoridad o autoridad más ruta, deberemos preprocesar todas las líneas para separar en componentes, antes de hacer las comparaciones. Y quedarnos con la comparación que más coincidencia nos dé.
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14476
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Re: Manejar varios ficheros de texto

Notapor korsakof » 2016-03-30 04:50 @243

Hola.

Perdona que haya tardado en contestar pero he estado fuera por un problema de salud.

No es una URI como tal.
El tema es que en la línea que tú envías al script puede ser cualquiera de lo anteriormente expuesto.

Entrada:
Sintáxis: [ Descargar ] [ Ocultar ]
Using text Syntax Highlighting
128.235.62.12
http://perlenespanol.com/
perlenespanol.com
posting.php
Coloreado en 0.000 segundos, usando GeSHi 1.0.8.4


Fichero de lectura:
Sintáxis: [ Descargar ] [ Ocultar ]
Using text Syntax Highlighting
http://www.perlenespanol.com
182.235.62.12
posting.php
Coloreado en 0.000 segundos, usando GeSHi 1.0.8.4


Debería de encontrar perlenespanol.com, la URL http://perlenespanol.com/foro/posting.php y la IP.

No sé si me explico bien.

¡Muchas gracias por tu ayuda!
korsakof
Perlero nuevo
Perlero nuevo
 
Mensajes: 11
Registrado: 2016-03-02 03:20 @181

Re: Manejar varios ficheros de texto

Notapor explorer » 2016-03-30 16:10 @715

Entiendo que, con una simple búsqueda de cadenas de caracteres, se localice la IP, pero no lo demás.

Me explico: con comparaciones de cadenas no podemos deducir "de forma sencilla", que de http://www.perlenespanol.com podemos encontrar perlenespanol.com.

Y tampoco podemos deducir http://perlenespanol.com/foro/posting.php, porque "nos falta" la carpeta /foro.

La solución complicada sería, extraer de la entrada los URL, dividirlos en componentes, y ver si la URL coincide con todo o parte de los componentes que estamos buscando.

O... quizás la solución sea la que comentaste antes: una búsqueda simple de cadenas de caracteres.

Se podría resolver de forma parecida a uno de los últimos mensajes puestos en el foro: lees todas las líneas de los parámetros que recibimos, y crear con ellas un patrón de expresiones regulares, separados con '|' (fácil de hacer con join()). Y ese patrón lo aplicas a cada línea del archivo de entrada. Si coincide, sacas el patrón que coincide con el contenido de la línea.
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14476
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Re: Manejar varios ficheros de texto

Notapor korsakof » 2016-04-11 06:12 @300

Lo del patrón no me vale aunque gracias por la idea ya que debe ser "exacto", como os expliqué antes.

He pensado crear un estándar en el que solo se pegue el dominio y el programa compare de la siguiente forma:

[hhtp://|www.]perlenespanol.com/lo_que_sea/pagina.html

¿Sería dificultoso encapsular la carga de las listas en una tabla hash y crear unos métodos en un "módulo" para después ser reutilizado en cualquier parte del código o mejor hago cargas individuales?

¿Hay algún tutorial donde expliquen paso a paso cómo hacer un módulo?

Gracias por la ayuda. Un saludo.
korsakof
Perlero nuevo
Perlero nuevo
 
Mensajes: 11
Registrado: 2016-03-02 03:20 @181

Re: Manejar varios ficheros de texto

Notapor explorer » 2016-04-11 23:06 @004

Es que eso es casi un patrón:

(http://(www[.])?)?(?:perlenespanol[.]com|67[.]222[.]138[.]90)(/lo_que_sea/pagina.html)?

En la documentación tienes información sobre la construcción de módulos:
Sintáxis: [ Descargar ] [ Ocultar ]
Using text Syntax Highlighting
perlmod             Perl modules: how they work
perlmodlib          Perl modules: how to write and use
perlmodstyle        Perl modules: how to write modules with style
perlmodinstall      Perl modules: how to install from CPAN
perlnewmod          Perl modules: preparing a new module for distribution
Coloreado en 0.000 segundos, usando GeSHi 1.0.8.4

Algunos de ellos traducidos: https://www.metacpan.org/module/ENELL/P ... b/POD2/ES/

No hay problema en crear el hash o leer las listas y ponerlo en módulos. De hecho, es algo que yo también suelo hacer, en forma de variables globales o referenciándolas con la ruta completa.
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14476
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Siguiente

Volver a Básico

¿Quién está conectado?

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

cron