public EntradasDto LeerArregloDatos(String[] datos) { int numeroElementosPorDia = 0; var ElementosPorDia = new ElementosDto(); var estrutura = new EntradasDto { LstElementosPorDia = new List <ElementosDto>() }; //Recorremos el arreglo de datos para cargarlo en una estructura for (int i = 0; i < datos.Length; i++) { //leemos el valor correspondeiente a la posicion int valor = Int32.Parse(datos[i]); if (i == 0) // el primer elemento hace referencia al numero de dias { estrutura.NumeroDias = valor; } else if (numeroElementosPorDia == 0) //asignamos el numero de elementos por dia { ElementosPorDia = new ElementosDto { NumeroElementosPorDia = valor }; numeroElementosPorDia = valor; //guargamos el valor para que en el siguiente ciclo no se lea } else { //Se recorre el arreglo en base an numero de elementos por dia y se cargan los pesos //de cada elemento correspondiente a la lista de pesos var lstPesos = new List <PesoDto>(); for (int j = i; j < i + numeroElementosPorDia; j++) { valor = Int32.Parse(datos[j]); lstPesos.Add(new PesoDto(valor)); } if (lstPesos.Count > 0) { ElementosPorDia.LstElementosACargar = lstPesos; // se cargan los pesos al elemento estrutura.LstElementosPorDia.Add(ElementosPorDia); // se carga el elemnto a la estructura } i += numeroElementosPorDia - 1; //actulizamos el indice en base a los elementos procesados numeroElementosPorDia = 0; //reiniciamos el valor para que en el siguiente ciclo se lea } } return(estrutura); }
public async Task <string> ValidarDatosArchivoAsync(IFormFile archivo) { try { String[] arregloDatos; int numeroElementosPorDia = 0; var ElementosPorDia = new ElementosDto(); var estrutura = new EntradasDto { LstElementosPorDia = new List <ElementosDto>() }; String datosLeidos; //leemos el archivo using (var lector = new StreamReader(archivo.OpenReadStream())) { datosLeidos = await lector.ReadToEndAsync(); } //convertimos los datos en un arreglo de datos arregloDatos = datosLeidos.Split('\n'); if (arregloDatos.Length < 3) { return("No se pudo procesar el archivo."); } //verificamos que todos los datos sean numericos foreach (var item in arregloDatos) { bool success = Int32.TryParse(item, out int numero); if (!success || numero < 1 || numero > 500) { return("Todos los elementos del archivo deben ser numeros enteros entre 1 y 500"); } } //Recorremos el arreglo de datos para cargarlo en una estructura for (int i = 0; i < arregloDatos.Length; i++) { //leemos el valor correspondeiente a la posicion int valor = Int32.Parse(arregloDatos[i]); if (i == 0) // el primer elemento hace referencia al numero de dias { if (valor < 1 || valor > 500) { return("El numero de dias a trabajar debe estar entre 1 y 500."); } estrutura.NumeroDias = valor; } else if (numeroElementosPorDia == 0) //asignamos el numero de elementos por dia { if (valor < 1 || valor > 100) { return("El numero de elementos a cargar por dia debe estar entre 1 y 100."); } ElementosPorDia.NumeroElementosPorDia = valor; numeroElementosPorDia = valor; //guargamos el valor para que en el siguiente ciclo no se lea } else { //Se recorre el arreglo en base an numero de elementos por dia y se cargan los pesos //de cada elemento correspondiente a la lista de pesos var lstPesos = new List <PesoDto>(); for (int j = i; j < i + numeroElementosPorDia; j++) { valor = Int32.Parse(arregloDatos[j]); if (valor < 1 || valor > 100) { return("El peso de los elementos a cargar debe estar entre 1 y 100."); } lstPesos.Add(new PesoDto(valor)); } if (lstPesos.Count > 0) { ElementosPorDia.LstElementosACargar = lstPesos; // se cargan los pesos al elemento estrutura.LstElementosPorDia.Add(ElementosPorDia); // se carga el elemnto a la estructura } i += numeroElementosPorDia - 1; //actulizamos el indice en base a los elementos procesados numeroElementosPorDia = 0; //reiniciamos el valor para que en el siguiente ciclo se lea } } //validamos que la estructura sea coherente if (estrutura.NumeroDias != estrutura.LstElementosPorDia.Count) { return("Los datos en el archivo no tienen coherencia."); } foreach (var item in estrutura.LstElementosPorDia) { if (item.NumeroElementosPorDia != item.LstElementosACargar.Count) { return("Los datos en el archivo no tienen coherencia."); } } return(String.Empty); } catch (Exception) { return("La cantidad de elementos en el archivo no es la correcta."); } }