public static IEnumerable <ImportData> FromDat(FileInfo file, ImportConfiguration configuration, int expirationDays) { List <ImportData> orders = new List <ImportData>(); string line = ""; Boolean final = false; ImportData Orden = new ImportData(); ImportData OrdenCabecera = new ImportData(); int VersionEnvioPedido = 0; string cabecera = ""; int contadorlinias = -1; try { //leemos el fichero seleccionado linea por linea using (System.IO.StreamReader sr = new System.IO.StreamReader(file.FullName)) { while ((line = sr.ReadLine()) != null && !final) { //contamos linias leidas contadorlinias = contadorlinias + 1; //segun el tipo de registro insertamos unos campos o otros al objeto creado string Tipo = line.Substring(11, 2).Trim(); //cada 4 filas insertamos los datos sin contar la cabecera inicial tipo 00 switch (Tipo) { //registro primer orden de suministro case "00": cabecera = line; break; case "05": //Literal Orden.SetLiteral05(line.Substring(0, 3).Trim()); //Numero envio Orden.SetNumEnvio(line.Substring(3, 4).Trim()); //Contador Orden.SetContador05(line.Substring(7, 4).Trim()); //Tipo Orden.SetTipo05(line.Substring(11, 2).Trim()); //Instalacion Orden.SetInstalacion05(line.Substring(13, 8).Trim()); //Codigo cepsa Orden.SetCodCepsa(line.Substring(21, 9).Trim()); //Cliente Orden.SetCliente(line.Substring(30, 8).Trim()); //Destinatario Orden.SetDestinatario(line.Substring(38, 40).Trim()); //Cae Orden.SetCae(line.Substring(78, 12).Trim()); //Registro Fiscal Orden.SetRegistroFiscal(line.Substring(90, 1).Trim()); //IEE Orden.SetIee(line.Substring(91, 10).Trim()); //Fecha Desde Orden.SetFechaDesde(line.Substring(101, 8).Trim()); //Fecha Hasta Orden.SetFechaHasta(line.Substring(109, 8).Trim()); //Duracion Orden.SetDuracion(line.Substring(117, 3).Trim()); //Condiciones Orden.SetCondiciones05(line.Substring(120, 5).Trim()); //Hora Desde Orden.SetHoraDesde(line.Substring(125, 4).Trim()); //Hora Hasta Orden.SetHoraHasta(line.Substring(129, 4).Trim()); //Observaciones 1 Orden.SetObservaciones1(line.Substring(133, 30).Trim()); //Observaciones 2 Orden.SetObservaciones2(line.Substring(163, 30).Trim()); break; //registro segundo orden de suministro case "06": //Literal Orden.SetLiteral06(line.Substring(0, 3).Trim()); //Numero envio Orden.SetNumEnvio(line.Substring(3, 4).Trim()); //Contador Orden.SetContador06(line.Substring(7, 4).Trim()); //Tipo Orden.SetTipo06(line.Substring(11, 2).Trim()); //Instalacion Orden.SetInstalacion06(line.Substring(13, 9).Trim()); //Contacto Orden.SetContacto(line.Substring(22, 30).Trim()); //Cargo Orden.SetCargo(line.Substring(52, 30).Trim()); //Telefono Orden.SetTelefono(line.Substring(82, 15).Trim()); //Fax Orden.SetFax(line.Substring(97, 15).Trim()); //Nif Orden.SetNif(line.Substring(112, 14).Trim()); break; //registro tercer orden de suministro case "07": //Literal Orden.SetLiteral07(line.Substring(0, 3).Trim()); //Numero envio Orden.SetNumEnvio(line.Substring(3, 4).Trim()); //Contador Orden.SetContador07(line.Substring(7, 4).Trim()); //Tipo Orden.SetTipo07(line.Substring(11, 2).Trim()); //Instalacion Orden.SetInstalacion07(line.Substring(13, 9).Trim()); //Calle 1 Orden.SetCalle1(line.Substring(22, 35).Trim()); //Calle 2 Orden.SetCalle2(line.Substring(57, 35).Trim()); //Calle 3 Orden.SetCalle3(line.Substring(92, 35).Trim()); //Municipio Orden.SetMunicipio(line.Substring(127, 5).Trim()); //Localidad Orden.SetLocalidad(line.Substring(132, 35).Trim()); //Codigo Postal Orden.SetCodigoPostal(line.Substring(167, 5).Trim()); //Provincia Orden.SetProvincia(line.Substring(172, 2).Trim()); //Pais Orden.Setpais(line.Substring(174, 3).Trim()); //Codigo postal internacional Orden.SetCodigoPostalInternacional(line.Substring(177, 10).Trim()); //Region Orden.SetRegion(line.Substring(187, 3).Trim()); //Ruta Orden.SetRuta(line.Substring(193, 3).Trim()); break; //registro cuarto orden de suministro case "14": //Literal Orden.SetLiteral14(line.Substring(0, 3).Trim()); //Numero envio Orden.SetNumEnvio(line.Substring(3, 4).Trim()); //Contador Orden.SetContador14(line.Substring(7, 4).Trim()); //Tipo Orden.SetTipo14(line.Substring(11, 2).Trim()); //Operador Orden.SetOperador14(line.Substring(13, 6).Trim()); //Suministrador Orden.SetSuministrador14(line.Substring(19, 6).Trim()); if (VersionEnvioPedido == 0) { //Transportista Orden.SetTransportista14(line.Substring(25, 6).Trim()); //Pedido Orden.SetPedido(line.Substring(31, 15).Trim()); //Instalacion Orden.SetInstalacion14(line.Substring(47, 10).Trim()); //Material Orden.SetMaterial(line.Substring(57, 9).Trim()); //Cantidad Orden.SetCantidad(line.Substring(66, 11).Trim()); //Unidad de medida Orden.SetUnidadDeMedida(line.Substring(77, 2).Trim()); //Fecha incial Orden.SetFechaInicial(line.Substring(79, 8).Trim()); //Fecha Final Orden.SetFechaFinal(line.Substring(87, 8).Trim()); //Tipo de operacion Orden.SetTipoDeOperador(line.Substring(95, 1).Trim()); //Centro Orden.SetCentro(line.Substring(96, 4).Trim()); //Condiciones Orden.SetCondiciones14(line.Substring(100, 5).Trim()); //Horario Orden.SetHorario(line.Substring(105, 8).Trim()); //obervaciones 1 Orden.SetObservaciones1(line.Substring(113, 30).Trim()); //observaciones 2 Orden.SetObservaciones2(line.Substring(143, 30).Trim()); //ultima descarga Orden.SetUltimaDescarga(line.Substring(173, 1).Trim()); //volumen 1 Orden.SetVolumen1(line.Substring(174, 6).Trim()); //volumen 2 Orden.SetVolumen2(line.Substring(180, 6).Trim()); //volumne 3 Orden.SetVolumen3(line.Substring(186, 6).Trim()); //nivel de deposito 1 Orden.SetNivelDeDeposito1(line.Substring(192, 2).Trim()); //nivel de deposito 2 Orden.SetNivelDeDeposito2(line.Substring(194, 2).Trim()); //nivel de deposito 3 Orden.SetNivelDeDeposito3(line.Substring(196, 2).Trim()); //llenado Orden.SetLlenado(line.Substring(198, 1).Trim()); //vaciado Orden.SetVaciado(line.Substring(199, 1).Trim()); } else if (VersionEnvioPedido == 1) { //Transportista Orden.SetTransportista14(line.Substring(25, 10).Trim()); //Pedido Orden.SetPedido(line.Substring(35, 15).Trim()); //Instalacion Orden.SetInstalacion14(line.Substring(51, 10).Trim()); //Material Orden.SetMaterial(line.Substring(61, 9).Trim()); //Cantidad Orden.SetCantidad(line.Substring(70, 11).Trim()); //Unidad de medida Orden.SetUnidadDeMedida(line.Substring(81, 2).Trim()); //Fecha incial Orden.SetFechaInicial(line.Substring(83, 8).Trim()); //Fecha Final Orden.SetFechaFinal(line.Substring(91, 8).Trim()); //Tipo de operacion Orden.SetTipoDeOperador(line.Substring(99, 1).Trim()); //Centro Orden.SetCentro(line.Substring(100, 4).Trim()); //Condiciones Orden.SetCondiciones14(line.Substring(104, 5).Trim()); //Horario Orden.SetHorario(line.Substring(109, 8).Trim()); //obervaciones 1 Orden.SetObservaciones1(line.Substring(117, 30).Trim()); //observaciones 2 Orden.SetObservaciones2(line.Substring(147, 30).Trim()); //ultima descarga Orden.SetUltimaDescarga(line.Substring(177, 1).Trim()); //volumen 1 Orden.SetVolumen1(line.Substring(178, 6).Trim()); //volumen 2 Orden.SetVolumen2(line.Substring(184, 6).Trim()); //volumne 3 Orden.SetVolumen3(line.Substring(190, 6).Trim()); //nivel de deposito 1 Orden.SetNivelDeDeposito1(line.Substring(196, 2).Trim()); //nivel de deposito 2 Orden.SetNivelDeDeposito2(line.Substring(198, 2).Trim()); //nivel de deposito 3 Orden.SetNivelDeDeposito3(line.Substring(200, 2).Trim()); //llenado Orden.SetLlenado(line.Substring(202, 1).Trim()); //vaciado Orden.SetVaciado(line.Substring(203, 1).Trim()); } break; //marca finalización fichero case "91": final = true; break; } //insertamos los datos del objeto en base de datos(de todos los registros cabecera/suministros orden 1,2,3,4) if (contadorlinias == 4) { //insertamos la cabecera por el rgistro a introducir (order, order_Cepsa) Orden.SetCabeceraOrder(cabecera); //obtenemos los datos de geolocalización de latitud y longitud de google maps. string direccion = Orden.Calle1; string provincia = CodeProvinceTostring(Orden.Provincia).Trim(); string codigopostal = Orden.Cod_Postal; string latitud = "0"; string longitud = "0"; string[] gps = Geocode(direccion, codigopostal, provincia); //validación de los valores de geocalización if (!string.IsNullOrEmpty(gps[0]) && !string.IsNullOrEmpty(gps[1])) { latitud = gps[0]; longitud = gps[1]; } //conversion del opeardor de cepsa if (Orden.Operador00 == "910106") { Orden.Operador00 = "500"; Orden.Operador14 = "500"; } Orden.InsertDatasOrderView(expirationDays, latitud, longitud); orders.Add(Orden); Orden = new ImportData(); contadorlinias = 0; } } sr.Close(); } } catch (Exception exp) { MessageBox.Show("fichero no se ha importado correctamente: " + exp.ToString()); } return(orders); }