]> git.llucax.com Git - z.facultad/75.08/llamadas.git/blob - util/callgen
Agrego mensaje pedorro sugerido en el enunciado.
[z.facultad/75.08/llamadas.git] / util / callgen
1 #!/usr/bin/perl -w
2 #
3 # Generador aleatorio de archivos de llamadas
4 #
5 # Leandro Lucarella - dom oct 17 18:37:05 ART 2004
6 #
7 # Bajo licencia GPL.
8 #
9 # Uso:
10 #      ./gencall.pl [cant_archivos [min_lineas [max_lineas]]]
11 #
12 # cant_archivos         Cantidad de archivos a generar.
13 #
14
15 # Configuración
16 $CANT_ARCHS=10;
17 $MIN_LINEAS=1000;
18 $MAX_LINEAS=5000;
19
20 #{{{ Funciones
21
22 #{{{ rnd() - Genera números aleatorios
23 # Uso: rnd(MAX)      - genera número de 0 a MAX (inclusive)
24 #      rnd(MIN, MAX) - genera número de MIN a MAX (inclusive)
25 #
26 # Nota: respeta el tamaño del campo más chico, es decir, si se usa rnd 01 250,
27 #       el número siempre tendrá al menos 2 dígitos rellenados con ceros, como
28 #       04, 28, 123, 08, etc
29 sub rnd($;$)
30 {
31         my ($ini, $fin) = @_;
32         if (!$fin)
33         {
34                 $fin = $ini;
35                 $ini = 0;
36         }
37         return sprintf('%0'.length($ini).'d', $ini + rand() * ($fin - $ini + 1));
38 }
39 #}}}
40
41 #{{{ Tipos de campos
42 sub aaaa() { return rnd(1999, 2004); }    # año
43 sub mm()   { return rnd("01", 12); }      # mes
44 sub dd()   { return rnd("01", 28); }      # día
45 sub hh()   { return rnd("00", 23); }      # hora
46 sub MM()   { return rnd("00", 59); }      # minutos
47 sub DDDD() { return rnd("0000", 9999); }  # código de central telefónica
48 sub char() { return chr(rnd(65, 90)); }   # caracter aleatorio
49 #}}}
50
51 #{{{ line() - Genera una línea del archivo
52 sub line()
53 {
54         my $f_linea   = rnd(100000, 99999999);
55         my $f_minutos = rnd(1, 150);
56         my $f_fecha   = aaaa().mm().dd();
57         my $f_hora    = dd().hh().MM();
58         my ($f_tipo, $f_orig, $f_dest) = ('', '', '');
59         if (rnd(1) == 1)
60         {
61                 $f_tipo = 'E';
62                 $f_orig = char().char();
63         }
64         else
65         {
66                 $f_tipo = 'S';
67                 $f_dest = char().char();
68         }
69         my $f_prest = char().char().char().char().char().char().char().char().char();
70         return "$f_linea;$f_minutos;$f_fecha;$f_hora;$f_tipo;$f_dest;$f_orig;$f_prest";
71 }
72 #}}}
73
74 #{{{ gen() - Genera un archivo con entre MIN y MAX llamadas
75 # Uso: gen MIN MAX
76 sub gen($$)
77 {
78         my ($ini, $fin) = @_;
79         my $file = aaaa().mm().dd().hh().MM().'.'.DDDD();
80         # Mientras exista uno, buscamos un nuevo nombre.
81         $file = aaaa().mm().dd().hh().MM().'.'.DDDD() while (-e $file);
82         open(FH, ">$file") or die("No puedo abrir el archivo $file!\n");
83         for (my $i = rnd($ini, $fin); $i > 0; --$i)
84         {
85                 print FH line()."\n";
86         }
87 }
88 #}}}
89
90 #}}}
91
92 #{{{ Programa
93 srand;
94 my $cant = $ARGV[0] ? $ARGV[0] : $CANT_ARCHS;
95 for (my $i = 0; $i < $cant; ++$i)
96 {
97         gen($ARGV[1] ? $ARGV[1] : $MIN_LINEAS, $ARGV[2] ? $ARGV[2] : $MAX_LINEAS);
98 }
99 #}}}
100
101 # vim: set fdm=marker ts=4 sw=4 :