Menú

Mostrar Mensajes

Esta sección te permite ver todos los mensajes escritos por este usuario. Ten en cuenta que sólo puedes ver los mensajes escritos en zonas a las que tienes acceso en este momento.

Mostrar Mensajes Menú

Mensajes - explorer

#31
egrep -v "Fecha de presentaci|Liq[.] N|Ventas? en|Ventas? Tj" archivo.txt > nuevo_archivo.txt
#32
Java / Re: laberinto en java
20 Octubre 2015, 13:19 PM
Una forma de hacerlo sería comprobando que todas las posiciones están unidas a un único árbol.

Puedes meter todas las posiciones en una lista, y las vas sacando a medida que el algoritmo de recorrido del laberinto encuentra una nueva posición.

O de otra forma: partiendo de una posición cualquiera, generar llamadas recursivas por cada desviación posible y que no haya sido ya visitado. En cada nueva posición, agregamos la celda a un diccionario. Si llegamos a un camino sin salida, terminamos. Al final, en el diccionario quedan todas las posiciones alcanzables desde la posición inicial. Si el número de celdas es igual al de posiciones disponibles, está conseguido.

Hay muchas más formas de hacerlo, desde luego.
#33
Reunión técnica, el próximo día 20 de octubre, en las oficinas de idealista, donde Pablo Rodríguez nos dará una charla sobre PDL (Perl Data Language).

Convocatoria
#34
Gracias a la ayuda de Daniel Dehennin y Paul Cochrane, la implementación Rakudo de Perl 6 está ahora actualizada en Debian/sid.

A diferencia de versiones anteriores, Perl 6 en Debian usa el motor moarvm. No se incluye ningún otro motor.

Por favor, usa el siguiente comando para instalar Perl6 en Debian:

sudo apt-get install rakudo

Artículo original (en inglés)
#35
Scripting / Re: Ayuda con script PYTHON
9 Octubre 2015, 18:07 PM
No puedes, salvo que modifiques parte del entorno gráfico. Por ejemplo, si quieres evitar que se arranque una terminal con una combinación de teclas, debes localizar dónde está definida esa combinación, y borrarla.

Como mucho, se podría intentar reducir el tiempo de espera, para que fuera cada medio segundo, o así, pero eso aumentará la carga de la CPU.

De todas maneras, aunque el usuario pueda abrirlos con la combinación de teclas, en menos de un segundo son cerrados por el programa.

A mi, en algunos casos que he probado, ni siquiera llego a ver la ventana de la terminal.
#36
He mejorado un poco la exp. reg., y he añadido todos los ejemplos que pusiste en StackOverflow:

#!/usr/bin/env perl
use v5.18; # garantizamos un buen soporte de Unicode
use utf8::all; # activamos todo el soporte para UTF-8
use re '/xiu'; # las exp. reg. tendrán por defecto estas opciones

my @tests =
( 'kill the noise - all in my head feat. awolnation (batou mix)'
, 'artist - track name feat. Mister 漢字仮--名交じり文 [usa remix]'
, 'kill th-e noise - all in my head (feat awolnation)'
, 'Dj E-nergy C-21 - My Super-hero track! featuring Dj Ass-hole (usa remix)'
, 'Dj E-nergy C-21 - My Super-hero track! (feat Dj Ass-hole)'
, 'Dj E-nergy C-21 - My Super-hero track! feat Dj Ass-hole'
, 'Dj E-nergy C-21 - My Super-hero track!'
, 'Carbin & Sirmark - Sorry Feat. Sevener'
, 'Flight Facilities - Heart Attack Feat. Owl Eyes (Snakehips Remix)'
, 'Flight Facilities - Heart Attack Feat. Owl Eyes [Snake--hips Remix]'
, 'Fedde Le Grand - Cinematic'
, 'Fedde Le Grand Feat. Denny White - Cinematic'
, 'Artist-Name - Track Name feat someone'
, 'Artist Name - Track-Name feat someone'
);

my $del1 = qr/[([]/;
my $del2 = qr/[])]/;
my $featuring = qr/
    (?<d1>$del1)?
    (?<featuring>feat(?:uring|[.]|) \s .+?)
    (?(<d1>)$del2)
/;
my $artista = qr/(?<artista>.+?)/;
my $resto = qr/
    (?<cancion>.+?) \s*
    (?:$featuring)? \s*
    (?<extra>$del1 .+? $del2)?
/;
my $titulo = qr/^ $artista \s+ - \s+ $resto \s* $/;


for my $test (@tests) {

    $test =~ /$titulo/;

    say $test;
    print $+{'artista'};
    for my $text (qw(featuring - cancion extra)) {
        if ($text eq '-') {
            print " -";
        }
        elsif ($+{$text}) {
            print " " . $+{$text};
        }
    }
    print "\n";
#    say join " ", @+{qw(artista featuring)}, '-', @+{qw(cancion extra)};
    say '-' x 30;
}

say $titulo;

El resultado es el esperado:

kill the noise - all in my head feat. awolnation (batou mix)
kill the noise feat. awolnation - all in my head (batou mix)
------------------------------
artist - track name feat. Mister 漢字仮--名交じり文 [usa remix]
artist feat. Mister 漢字仮--名交じり文 - track name [usa remix]
------------------------------
kill th-e noise - all in my head (feat awolnation)
kill th-e noise feat awolnation - all in my head
------------------------------
Dj E-nergy C-21 - My Super-hero track! featuring Dj Ass-hole (usa remix)
Dj E-nergy C-21 featuring Dj Ass-hole - My Super-hero track! (usa remix)
------------------------------
Dj E-nergy C-21 - My Super-hero track! (feat Dj Ass-hole)
Dj E-nergy C-21 feat Dj Ass-hole - My Super-hero track!
------------------------------
Dj E-nergy C-21 - My Super-hero track! feat Dj Ass-hole
Dj E-nergy C-21 feat Dj Ass-hole - My Super-hero track!
------------------------------
Dj E-nergy C-21 - My Super-hero track!
Dj E-nergy C-21 - My Super-hero track!
------------------------------
Carbin & Sirmark - Sorry Feat. Sevener
Carbin & Sirmark Feat. Sevener - Sorry
------------------------------
Flight Facilities - Heart Attack Feat. Owl Eyes (Snakehips Remix)
Flight Facilities Feat. Owl Eyes - Heart Attack (Snakehips Remix)
------------------------------
Flight Facilities - Heart Attack Feat. Owl Eyes [Snake--hips Remix]
Flight Facilities Feat. Owl Eyes - Heart Attack [Snake--hips Remix]
------------------------------
Fedde Le Grand - Cinematic
Fedde Le Grand - Cinematic
------------------------------
Fedde Le Grand Feat. Denny White - Cinematic
Fedde Le Grand Feat. Denny White - Cinematic
------------------------------
Artist-Name - Track Name feat someone
Artist-Name feat someone - Track Name
------------------------------
Artist Name - Track-Name feat someone
Artist Name feat someone - Track-Name
------------------------------
(?^uix:^ (?^uix:(?<artista>.+?)) \s+ - \s+ (?^uix:
    (?<cancion>.+?) \s*
    (?:(?^uix:
    (?<d1>(?^uix:[([]))?
    (?<featuring>feat(?:uring|[.]|) \s .+?)
    (?(<d1>)(?^uix:[])]))
))? \s*
    (?<extra>(?^uix:[([]) .+? (?^uix:[])]))?
) \s* $)

El último say muestra la exp. reg. completa, que es lo que sale al final de la ejecución.

He visto que la biblioteca PCRE2 sí que tiene soporte para capturas con nombres, que se hace casi indispensable en este caso. No sé si el control Regex de Delphi soporta la PCRE2 o si aún sigue con la PCRE.

#37
Scripting / Re: Ayuda con script PYTHON
8 Octubre 2015, 02:15 AM
La responsabilidad del arranque de la terminal es del usuario hacia el kernel usando el entorno de ventanas o el shell como intermediarios.

Entonces... no se puede evitar el arranque de la terminal si no te pones en medio de esa conversación.

Se puede hacer que no lo arranque desde el entorno gráfico si se quitan todas las referencias (iconos, menús) donde aparece el atajo para el arranque de la terminal.

Y en el shell... se podría crear un alias que se llame de la misma manera que el ejecutable, y así el usuario, si no se da cuenta, verá que no aparece nada en pantalla.

Pero un programa en ejecución como el que tú planteas, no impedirá el arranque del terminal. Si puede matarlo una vez detectado (con el kill, como tienes puesto). Entonces, lo que te queda hacer es un bucle infinito, pero en lugar de leer líneas desde un stdout abierto, debes ejecutar el 'ps ...' (por ejemplo, cada un segundo o cada 3 segundos, para que no cargue la CPU), y encauzar los pid encontrados al kill.

Por ejemplo:
Código (python) [Seleccionar]
#!/usr/bin/python
import time, sys, subprocess,os

while True:
   time.sleep(1)                       # esperamos un poco
   comando = "ps -eo pid,cmd | fgrep konsole | fgrep -v fgrep | awk {'print $1;'}"            
   proceso = subprocess.Popen(comando , shell=True,stdin=subprocess.PIPE,stdout=subprocess.PIPE)
   next_line = proceso.stdout.readline()    
   if next_line != '':
     comando = "kill -9 " + next_line;
     proceso = subprocess.Popen(comando , shell=True,stdin=subprocess.PIPE,stdout=subprocess.PIPE)

(He cambiado gnome-terminal por Konsole, ya que es el terminal en mi entorno KDE). (Nota la presencia de un fgrep -v fgrep para evitar que hagamos un kill del primer fgrep).

No estoy muy ducho en Python, pero seguro que la ejecución de comandos externos en Python debería requerir menos texto.

La versión de Perl es más liviana:
Código (perl) [Seleccionar]
#!/usr/bin/env perl
do {
    if ($terminal = qx(/bin/ps -eo pid,cmd | fgrep konsole | fgrep -v fgrep | awk '{print \$1}')) {
        chomp $terminal;
        system('kill', '-9', $terminal);
    }
   
    sleep 1;
   
} while ("forever");

#38
La sintaxis (?:...) se refiere a que esos paréntesis solo van a agrupar expresiones, no queremos que capturen nada.

El motor RegEx está creada alrededor de la biblioteca PCRE (Perl Compatible Regular Expressions), así que la traducción debería ser fácil (bueno, es cierto que estoy usando "features" de los últimos Perl, así que es normal que la traducción sea complicada. En Stackoverflow te dan expresiones regulares más normales).

Cita de: Eleкtro en 28 Septiembre 2015, 13:20 PMEDITO: ¡Ah, claro, ya lo entiendo! Se busca un guión separado por espacios " - ", por eso sabes cuando partir, pero entonces eso no me sirve ya que el nombre del artista o el nombre de la canción también pueden contener un guión con espacios.
Sí, pero en los ejemplos mostrados no hay ningún nombre de artista que tenga un guión con espacios, así que se supone que esa es el "ancla" que podemos usar para hacer la partición. Y como se parte por la primera aparición de esa estructura, no importa que aparezca después en el nombre de la canción.

Voy a ver si puedo simplificarla un poco para que la puedas meter en el Delphi, pero creo que es casi idéntica a la que te dan en StackOverflow.
#39
Scripting / Re: Ayuda con script PYTHON
7 Octubre 2015, 15:35 PM
¿En qué sistema operativo estás trabajando?
#40
Yo uso un poco de C o ensamblador para programar en el Arduino o µcontroladores PIC.

Para -todo- lo demás, Perl.

Ahora estoy aprendiendo Perl 6, por cierto :)