• Publicidad

Extraer cadena de texto no específico

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

Re: Extraer cadena de texto no específico

Notapor explorer » 2012-06-26 16:42 @737

juancs011 escribiste:En el archivo full.txt se encuentran las palabras 'SIP', 'at' y 'port' en la misma línea y las palabras que están después de 'SIP' y de 'port' tienen las mismas características (5 números) pero 'SIP' tiene comillas y 'port' no las tiene. Yo lo que hice fue colocar la misma instrucción que me extrae el número 'SIP' para que me extraiga el 'port' pero no funciona, me crea el archivo2.txt pero vacío.
Ya encontré el problema: después de 'port' viene un número, y luego nada -acaba la línea-. En cambio, en la expresión regular tienes puesto que después del número debe existir un espacio en blanco. Y claro, eso no sucede nunca. Por eso no genera ninguna salida.

La solución es cambiar la expresión regular:
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. if (/ SIP '(\d+)' at (\S+) port (\d+)/)
Coloreado en 0.002 segundos, usando GeSHi 1.0.8.4

Ahora sí: estamos buscando por conjuntos de dígitos (\d+). Y no hay espacio en blanco detrás.

juancs011 escribiste:Yo utilizo Notepad como editor y para ejecutar el archivo .pl hago doble clic sobre el archivo y allí mismo se crea el nuevo archivo .txt.
También puedes abrir una ventana de entrada de línea de comandos, y así poder ejecutar el programa todas las veces que quieras, y puedes ver los mensajes que van saliendo con los print() (en caso de que tengas print() hacia la salida estándar).

juancs011 escribiste:Traté de instalar algo que se llama Strawberry pero por políticas de seguridad de la empresa no lo logré instalar bien.
Sorpresa... ¿Qué Perl has instalado entonces? Porque Perl no viene de serie con los Windows... (sistema que hace años que ya no uso).

juancs011 escribiste:Yo quisiera entender finalmente cómo utilizar esos códigos para extraer cadenas de texto. Lo que tu me explicas brevemente se entiende bien, igualmente el archivo que me enviaste, pero al buscar por Internet y tratar de aplicar cambios a lo que me enviaste no logro hacer que funcione.

Yo suelo hacer muchas pruebas en la propia línea de comandos. Arranco una terminal y voy ejecutando perl en el directorio donde tengo el programa y los archivos que quiero procesar.

Por ejemplo, con la siguiente orden salen los 3 campos que queremos:
Sintáxis: [ Descargar ] [ Ocultar ]
Using bash Syntax Highlighting
  1. perl -n -E "/ SIP .(\d+). at (\S+) port (\d+)/ and say \"[\$1][\$2][\$3]\"; " full.txt
  2. [52001][10.75.4.27][64498]
  3. [52010][10.75.4.24][26384]
  4. [21001][10.72.137.20][44110]
  5. [52003][10.75.4.56][54596]
  6. [52004][10.75.4.49][6050]
  7.  
Coloreado en 0.002 segundos, usando GeSHi 1.0.8.4
En terminal Linux:
Sintáxis: [ Descargar ] [ Ocultar ]
Using bash Syntax Highlighting
  1. perl -n -E '/ SIP .(\d+). at (\S+) port (\d+)/ and say "[$1][$2][$3]"; ' full.txt
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4

Ya te he explicado que los patrones de las expresiones regulares son un lenguaje propio, así que si quieres usarlas, tendrás que aprender ese nuevo lenguaje.
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

Publicidad

Re: Extraer cadena de texto no específico

Notapor juancs011 » 2012-06-26 17:17 @761

Gracias por tu respuesta.

Después de port viene un número, luego un espacio en blanco y luego sigue la línea, no es el final de la línea, sin embargo la corrección que hiciste funciona de mil maravillas.

El archivo full es una locura de caracteres y cadenas de texto que bota un servidor asterisk, y de allí hay información importante que hay que sacar y relacionarlas en un Excel. Un extracto de una línea de ese archivo es:

chan_sip.c: -- Registered SIP '41105' at 10.74.30.25 port 11864 [Jun 26 06:12:17] NOTICE[3555] chan_sip.c: Peer '41105' is now Reachable. (21ms / 2000ms) [Jun 26 06:12:21] VERBOSE[3555] netsock.c: == Using SIP RTP TOS bits 184

(todo eso es solo parte de una sola línea, antes y después de eso hay más texto)

Para ejecutar perl lo puedo hacer de dos maneras: una es haciendo doble clic desde la carpeta donde tengo el archivo .pl, pero de esta manera no puedo ver los mensajes de error, cuando hay error simplemente no sucede nada o solo abre el archivo vacío. La otra manera es desde la ventana de comandos de ms-dos, y para ejecutar un archivo tecleo así:

c:\perl "nombre_de_archivo.pl"

y allí me muestra los resultados o los mensajes de error en caso de que existan.

Para instalar perl me descargué unos instaladores para Windows y adicional tuve que instalar el servidor Apache, para que funcione perl debe estar corriendo Apache. Me gustaría un editor más amigable pero por ahora con Notepad está bien.

Bueno, muchas gracias nuevamente por la ayuda y los consejos prestados, me meteré de lleno a aprender estas expresiones regulares.
juancs011
Perlero nuevo
Perlero nuevo
 
Mensajes: 9
Registrado: 2012-06-20 17:45 @781

Re: Extraer cadena de texto no específico

Notapor explorer » 2012-06-26 19:03 @835

juancs011 escribiste:Después de port viene un número, luego un espacio en blanco y luego sigue la línea, no es el final de la línea, sin embargo la corrección que hiciste funciona de mil maravillas.
Eso no es lo que sale en el full que has mandado: en todas las líneas donde aparece la terna 'SIP', 'at' y 'port', el número de puerto está siempre al final de la línea.

juancs011 escribiste:Para instalar perl me descargué unos instaladores para Windows y adicional tuve que instalar el servidor Apache
Eso suena a XAMPP o WAMPP... ¿qué política de empresa es esa que permite instalar XAMPP y no permite instalar Strawberry o ActivePerl? Quiero saber el nombre de la empresa, para no tener que perder el tiempo mandándole mi currículum.

juancs011 escribiste:para que funcione perl debe estar corriendo Apache.
No es necesario. Apache solo es necesario cuando vas a programar sistemas CGI, con Perl. Pero para ejecutar Perl desde la línea de comandos, te sobra completamente. De hecho, del paquete XAMPP... te sobra casi todo.

juancs011 escribiste:Me gustaría un editor más amigable pero por ahora con Notepad está bien.
Notepad++ está bien... Por aquí hemos hablado del Eclipse+EPIC. Hay más editores... Yo, últimamente, uso Vim.
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: Extraer cadena de texto no específico

Notapor juancs011 » 2012-06-27 10:26 @476

Lo de las políticas de la empresa es un lio pedir permiso para instalar cosas (llenar formatos, etc) el nombre no te lo puedo dar por acá, ¡je,je! Lo que instalé fueron dos archivos: ActivePerl-5.16.0.1600-MSWin32-x86-295879.msi y httpd-2.2.22-win32-x86-openssl-0.9.8t.msi

Esos los pude instalar bajo cuerda porque estaban instalándole Netbeans y aproveché de instalar estos. Traté de instalar Strawberry pero me sacó varios mensajes de error y al final instaló una carpeta en C: con nombre strawberry pero ni idea si funciona (en C:\strawberry\perl\bin hay un archivo perl.exe el icono es un camello pero no abre nada).

Seguramente te estarás riendo de mi ignorancia pero estoy desde cero en esto, hasta hace unos días solo sabía que existía algo que se llama Perl, ahora no sé mucho más pero al menos he hecho algo.

Gracias nuevamente por tu ayuda y colaboración.
juancs011
Perlero nuevo
Perlero nuevo
 
Mensajes: 9
Registrado: 2012-06-20 17:45 @781

Re: Extraer cadena de texto no específico

Notapor explorer » 2012-06-27 17:37 @775

juancs011 escribiste:Lo que instalé fueron dos archivos: ActivePerl-5.16.0.1600-MSWin32-x86-295879.msi y httpd-2.2.22-win32-x86-openssl-0.9.8t.msi
Solo te hacía falta el primero, claro. Y además tienes un Perl v5.16, el más moderno ¡Aprovecha! :)

juancs011 escribiste:Traté de instalar Strawberry pero me sacó varios mensajes de error y al final instaló una carpeta en C: con nombre strawberry pero ni idea si funciona (en C:\strawberry\perl\bin hay un archivo perl.exe el icono es un camello pero no abre nada).
Perl no es un entorno gráfico. Necesitas de una terminal de línea de comandos. Vece a ese directorio y ejecuta

perl -v

o

perl -V

y saldrán los datos de compilación y versión de Perl. De todas maneras, ya sabes que el orden de ejecución de los programas está en función de lo que indique la variable de entorno %PATH%. Una forma de indicarle al Windows que ejecute el perl.exe que está en ese subdirectorio es colocando un './' delante de 'perl': ./perl -v

Pero, como ya tienes instalado el ActivePerl, no te hace falta Strawberry (aunque hay diferencias en los módulos y herramientas extras que traen). Tengo una guía de instalación y uso de ActivePerl en otro hilo. Y de cómo instalar módulos.

juancs011 escribiste:Seguramente te estarás riendo de mi ignorancia pero estoy desde cero en esto, hasta hace unos días solo sabía que existía algo que se llama Perl, ahora no sé mucho más pero al menos he hecho algo.
Pues, bienvenido. Espero que te guste este maravilloso lenguaje. Y todos hemos empezado desde cero.

Repasa la configuración de tu %PATH%, para comprobar que tiene añadida la ruta a C:\Perl\bin (la de ActivePerl). Así podrás ejecutar perl desde cualquier otro subdirectorio.
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: Extraer cadena de texto no específico

Notapor juancs011 » 2012-06-27 18:37 @817

explorer escribiste:
juancs011 escribiste:Lo que instalé fueron dos archivos: ActivePerl-5.16.0.1600-MSWin32-x86-295879.msi y httpd-2.2.22-win32-x86-openssl-0.9.8t.msi
Solo te hacía falta el primero, claro. Y además tienes un Perl v5.16, el más moderno ¡Aprovecha! :)

juancs011 escribiste:Traté de instalar Strawberry pero me sacó varios mensajes de error y al final instaló una carpeta en C: con nombre strawberry pero ni idea si funciona (en C:\strawberry\perl\bin hay un archivo perl.exe el icono es un camello pero no abre nada).
Perl no es un entorno gráfico. Necesitas de una terminal de línea de comandos. Vece a ese directorio y ejecuta

perl -v

o

perl -V

y saldrán los datos de compilación y versión de Perl. De todas maneras, ya sabes que el orden de ejecución de los programas está en función de lo que indique la variable de entorno %PATH%. Una forma de indicarle al Windows que ejecute el perl.exe que está en ese subdirectorio es colocando un './' delante de 'perl': ./perl -v

Pero, como ya tienes instalado el ActivePerl, no te hace falta Strawberry (aunque hay diferencias en los módulos y herramientas extras que traen). Tengo una guía de instalación y uso de ActivePerl en otro hilo. Y de cómo instalar módulos.

juancs011 escribiste:Seguramente te estarás riendo de mi ignorancia pero estoy desde cero en esto, hasta hace unos días solo sabía que existía algo que se llama Perl, ahora no sé mucho más pero al menos he hecho algo.
Pues, bienvenido. Espero que te guste este maravilloso lenguaje. Y todos hemos empezado desde cero.

Repasa la configuración de tu %PATH%, para comprobar que tiene añadida la ruta a C:\Perl\bin (la de ActivePerl). Así podrás ejecutar perl desde cualquier otro subdirectorio.


Sí, tienes razón, recuerdo haber editado algo en el path del PC, no recuerdo ahora si fue en autoexec.nt o por el msconfig, lo que sí recuerdo es que agregué una línea donde especifico la ruta del perl.exe.

Gracias nuevamente por la ayuda y la bienvenida. Me ha gustado mucho este lenguaje, hasta ahora lo he visto enredado porque no entiendo algunas cosas, pero estoy seguro que leyendo y practicando lo aprenderé bien porque le veo el potencial y la utilidad que tiene.
juancs011
Perlero nuevo
Perlero nuevo
 
Mensajes: 9
Registrado: 2012-06-20 17:45 @781

Anterior

Volver a Básico

¿Quién está conectado?

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