• Publicidad

Expresión regular para Delphi

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

Expresión regular para Delphi

Notapor BigBear » 2013-07-14 11:03 @502

Tengo un archivo de texto que no puedo modificar y tengo que sacar lo que quiero con una expresión regular precisa porque solo necesito la expresión regular para Delphi. No puedo hacer otra cosa más en Delphi que usar esta expresión regular.

El archivo lo subí acá: http://uploaded.net/file/0wcj751e

El código que tengo hasta ahora es este :

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. open(FILE,"test.txt");
  2. my $words = <FILE>;
  3. close FILE;
  4.  
  5. if($words=~/T R O P \{ (.*?) \} T R O P/) {
  6. print $1;
  7. }
  8.  
Coloreado en 0.002 segundos, usando GeSHi 1.0.8.4


Necesito sacar lo que hay entre las llaves.

Sintáxis: [ Descargar ] [ Ocultar ]
Using text Syntax Highlighting
P I { t s o h l a c o l } P I
T R O P { 6 6 6 } T R O P
Coloreado en 0.000 segundos, usando GeSHi 1.0.8.4


¿ Alguien me podría ayudar ?
BigBear
Perlero frecuente
Perlero frecuente
 
Mensajes: 981
Registrado: 2009-03-01 18:39 @818

Publicidad

Re: Expresión regular para Delphi

Notapor explorer » 2013-07-14 11:52 @536

Quizás, en Delphi, no sepan lo que es '.*?', así que debes poner el clásico '[^\}]*' (ya no recuerdo si se escribía así...)
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14486
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Re: Expresión regular para Delphi

Notapor BigBear » 2013-07-14 11:55 @538

Sí reconoce el (.*) pero el problema es que el archivo que subí y que me devuelve es código binario leyendo otro exe, entonces tiene espacios raros que no puedo eliminar porque intenté reemplazando todos los ' ' por nada y sigue intacto.

Deberías ver el archivo que subí.
BigBear
Perlero frecuente
Perlero frecuente
 
Mensajes: 981
Registrado: 2009-03-01 18:39 @818

Re: Expresión regular para Delphi

Notapor explorer » 2013-07-14 19:06 @837

Fíjate que he hablado de '.*?', no de '.*'.

Y ya he visto el archivo. No son espacios raros... son bytes cero...

Para indicar un byte cero, lo puedes hacer así: \0

Ejemplo:
Sintáxis: [ Descargar ] [ Ocultar ]
Using bash Syntax Highlighting
> perl -ln -E 's/\0//g; print $1 while /\{(.+?)\}/g; exit '  test.txt
666
t
tsohlacol
Coloreado en 0.002 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: 14486
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Re: Expresión regular para Delphi

Notapor BigBear » 2013-07-15 11:36 @525

Limpié todos los '\0' con un script aparte y quedó más limpio. ¿Conoces otros así para poder limpiar el archivo binario quedando solo texto?
BigBear
Perlero frecuente
Perlero frecuente
 
Mensajes: 981
Registrado: 2009-03-01 18:39 @818

Re: Expresión regular para Delphi

Notapor explorer » 2013-07-15 13:43 @613

Los byte cero están por una razón principal: porque los textos están codificados en UTF-16. Yo sospecho que es un texto sacado de un Windows, así que quizás sea un UCS-2. Pero otras partes dentro del archivo vi que estaban en iso-8859-1 (o quizás era Windows cp-1252).

Bueno, el caso es que, si se sabe la codificación de cada parte, Perl puede "quitarte" esos byte cero de forma automática, con el módulo Encode.

Si intentas quitarlos "a mano", pues puedes cargarte algo. No todas las codificaciones siguen un patrón de tamaño fijo como UCS-2.

Y, además, la última parte del archivo es un ejecutable binario para Windows...
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14486
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 1 invitado

cron