Exemplo n.º 1
0
        public SistemaIrrigacion(string[] sis, int nroLines)
        {
            string[] split;
            int      j = 0, k = 0, l = 0, m = 0;

            for (int n = 0; n < nroLines; n++)
            {
                split = sis[n].Split(' ');
                if (n == 0)// Leer los tamaños
                {
                    nIn      = Convert.ToInt32(split[0]);
                    nOut     = Convert.ToInt32(split[1]);
                    nVal     = Convert.ToInt32(split[2]);
                    Entradas = new Entrada[nIn];
                    Valvulas = new Valvula[nVal];
                    Salidas  = new Salida[nOut];
                }
                else if (n == 1)//Asignar flujos de entradas
                {
                    for (int i = 0; i < nIn; i++)
                    {
                        Entradas[i] = new Entrada(Convert.ToSingle(split[i]));
                    }
                }
                else if (n < (nIn + 2))//Asignar nombres a las Entradas y la Valvula que le corresponde
                {
                    Entradas[j].attName = split[0];
                    Valvulas[j]         = new Valvula(split[1], j);
                    Entradas[j].attVal  = Valvulas[j];
                    j++;
                }
                else if (n < (nOut + nIn + 2))//Asignar nombres a las Salidas
                {
                    Salidas[k] = new Salida(sis[n], k);
                    k++;
                }
                else if (n < (nVal + nOut + nIn + 2))//Asignamiento a las valvulas
                {
                    int pos;
                    Valvulas[l] = Valvulas[l] ?? new Valvula(split[0], l);
                    //Asignar por izquierda
                    pos = Convert.ToInt32(Regex.Replace(split[1], @"[^\d]", "")) - 1; //Obtener solo los numeros de un texto con Regex.Replace
                    if (split[1][0] == 'S')
                    {
                        Valvulas[l].attEndIzq = Salidas[pos];
                    }
                    else
                    {
                        Valvulas[pos]      = Valvulas[pos] ?? new Valvula(split[1], pos);
                        Valvulas[l].attIzq = Valvulas[pos];
                    }
                    //Asignar por derecha
                    pos = Convert.ToInt32(Regex.Replace(split[2], @"[^\d]", "")) - 1;
                    if (split[2][0] == 'S')
                    {
                        Valvulas[l].attEndDer = Salidas[pos];
                    }
                    else
                    {
                        Valvulas[pos]      = Valvulas[pos] ?? new Valvula(split[2], pos);
                        Valvulas[l].attDer = Valvulas[pos];
                    }
                    l++;
                }
                else//Asignamiento de configuraciones
                {
                    Configuraciones[m] = sis[n];
                    m++;
                }
            }
            nConf = m;
        }
        public SistemaIrrigacion(string[] sis, int numLineas)
        {
            string[] Split;
            int      j = 0, k = 0, v = 0, z = 0;

            for (int n = 0; n < numLineas; n++)
            {
                Split = sis[n].Split(' ');

                if (n == 0)
                {
                    numIn    = Convert.ToInt32(Split[0]);
                    numOut   = Convert.ToInt32(Split[1]);
                    numVal   = Convert.ToInt32(Split[2]);
                    Entradas = new Entrada[numIn];
                    Valvulas = new Valvula[numVal];
                    Salidas  = new Salida[numOut];
                }
                else if (n == 1)
                {
                    for (int i = 0; i < numIn; i++)
                    {
                        Entradas[i] = new Entrada(Convert.ToSingle(Split[i]));
                    }
                }
                else if (n < (numIn + 2))
                {
                    Entradas[j].Nombre1 = Split[0];
                    Valvulas[j]         = new Valvula(Split[1], j);
                    Entradas[j].Val1    = Valvulas[j];
                    j++;
                }
                else if (n < (numOut + numIn + 2))
                {
                    Salidas[k] = new Salida(sis[n], k);
                    k++;
                }
                else if (n < (numVal + numOut + numIn + 2))
                {
                    int pos;
                    Valvulas[v] = Valvulas[v] ?? new Valvula(Split[0], v);

                    pos = Convert.ToInt32(Regex.Replace(Split[1], @"[^\d]", "")) - 1;
                    if (Split[1][0] == 'S')
                    {
                        Valvulas[v].EndL1 = Salidas[pos];
                    }
                    else
                    {
                        Valvulas[pos]     = Valvulas[pos] ?? new Valvula(Split[1], pos);
                        Valvulas[v].EndL1 = Valvulas[pos];
                    }

                    pos = Convert.ToInt32(Regex.Replace(Split[2], @"[^\d]", "")) - 1;
                    if (Split[2][0] == 'S')
                    {
                        Valvulas[v].EndR1 = Salidas[pos];
                    }
                    else
                    {
                        Valvulas[pos]  = Valvulas[pos] ?? new Valvula(Split[2], pos); //El operador de fusión nula?? devuelve el valor de su operando izquierdo si no es nulo; de lo contrario, evalúa el operando de la derecha y devuelve su resultado. Los ?? El operador no evalúa su operando de la derecha si el operando de la izquierda se evalúa como no nulo.
                        Valvulas[v].R1 = Valvulas[pos];
                    }
                    v++;
                }
                else
                {
                    Configuraciones[z] = sis[n];
                    z++;
                }
            }
            numConf = z;
        }