Exemplo n.º 1
0
        public void EjecutarPagina(string url)
        {
            try
            {
                //Win32.AllocConsole();  // Abrir una consola

                Console.WriteLine("Ejecutando: " + url);
                string codigo = MiembrosEstaticos.DescargarCadena(new Uri(url), null);
                int[,] posiciones = new int[campos, 2];

                //Por cada campo debemos ejecutar el bot 2 veces
                for (int i = 0; i < campos; i++)
                {
                    for (int o = 0; o < 2; o++)
                    {
                        int    cer    = 0;
                        string patron = "";
                        switch (i + 1)
                        {
                        case 1:
                            if (o == 0)
                            {
                                patron = pre1[0, 0];
                                cer    = int.Parse(Maestro1[1]);
                                Console.WriteLine(patron);
                            }
                            else
                            {
                                patron = pos1[0, 0];
                                cer    = int.Parse(Maestro1[3]);
                            }
                            break;

                        case 2:
                            if (o == 0)
                            {
                                patron = pre2[0, 0];
                                cer    = int.Parse(Maestro2[1]);
                            }
                            else
                            {
                                patron = pos2[0, 0];
                                cer    = int.Parse(Maestro2[3]);
                            }
                            break;

                        case 3:
                            if (o == 0)
                            {
                                patron = pre3[0, 0];
                                cer    = int.Parse(Maestro3[1]);
                            }
                            else
                            {
                                patron = pos3[0, 0];
                                cer    = int.Parse(Maestro3[3]);
                            }
                            break;

                        case 4:
                            if (o == 0)
                            {
                                patron = pre4[0, 0];
                                cer    = int.Parse(Maestro4[1]);
                            }
                            else
                            {
                                patron = pos4[0, 0];
                                cer    = int.Parse(Maestro4[3]);
                            }
                            break;

                        case 5:
                            if (o == 0)
                            {
                                patron = pre5[0, 0];
                                cer    = int.Parse(Maestro1[1]);
                            }
                            else
                            {
                                patron = pos5[0, 0];
                                cer    = int.Parse(Maestro5[3]);
                            }
                            break;
                        }
                        //Obtenemos los 2/3 de la posicion media en la que se suele encontrar la variable.

                        /*int num = (int)Math.Round((decimal)posMedia[i] * 2 / 3);
                         * if (num < 1500)
                         *  num = 0;
                         * if ((posMedia[i] - num) > 1500)
                         *  num = posMedia[i] - 1500;
                         * if (o == 1)
                         *  num = posiciones[i, 0];*/
                        //int fias = num;
                        int  num  = 0;
                        bool echo = false;
                        Console.WriteLine("Posicion media: " + posMedia[i]);
                        //Console.ReadLine();
                        int posneta = posMedia[i];
                        if (o == 1)
                        {
                            posneta = posiciones[i, 0];
                        }
                        bool primero = true;
                        while (!echo)
                        {
                            //Podemos directamente buscar el patron.
                            if (cer == 0)
                            {
                                if (o == 1)
                                {
                                    posiciones[i, o] = codigo.IndexOf(patron.Substring(0, 30), posiciones[i, 0]);
                                }
                                else
                                {
                                    posiciones[i, o] = codigo.IndexOf(patron.Substring(270, 30), posneta - 200) + 30;
                                }
                                if (posiciones[i, o] == -1)
                                {
                                    cer++;
                                }
                                else
                                {
                                    Console.WriteLine("posicion de lo encontrado: " + posiciones[i, o]);
                                    Console.WriteLine("Encontrado algo:");
                                    Console.ReadLine();
                                    if (o == 1)
                                    {
                                        Console.WriteLine(codigo.Substring(posiciones[i, 0], posiciones[i, o] - posiciones[i, 0]));
                                    }
                                    else
                                    {
                                        Console.WriteLine(codigo.Substring(posiciones[i, o], 300));
                                    }
                                    posMedia[i] = (int)Math.Round((decimal)(posMedia[i] + posiciones[i, o]) / 2);
                                    //Console.ReadLine();
                                    echo = true;
                                    break;
                                }
                            }
                            for (int ii = 0; ii < 2; ii++)
                            {
                                // Los pos no pueden retroceder.
                                if (ii == 1 && o == 1)
                                {
                                    //Cosa especial!

                                    /*if (i == 3)
                                     * {
                                     *  posiciones[i, 1] = posiciones[i, 0] + codigo.Substring(posiciones[i, 0], 100).Substring(0, codigo.Substring(posiciones[i, 0], 100).IndexOf(".swf")).Length;
                                     * Console.WriteLine(codigo.Substring(posiciones[i, 0],100));
                                     * Console.WriteLine(posiciones[i, 0]);
                                     * Console.WriteLine(patron);
                                     * echo = true;
                                     * break;
                                     * }
                                     * num++;*/
                                }
                                if (ii == 1 && posneta - num > 0)
                                {
                                    num = -num;
                                }
                                else if (ii == 0 && num < 0)
                                {
                                    num = num * (-1);
                                }
                                else if (posneta - num < 0 && num < 0)
                                {
                                    num = num * (-1);
                                    num++;
                                    break;
                                }
                                Console.WriteLine("num: " + num + ", posicion: " + (posneta + num));
                                string a1 = codigo.Substring(posneta + num, 300);
                                //string a1 = codigo.Substring(num, 300);
                                bool pre = false;
                                if (o == 0)
                                {
                                    pre = true;
                                }
                                else
                                {
                                    pre = false;
                                }
                                string   j     = Binario.Obtener(patron, a1, pre);
                                double[] cinco = new double[30];
                                Console.WriteLine("Patron obtenido: " + j);
                                int ceros = 0;
                                for (int x = 0; x < 30; x++)
                                {
                                    cinco[x] = double.Parse(j[x].ToString());
                                    if (cinco[x] == 0)
                                    {
                                        ceros++;
                                    }
                                }
                                Console.WriteLine("ceros: " + ceros + " , cer: " + cer + ", i: " + i + ", o: " + o);
                                if (ceros <= cer)
                                {
                                    double[] actual = redes[i, o].ComputeOutputs(cinco);
                                    Console.WriteLine("ceros: " + ceros);
                                    Console.WriteLine("resultado2: " + actual[0]);
                                    if (actual[0] > 0.8)
                                    {
                                        if (o == 1 && posneta + num < posiciones[i, 0])
                                        {
                                            break;
                                        }
                                        //falta que no se añada si o == 1
                                        if (o == 1)
                                        {
                                            posiciones[i, o] = posneta + num;
                                        }
                                        else
                                        {
                                            posiciones[i, o] = posneta + num + 299;
                                        }
                                        Console.WriteLine("posicion[" + i + "," + o + "]: " + posiciones[i, o]);

                                        Console.WriteLine("Encontrado algo:");
                                        if (o == 1)
                                        {
                                            Console.WriteLine(codigo.Substring(posiciones[i, 0], posiciones[i, o] - posiciones[i, 0]));
                                        }
                                        else
                                        {
                                            Console.WriteLine(codigo.Substring(posiciones[i, o], 70));
                                        }
                                        posMedia[i] = (int)Math.Round((decimal)(posMedia[i] + posiciones[i, o]) / 2);
                                        //Console.ReadLine();
                                        echo = true;
                                    }
                                }
                                if (num < 0)
                                {
                                    num *= (-1);
                                }
                                if (ii == 1)
                                {
                                    num++;
                                }
                                if (num == 1200)
                                {
                                    if (primero)
                                    {
                                        cer++;
                                        primero = false;
                                    }
                                    else
                                    {
                                        throw new MiException();
                                    }
                                }
                            }
                        }
                    } // FIN FOR o
                }     //FIN FOR i
                //Dado que se encontraron todos los datos procedemos a insertarlos en la BD
                string[] datos = new string[5];
                for (int i = 0; i < campos; i++)
                {
                    datos[i] = codigo.Substring(posiciones[i, 0], posiciones[i, 1] - posiciones[i, 0]);
                }
                for (int i = campos; i < 5; i++)
                {
                    datos[i] = "vacio";
                }

                string strConexion = "Provider=Microsoft.Jet.OLEDB.4.0;" +
                                     "Data Source=./BD.mdb";
                OleDbConnection conexion2 = new OleDbConnection(strConexion);
                conexion2.Open();
                OleDbCommand     comando2  = new OleDbCommand();
                OleDbDataAdapter adaptador = new OleDbDataAdapter("INSERT INTO Tabla " +
                                                                  "(campo1, campo2, campo3, campo4, campo5) " +
                                                                  "VALUES ('" + datos[0] + "','" + url + "','" + datos[2] + "','" + datos[3] + "','" + datos[4] + "')", conexion2);
                DataSet conjunto = new DataSet();
                adaptador.Fill(conjunto);
                conexion2.Close();
            }
            catch (Exception e)
            {
                Console.WriteLine("No se encontraron los patrones o algun fallo a ocurrido");
                Console.WriteLine(e.Message);
                Console.ReadLine();
            }
            finally
            {
                //Win32.FreeConsole();
            }
        }
Exemplo n.º 2
0
        public Entrenador(string[] url, string[] campo1, string[] campo2, string[] campo3,
                          string[] campo4, string[] campo5)
        {
            Win32.AllocConsole();  // Abrir una consola
            ejemplos = url.Count() - 1;

            posMedia = new int[5];
            pre1     = new string[url.Count(), 2];
            pre2     = new string[url.Count(), 2];
            pre3     = new string[url.Count(), 2];
            pre4     = new string[url.Count(), 2];
            pre5     = new string[url.Count(), 2];
            pos1     = new string[url.Count(), 2];
            pos2     = new string[url.Count(), 2];
            pos3     = new string[url.Count(), 2];
            pos4     = new string[url.Count(), 2];
            pos5     = new string[url.Count(), 2];

            redes = new FeedforwardNetwork[5, 2];

            campos = 1;

            //Obtenemos las cadenas de texto
            for (int i = 0; i < url.Count(); i++)
            {
                //ni�os,
                Console.WriteLine("Obteniendo codigo: " + url[i]);
                string codigo   = MiembrosEstaticos.DescargarCadena(new Uri(url[i]), null);
                int    posicion = codigo.IndexOf(campo1[i]);
                if (posicion < 300)
                {
                    posicion = codigo.IndexOf(campo1[i], posicion + 100);
                }
                if (posMedia[0] == 0)
                {
                    posMedia[0] = posicion;
                }
                else
                {
                    posMedia[0] = (int)Math.Round((decimal)(posMedia[0] + posicion) / 2);
                }
                pre1[i, 0] = codigo.Substring(posicion - 300, 300);
                pos1[i, 0] = codigo.Substring(posicion + campo1[i].Length, 300);

                if (campo2[i] != null)
                {
                    posicion = codigo.IndexOf(campo2[i]);
                    if (posicion < 300)
                    {
                        posicion = codigo.IndexOf(campo2[i], posicion + 100);
                    }
                    if (posMedia[campos] == 0)
                    {
                        posMedia[campos] = posicion;
                    }
                    else
                    {
                        posMedia[campos] = (int)Math.Round((decimal)(posMedia[campos] + posicion) / 2);
                    }
                    pre2[i, 0] = codigo.Substring(posicion - 300, 300);
                    pos2[i, 0] = codigo.Substring(posicion + campo2[i].Length, 300);
                    campos     = 2;
                }
                if (campo3[i] != null)
                {
                    posicion = codigo.IndexOf(campo3[i]);
                    if (posicion < 300)
                    {
                        posicion = codigo.IndexOf(campo3[i], posicion + 100);
                    }
                    if (posMedia[campos] == 0)
                    {
                        posMedia[campos] = posicion;
                    }
                    else
                    {
                        posMedia[campos] = (int)Math.Round((decimal)(posMedia[campos] + posicion) / 2);
                    }
                    pre3[i, 0] = codigo.Substring(posicion - 300, 300);
                    pos3[i, 0] = codigo.Substring(posicion + campo3[i].Length, 300);
                    campos     = 3;
                }
                if (campo4[i] != null)
                {
                    posicion = codigo.IndexOf(campo4[i]);
                    if (posicion < 300)
                    {
                        posicion = codigo.IndexOf(campo4[i], posicion + 100);
                    }
                    if (posMedia[campos] == 0)
                    {
                        posMedia[campos] = posicion;
                    }
                    else
                    {
                        posMedia[campos] = (int)Math.Round((decimal)(posMedia[campos] + posicion) / 2);
                    }
                    pre4[i, 0] = codigo.Substring(posicion - 300, 300);
                    pos4[i, 0] = codigo.Substring(posicion + campo4[i].Length, 300);
                    campos     = 4;
                }
                if (campo5[i] != null)
                {
                    posicion = codigo.IndexOf(campo4[i]);
                    if (posicion < 300)
                    {
                        posicion = codigo.IndexOf(campo5[i], posicion + 100);
                    }
                    if (posMedia[campos] == 0)
                    {
                        posMedia[campos] = posicion;
                    }
                    else
                    {
                        posMedia[campos] = (int)Math.Round((decimal)(posMedia[campos] + posicion) / 2);
                    }
                    pre5[i, 0] = codigo.Substring(posicion - 300, 300);
                    pos5[i, 0] = codigo.Substring(posicion + campo5[i].Length, 300);
                    campos     = 5;
                }
            }

            //Obtenemos los datos binarios
            for (int i = campos; i > 0; i--)
            {
                if (i == 5)
                {
                    for (int o = 1; o < url.Count(); o++)
                    {
                        pre5[o - 1, 1] = Binario.Obtener(pre5[0, 0], pre5[o, 0], true);
                        pos5[o - 1, 1] = Binario.Obtener(pos5[0, 0], pos5[o, 0], false);
                        Console.WriteLine("PreBinario" + i + o + ": " + pre5[o - 1, 1]);
                        Console.WriteLine("PosBinario" + i + o + ": " + pos5[o - 1, 1]);
                    }
                }
                if (i == 4)
                {
                    for (int o = 1; o < url.Count(); o++)
                    {
                        pre4[o - 1, 1] = Binario.Obtener(pre4[0, 0], pre4[o, 0], true);
                        pos4[o - 1, 1] = Binario.Obtener(pos4[0, 0], pos4[o, 0], false);
                        Console.WriteLine("PreBinario" + i + o + ": " + pre4[o - 1, 1]);
                        Console.WriteLine("PosBinario" + i + o + ": " + pos4[o - 1, 1]);
                    }
                }
                if (i == 3)
                {
                    for (int o = 1; o < url.Count(); o++)
                    {
                        pre3[o - 1, 1] = Binario.Obtener(pre3[0, 0], pre3[o, 0], true);
                        pos3[o - 1, 1] = Binario.Obtener(pos3[0, 0], pos3[o, 0], false);
                        Console.WriteLine("PreBinario" + i + o + ": " + pre3[o - 1, 1]);
                        Console.WriteLine("PosBinario" + i + o + ": " + pos3[o - 1, 1]);
                    }
                }
                if (i == 2)
                {
                    for (int o = 1; o < url.Count(); o++)
                    {
                        pre2[o - 1, 1] = Binario.Obtener(pre2[0, 0], pre2[o, 0], true);
                        pos2[o - 1, 1] = Binario.Obtener(pos2[0, 0], pos2[o, 0], false);
                        Console.WriteLine("PreBinario" + i + o + ": " + pre2[o - 1, 1]);
                        Console.WriteLine("PosBinario" + i + o + ": " + pos2[o - 1, 1]);
                    }
                }
                if (i == 1)
                {
                    for (int o = 1; o < url.Count(); o++)
                    {
                        pre1[o - 1, 1] = Binario.Obtener(pre1[0, 0], pre1[o, 0], true);
                        pos1[o - 1, 1] = Binario.Obtener(pos1[0, 0], pos1[o, 0], false);
                        Console.WriteLine("PreBinario" + i + o + ": " + pre1[o - 1, 1]);
                        Console.WriteLine("PosBinario" + i + o + ": " + pos1[o - 1, 1]);
                    }
                }
            }
            CrearMaestros();
            //Entrenamos a las redes neuronales
            for (int i = 1; i <= campos; i++)
            {
                Entrenar(i, 0);
                Entrenar(i, 1);
            }
            Win32.FreeConsole();
        }