/// <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); }
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; }
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); }