Beispiel #1
0
        /// <summary>
        /// Devuelve una variable lógica que indica si un objeto
        /// dado es igual.
        /// </summary>
        /// <param name="elObjecto">El objecto dado.</param>
        public override bool Equals(object elObjecto)
        {
            // Verifica objectos nulos y compara el tipo.
            if (elObjecto == null || (GetType() != elObjecto.GetType()))
            {
                return(false);
            }

            // Compara objecto.
            CampoParámetrosDeRuta comparador = (CampoParámetrosDeRuta)elObjecto;
            bool esIgual = (ToString() == comparador.ToString());

            return(esIgual);
        }
Beispiel #2
0
        private static void Guarda(CampoParámetrosDeRuta elCampoParámetrosDeRuta, StreamWriter elEscritor)
        {
            // Crea el texto.
            const char    separador = ',';
            StringBuilder texto     = new StringBuilder();

            texto.Append(elCampoParámetrosDeRuta.LímiteDeVelocidad.Indice);
            texto.Append(separador);
            texto.Append(elCampoParámetrosDeRuta.ClaseDeRuta.Indice);
            foreach (bool valor in elCampoParámetrosDeRuta.OtrosParámetros)
            {
                texto.Append(separador);
                if (valor)
                {
                    texto.Append(1);
                }
                else
                {
                    texto.Append(0);
                }
            }

            Guarda(elCampoParámetrosDeRuta, elCampoParámetrosDeRuta.ToString(), elEscritor);
        }
        private static void Guarda(CampoParámetrosDeRuta elCampoParámetrosDeRuta, StreamWriter elEscritor)
        {
            // Crea el texto.
              const char separador = ',';
              StringBuilder texto = new StringBuilder();
              texto.Append(elCampoParámetrosDeRuta.LímiteDeVelocidad.Indice);
              texto.Append(separador);
              texto.Append(elCampoParámetrosDeRuta.ClaseDeRuta.Indice);
              foreach (bool valor in elCampoParámetrosDeRuta.OtrosParámetros)
              {
            texto.Append(separador);
            if (valor)
            {
              texto.Append(1);
            }
            else
            {
              texto.Append(0);
            }
              }

              Guarda(elCampoParámetrosDeRuta, elCampoParámetrosDeRuta.ToString(), elEscritor);
        }
        private IList<Campo> LeeCampos(string laClase)
        {
            var campos = new List<Campo>();

              // Lee linea por linea hasta que se consiga el final del elemento.
              string línea = LeeLaPróximaLínea();
              while (!línea.StartsWith("[END"))
              {
            // La línea debería ser una línea en blanco, un comentario,
            // o un campo.
            bool esLíneaEnBlanco = (línea.Trim() == string.Empty);
            if (esLíneaEnBlanco)
            {
              // Nos saltamos líneas en blanco.
            }
            else if (línea.StartsWith(";"))
            {
              // Es un comentario.
              campos.Add(new CampoComentario(línea));
            }
            else
            {
              // Debe ser un campo. Separa la linea en secciones usando '=' como separador.
              int separador = línea.IndexOf('=');
              if (separador > 1)
              {
            #region Lee el identificador y el número (si existe)
            // Obtiene el identificador con número (Data0, Data1, etc)
            // y texto del campo.
            string identificadorConNúmero = línea.Substring(0, separador);
            string texto = línea.Substring(separador + 1);

            // Separa el identificador del número.
            int indiceDelNúmero = identificadorConNúmero.IndexOfAny("0123456789".ToCharArray());
            int? número = null;
            string identificador = identificadorConNúmero;
            if (indiceDelNúmero >= 0)
            {
              int númeroExtraído;
              bool convirtió = int.TryParse(identificadorConNúmero.Substring(indiceDelNúmero), out númeroExtraído);
              if (convirtió)
              {
                número = númeroExtraído;
                identificador = identificadorConNúmero.Substring(0, indiceDelNúmero);
              }
            }
            #endregion

            #region Construye el campo basado en el identificador.
            switch (identificador)
            {
              case CampoNombre.IdentificadorDeEtiqueta:
                campos.Add(new CampoNombre(texto, número));
                break;
              case CampoTipo.IdentificadorDeTipo:
                campos.Add(new CampoTipo(texto));
                break;
              case CampoCoordenadas.IdentificadorDeCoordenadas:
              case CampoCoordenadas.IdentificadorDeCoordenadasAlterno:
                if (número != null)
                {
                  campos.Add(LeeCampoCoordenadas(identificador, número.Value, texto));
                }
                else
                {
                  campos.Add(new CampoGenérico(identificadorConNúmero, texto));
                }
                break;
              case CampoNodoRuteable.IdentificadorDeNodo:
                if (número != null)
                {
                  campos.Add(LeeCampoNodo(identificador, texto));
                }
                else
                {
                  campos.Add(new CampoGenérico(identificadorConNúmero, texto));
                }
                break;
              case CampoParámetrosDeRuta.IdentificadorDeParámetrosDeRuta:
                CampoParámetrosDeRuta parámetrosDeRuta = new CampoParámetrosDeRuta(texto);
                campos.Add(parámetrosDeRuta);
                break;
              case CampoAtributo.IdentificadorDeEtiqueta:
                campos.Add(new CampoAtributo(texto));
                break;
              case CampoEsCiudad.IdentificadorDeEtiqueta:
                if (número != null)
                {
                  campos.Add(new CampoGenérico(identificadorConNúmero, texto));
                }
                else
                {
                  campos.Add(LeeCampoEsCiudad(texto));
                }
                break;
              case CampoIndiceDeCiudad.IdentificadorDeEtiqueta:
                campos.Add(LeeCampoIndiceDeCiudad(texto));
                break;
              default:
                campos.Add(new CampoGenérico(identificadorConNúmero, texto));
                break;
            }
            #endregion
              }
              else
              {
            string mensaje;
            if (línea.StartsWith("["))
            {
              mensaje = string.Format("Se encontró un elemento nuevo ({0}) antes de encontrar el final del elemento [{1}].",
                                      línea,
                                      laClase);
            }
            else
            {
              mensaje = string.Format("Error buscando '=' en: {0}\n" +
                               "La línea debería ser una línea en blanco, un comentario, o un campo.",
                               línea);
            }
            throw new ArgumentException(mensaje);
              }
            }

            // Lee la próxima linea.
            línea = LeeLaPróximaLínea();

            // Si llegamos al final del archivo entonces hay un error
            // porque todavía no hemos encontrado el final del elemento.
            if (línea == null)
            {
              throw new ArgumentException(string.Format("Se encontró el final del archivo estando dentro del elemento [{0}]", laClase));
            }
              }

              return campos;
        }
Beispiel #5
0
        private IList <Campo> LeeCampos(string laClase)
        {
            var campos = new List <Campo>();

            // Lee linea por linea hasta que se consiga el final del elemento.
            string línea = LeeLaPróximaLínea();

            while (!línea.StartsWith("[END"))
            {
                // La línea debería ser una línea en blanco, un comentario,
                // o un campo.
                bool esLíneaEnBlanco = (línea.Trim() == string.Empty);
                if (esLíneaEnBlanco)
                {
                    // Nos saltamos líneas en blanco.
                }
                else if (línea.StartsWith(";"))
                {
                    // Es un comentario.
                    campos.Add(new CampoComentario(línea));
                }
                else
                {
                    // Debe ser un campo. Separa la linea en secciones usando '=' como separador.
                    int separador = línea.IndexOf('=');
                    if (separador > 1)
                    {
                        #region Lee el identificador y el número (si existe)
                        // Obtiene el identificador con número (Data0, Data1, etc)
                        // y texto del campo.
                        string identificadorConNúmero = línea.Substring(0, separador);
                        string texto = línea.Substring(separador + 1);

                        // Separa el identificador del número.
                        int    indiceDelNúmero = identificadorConNúmero.IndexOfAny("0123456789".ToCharArray());
                        int?   número          = null;
                        string identificador   = identificadorConNúmero;
                        if (indiceDelNúmero >= 0)
                        {
                            int  númeroExtraído;
                            bool convirtió = int.TryParse(identificadorConNúmero.Substring(indiceDelNúmero), out númeroExtraído);
                            if (convirtió)
                            {
                                número        = númeroExtraído;
                                identificador = identificadorConNúmero.Substring(0, indiceDelNúmero);
                            }
                        }
                        #endregion

                        #region Construye el campo basado en el identificador.
                        switch (identificador)
                        {
                        case CampoNombre.IdentificadorDeEtiqueta:
                            campos.Add(new CampoNombre(texto, número));
                            break;

                        case CampoTipo.IdentificadorDeTipo:
                            campos.Add(new CampoTipo(texto));
                            break;

                        case CampoCoordenadas.IdentificadorDeCoordenadas:
                        case CampoCoordenadas.IdentificadorDeCoordenadasAlterno:
                            if (número != null)
                            {
                                campos.Add(LeeCampoCoordenadas(identificador, número.Value, texto));
                            }
                            else
                            {
                                campos.Add(new CampoGenérico(identificadorConNúmero, texto));
                            }
                            break;

                        case CampoNodoRuteable.IdentificadorDeNodo:
                            if (número != null)
                            {
                                campos.Add(LeeCampoNodo(identificador, texto));
                            }
                            else
                            {
                                campos.Add(new CampoGenérico(identificadorConNúmero, texto));
                            }
                            break;

                        case CampoParámetrosDeRuta.IdentificadorDeParámetrosDeRuta:
                            CampoParámetrosDeRuta parámetrosDeRuta = new CampoParámetrosDeRuta(texto);
                            campos.Add(parámetrosDeRuta);
                            break;

                        case CampoAtributo.IdentificadorDeEtiqueta:
                            campos.Add(new CampoAtributo(texto));
                            break;

                        case CampoEsCiudad.IdentificadorDeEtiqueta:
                            if (número != null)
                            {
                                campos.Add(new CampoGenérico(identificadorConNúmero, texto));
                            }
                            else
                            {
                                campos.Add(LeeCampoEsCiudad(texto));
                            }
                            break;

                        case CampoIndiceDeCiudad.IdentificadorDeEtiqueta:
                            campos.Add(LeeCampoIndiceDeCiudad(texto));
                            break;

                        default:
                            campos.Add(new CampoGenérico(identificadorConNúmero, texto));
                            break;
                        }
                        #endregion
                    }
                    else
                    {
                        string mensaje;
                        if (línea.StartsWith("["))
                        {
                            mensaje = string.Format("Se encontró un elemento nuevo ({0}) antes de encontrar el final del elemento [{1}].",
                                                    línea,
                                                    laClase);
                        }
                        else
                        {
                            mensaje = string.Format("Error buscando '=' en: {0}\n" +
                                                    "La línea debería ser una línea en blanco, un comentario, o un campo.",
                                                    línea);
                        }
                        throw new ArgumentException(mensaje);
                    }
                }

                // Lee la próxima linea.
                línea = LeeLaPróximaLínea();

                // Si llegamos al final del archivo entonces hay un error
                // porque todavía no hemos encontrado el final del elemento.
                if (línea == null)
                {
                    throw new ArgumentException(string.Format("Se encontró el final del archivo estando dentro del elemento [{0}]", laClase));
                }
            }

            return(campos);
        }