3 # Generador aleatorio de archivos de llamadas
5 # Leandro Lucarella - dom oct 17 18:37:05 ART 2004
10 # ./callgen [cant_archivos [min_lineas [max_lineas]]]
12 # cant_archivos Cantidad de archivos a generar.
13 # min_lines Mínima cantidad de líneas que puede tener un archivo.
14 # max_lines Máxima cantidad de líneas que puede tener un archivo.
16 # Por la entrada estándar debe recibir los códigos de países para origen y/o
17 # destino. Toma los dos primeros caracteres por línea como un código, ignorando
18 # el resto, de manera que se puede hacer:
19 # cat oridesti.txt | ./gencall
30 #{{{ Variables globales
31 our @codes; # Códigos de origen/destino
36 #{{{ load_codes() - Obtiene códigos de origen/destino de la entrada estándar
40 push(@codes, substr($_, 0, 2)) while (<STDIN>);
44 #{{{ get_rnd_code() - Obtiene un códigos de origen/destino al azar
49 return $codes[rnd($cant-1)];
53 #{{{ rnd() - Genera números aleatorios
54 # Uso: rnd(MAX) - genera número de 0 a MAX (inclusive)
55 # rnd(MIN, MAX) - genera número de MIN a MAX (inclusive)
57 # Nota: respeta el tamaño del campo más chico, es decir, si se usa rnd 01 250,
58 # el número siempre tendrá al menos 2 dígitos rellenados con ceros, como
59 # 04, 28, 123, 08, etc
68 return sprintf('%0'.length($ini).'d', $ini + rand() * ($fin - $ini + 1));
73 sub aaaa() { return rnd($MIN_ANIO, $MAX_ANIO); } # año
74 sub mm() { return rnd("01", 12); } # mes
75 sub dd() { return rnd("01", 28); } # día
76 sub hh() { return rnd("00", 23); } # hora
77 sub MM() { return rnd("00", 59); } # minutos
78 sub DDDD() { return rnd($MIN_COD, $MAX_COD); } # código de central telefónica
79 sub char() { return chr(rnd(65, 90)); } # caracter aleatorio
82 #{{{ line() - Genera una línea del archivo
85 my $f_linea = rnd(100000, 99999999);
86 my $f_minutos = rnd(1, 150);
87 my $f_fecha = aaaa().mm().dd();
88 my $f_hora = dd().hh().MM();
89 my ($f_tipo, $f_orig, $f_dest) = ('', '', '');
93 $f_orig = get_rnd_code();
98 $f_dest = get_rnd_code();
100 my $f_prest = char().char().char().char().char().char().char().char().char();
101 return "$f_linea;$f_minutos;$f_fecha;$f_hora;$f_tipo;$f_dest;$f_orig;$f_prest";
105 #{{{ gen() - Genera un archivo con entre MIN y MAX llamadas
109 my ($ini, $fin) = @_;
110 my $file = aaaa().mm().dd().hh().MM().'.'.DDDD();
111 # Mientras exista uno, buscamos un nuevo nombre.
112 $file = aaaa().mm().dd().hh().MM().'.'.DDDD() while (-e $file);
113 open(FH, ">$file") or die("No puedo abrir el archivo $file!\n");
114 for (my $i = rnd($ini, $fin); $i > 0; --$i)
116 print FH line()."\n";
125 my $cant = $ARGV[0] ? $ARGV[0] : $CANT_ARCHS;
127 for (my $i = 0; $i < $cant; ++$i)
129 gen($ARGV[1] ? $ARGV[1] : $MIN_LINEAS, $ARGV[2] ? $ARGV[2] : $MAX_LINEAS);
133 # vim: set fdm=marker ts=4 sw=4 :