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

#71
Se puede realizar en una sola línea:
Código (bash) [Seleccionar]
perl -E '$del = qr/\s*:\s*/; foreach (<*.mxf>) { ($name,$duration,$encoded) = qx(c:/mediainfo/MediaInfo.exe $_) =~ /Complete name$del(.*?)\n.+?Duration$del(.*?)\n.+?Encoded date$del(\d{4}-\d{2}-\d{2}).+?\n/ms; say join " | ", $name, $duration, $encoded; }'
Este código lee los nombres de todos los archivos *.mxf del directorio actual.
Por cada uno de ellos (foreach), llamamos a MediaInfo.
De todo lo que devuelve, nos quedamos con lo que queremos.
Y finalmente, lo formateamos y sacamos a pantalla.
Para guardarlo a un archivo, vale con agregar '> resumen.txt' al final.

En forma de programa:
Código (perl) [Seleccionar]
#!/usr/bin/perl

$DEL = qr/\s*:\s*/; # definimos un delimitador que se repite varias veces

foreach $mxf (<*.mxf>) { # para todos los archivos .mxf del dir. actual

# llamamos a MediaInfo
   my $resultado = qx(c:/mediainfo/MediaInfo.exe $mxf);

# extraemos lo que queremos desde el $resultado
   ($name,$duration,$encoded) =
       $resultado =~ /Complete name$DEL(.*?)\n.+?Duration$DEL(.*?)\n.+?Encoded date$DEL(\d{4}-\d{2}-\d{2}).+?\n/ms;

# formateamos los valores y los sacamos
   say join ' | ', $name, $duration, $encoded;
}

Ejemplo de salida:
d:\archivo1.mxf | 34mn 21s | 2014-12-04
d:\archivo2.mxf | 3mn 21s | 2014-12-04
d:\archivo3.mxf | 4mn 21s | 2014-12-04
d:\archivo4.mxf | 5mn 21s | 2014-12-04
#72
Este comportamiento no es algo propio de Python. En Perl pasa lo mismo con los hash:
$ perl -E '%x = ( a => 1, b => 2, c => 3); say "$_ => $x{$_}" for keys %x'
b => 2
a => 1
c => 3
$ perl -E '%x = ( a => 1, b => 2, c => 3); say "$_ => $x{$_}" for keys %x'
c => 3
b => 2
a => 1

Se trata de una medida de seguridad (los diccionarios o hashes se usan con temas de contraseñas, control de sesiones, etc.). Si fuera predecible el orden en que salen los pares clave/valor, se podría suplantar o robar información.

Existen bibliotecas que permiten recuperar la información en el mismo orden en que fue grabada. En Perl, por ejemplo, está Tie::IxHash.

#73
La ordenación de las entradas clave/valor en un diccionario o hash, es "aleatorio" (depende del cómputo del valor hash interno).
#74
Scripting / Re: Delimitadores consecutivos
11 Marzo 2015, 15:53 PM
Yo creo que el ejemplo está mal, porque los campos que quieres extraer están en las columnas 6 y 7. Yo creo que la primera línea está mal.

Si se trata de las columnas 3 y 7, se puede resolver en una sola línea de comandos:

Código (bash) [Seleccionar]
perl -anF'\|' -E 'say join "|", @F[2,6]' archivo.txt > resultado.txt
#75
Scripting / Re: CPAN Linux reinstalar
9 Marzo 2015, 17:06 PM
Desde el synaptic o aptitude puedes solicitar la reinstalación del Perl del sistema.

Luego, con respecto al comando cpan, ejecútalo, y en su shell, ejecuta

o conf init

Con eso, se reiniciará la configuración de cpan.

Otra opción es no usar cpan, sino instalar cpanm (que es lo recomendado en los últimos tiempos). Lo haces con

apt-get install cpanminus
#76
Pues entonces, con Perl:

Código (perl) [Seleccionar]
perl -nE "/^(lote|vta)/ and print" file.txt > output.txt
#77
Lo puedes ejecutar desde la línea de comandos o shell.
egrep "^(lote|vta)" file.txt > outputfile.txt
#78
egrep "^(lote|vta)" file.txt
#79
Tienes una lista de software colaborativo en tiempo real en esta página de la Wikipedia inglesa: Collaborative real-time editor: List of collaborative text editing software packages
#80
Scripting / Re: Problema de Monthy Hall
26 Diciembre 2014, 03:36 AM
Como también se comenta en la página de Wikipedia referido al problema de Monty Hall, una forma de verlo mejor es pensado que hay cien puertas.

Entonces, tienes 1/100 de probabilidad de conseguir el carro. Entonces, en el resto de puertas, hay un 99/100 de probabilidad de que esté el carro.

Va el presentador y abre 98 puertas. En todas ellas hay una cabra. Quedan la puerta escogida por el jugador y una puerta más. Y viene la famosa pregunta de que si quiere cambiar.

Se puede pensar que el 98/100 de probabilidades que había entre las puertas abiertas se ha repartida entre las dos puertas que quedan cerradas, así que estamos hablando de un 50 % de probabilidad, pero no es así.

La puerta del jugador sigue teniendo 1/100 de probabilidad (la original), y la puerta que ha dejado cerrada el presentador, "ha recibido" todas las probabilidades de las 98 puertas abiertas. Mejor dicho: las 99 puertas restantes tenían el 99/100 de probabilidad de tener el carro. Al abrir 98 puertas, y ver que no hay carro, cada puerta abierta confirma tener un 0/100 de probabilidad de tener un carro, y van "trasladando" la probabilidad de tener un carro hacia la puerta que queda cerrada.

En ese momento, la puerta escogida tiene un 1/100 y la puerta restante, un 99/100, así que es lógico hacer el cambio, ya que ganaremos 99 de cada 100 veces que lo intentemos.

La siguiente versión del programa permite ejecutar con un número arbitrario de puertas (tres o más). Jugando con 100 puertas, ganaremos casi siempre.
Código (python) [Seleccionar]
#!/usr/bin/python
from random import randint

VACIA  = 0
CABRA  = 2
PREMIO = 1

def colocarPremio():
 puertas = [] # establecemos las puertas
 for i in range(numero):
    puertas.append(VACIA)

 puertas[ randint(0,numero-1) ] = PREMIO # colocamos premio en una
 return puertas

def seleccionJugador():
 return randint(0,numero-1) # el jugador escoge una puerta

def mostrarPuerta(jugador, puertas):
 presentador = 0 # el presentador entra y saluda a todos
 puertas_abiertas = 0
 for i in range(numero):
   if i != jugador and puertas[i] != PREMIO: # el presentador escoge una puerta que no sea la del jugador y no tenga premio
     puertas[i] = CABRA # y muestra la cabra
     puertas_abiertas += 1

     if puertas_abiertas == numero-2: # dejamos cerradas solo dos puertas
       break
 return presentador

def cambiarPuerta(puertas,presentador, jugador):
 for i in range(numero):
   if i != jugador and puertas[i] != CABRA: # el jugador escoge la otra puerta cerrada
     jugador = i # y se queda con esa
     break # porque no tiene que seguir buscando
 return jugador

def juego(cambiar):
 puertas = colocarPremio() # ponemos las puertas y el premio
 jugador = seleccionJugador() # el jugador escoge
 presentador = mostrarPuerta(jugador, puertas) # el presentador muestra
 if cambiar: jugador = cambiarPuerta(puertas, presentador, jugador) # debo cambiar o no
 return puertas[jugador] # tendra premio o no

numero  = 100 # numero de puertas
jugadas = 100 # cuantas veces te lo tengo que repetir para convencerte?
cambio  = True # cambiar o no cambiar, he alli el dilema

contador = 0 # contador victorias
for i in range(jugadas): contador += (juego(cambio) == PREMIO) # el momento de la verdad... juguemos

if not cambio: cambio = 'no ' # formateo cadena bonita
else:  cambio = '' # y por si...

print 'en {} jugadas hubo {} victorias si el jugador {}cambiaba de puerta'.format(jugadas,contador,cambio) #resultado

Para completar, aquí está la misma versión del programa, en Perl:
Código (perl) [Seleccionar]
#!/usr/bin/perl
#
# Monty Hall
#
# https://es.wikipedia.org/wiki/Problema_de_Monty_Hall
#
use Modern::Perl 2014;
use utf8::all;

## Constantes
use constant {
   CERRADA => 0,
   CABRA   => 1,
   COCHE   => 2,
   False => 0,
   True  => 1,
};
my $número_de_puertas = 3;
my $número_de_jugadas = 100;
my $hace_el_cambio    = True;

## Variables
my @puertas;
my $puerta_elegida;
my $victorias = 0;

## Proceso
for (1 .. $número_de_jugadas) {
   $victorias++ if juego() == COCHE;
}

say "En $número_de_jugadas jugadas con $número_de_puertas puertas "
 . "hubo $victorias victorias si el jugador "
 . ($hace_el_cambio ? 'sí':'no')
 . " cambiaba de puerta"
 ;

## subrutinas
sub juego {

   inicializar_puertas();
   colocar_premio();
   jugador_selecciona_puerta();
   mostrar_puertas_con_cabras();
   
   if ($hace_el_cambio) {
       jugador_cambia_de_puerta();
   }

   return $puertas[$puerta_elegida];
}

sub inicializar_puertas {
   @puertas = (CERRADA) x $número_de_puertas;
}

sub colocar_premio {
   $puertas[ rand @puertas ] = COCHE;
}

sub jugador_selecciona_puerta {
   $puerta_elegida = int rand @puertas;
}

sub mostrar_puertas_con_cabras {

   for my $i (1 .. $número_de_puertas - 2) { # abrir todas menos la del coche y la elegida

       my $j = $i-1; # los índices en los array empiezan en 0
   
       $j++ until $puertas[$j] == CERRADA  and  $j != $puerta_elegida;

       $puertas[$j] = CABRA; # ¡Bééééé-ééé!
   }
}

sub jugador_cambia_de_puerta {
   
   # Buscar la siguiente puerta que esté cerrada
   for my $i (0 .. $#puertas) {

       if ($puerta_elegida != $i  and  $puertas[$i] != CABRA) {
           $puerta_elegida  = $i; # será la nueva elegida
           last;
       }
   }
}