none
Ayuda de programacion con un While C# RRS feed

  • Pregunta

  • Hola, 

    Favor su ayuda para replicar un condigo que tengo de ejemplo, utilizando un While y una variable int iRow la cual va de uno en uno recorriendo, eso mismo necesito hacer en el metodo que estoy creando, favor su ayuda.

    CODIGO EJEMPLO:

     protected void GeneraBoleta()
            {
                try
                {
                    string path = txtExcel.Text;
                    SLDocument sl = new SLDocument(path);
                    var pathCsv = ConfigurationManager.AppSettings["pathCSV"].ToString(); ;
                    var lineasCsv = new List<string>();
                    int iRow = 2;
    
                    while (!string.IsNullOrEmpty(sl.GetCellValueAsString(iRow, 1)))
                    {
                        //FILAS Y COLUMAS DE EXCEL (PARAMETROS)
                        string numBoleta = sl.GetCellValueAsString(iRow, 1);
                        string mesBoleta = sl.GetCellValueAsString(iRow, 2);
                        string nombre = sl.GetCellValueAsString(iRow, 3);
                        string codigo = sl.GetCellValueAsString(iRow, 4);
                        string dni = sl.GetCellValueAsString(iRow, 5);
                        string cargo = sl.GetCellValueAsString(iRow, 6);
                        string fechaIngreso = sl.GetCellValueAsString(iRow, 7);
                        string afp = sl.GetCellValueAsString(iRow, 8);
                        string centroCosto = sl.GetCellValueAsString(iRow, 9);
                        string cuspp = sl.GetCellValueAsString(iRow, 10);
                        string tc = sl.GetCellValueAsString(iRow, 11);
                        string faltas = sl.GetCellValueAsString(iRow, 12);
                        string dias = sl.GetCellValueAsString(iRow, 13);
                        string horas = sl.GetCellValueAsString(iRow, 14);

    CODIGO CREADO:

    public void guardaArchivoTexto()
            {
                try
                {
                    var TxtPath = ConfigurationManager.AppSettings["txtPath"].ToString(); ;
                    var lineasTxt = new List<string>();
                    int iRow = 1;
                    while (conteoPalada1 != 0 | conteoPalada2 != 0 | conteoPalada3 != 0 | conteoPalada4 != 0 | conteoPalada5 != 0)
                    {
                        string contePaladaUno = conteoPalada1.ToString();
                        string contePaladaDos = conteoPalada2.ToString();
                        string contePaladaTres = conteoPalada3.ToString();
                        string contePaladaCuatro= conteoPalada4.ToString();
                        string contePaladaCinco = conteoPalada5.ToString();
    
                        string puntoComa = ConfigurationManager.AppSettings["separador"].ToString(); ;
                        string linea = contePaladaUno + puntoComa;
                        //string linea = conteoPalada1.ToString() + conteoPalada2.ToString() + conteoPalada3.ToString();
                        lineasTxt.Add(linea);
                        iRow++;
                    }
                                    
                    if (lineasTxt.Count > 0)
                    {
                        using (StreamWriter csvFile = new StreamWriter(TxtPath + "CicloPalada" + ".txt"))
                        {
                            foreach (var line in lineasTxt)
                            {
                                csvFile.WriteLine(line + "\n");
                            }
    
                            csvFile.Close();
                        }
                    }
                    else
                    {
                        MessageBox.Show("no hay datos para exportar.");
                    }
                    
                }

    jueves, 10 de enero de 2019 17:06

Respuestas

  • pero alli procesas el excel como si fuera un archivo, usa una libreria, la csvhelper puede ayudar

    sino usas

    string fullpath = Path.Combine(TxtPath, "archivo.csv"); string lineas = File.ReadAllLines(fullpath );

    foreach(var linea in lineas){

    string[] partes = linea.Split(';');

    }

    no veo que en ningun lado cambies las variables conteoPalada1, ... 5, revisa el codigo porque no queda claro de donde saen las variables

    saludos


    Leandro Tuttini

    Blog
    MVP Profile
    Buenos Aires
    Argentina


    jueves, 10 de enero de 2019 20:10

Todas las respuestas

  • hola

    entendo quieres trabajar un archivo csv, si es asi que liberia es esa SLDocument  ?

    no evaluaste otra como ser CsvHelper

    saludos


    Leandro Tuttini

    Blog
    MVP Profile
    Buenos Aires
    Argentina

    jueves, 10 de enero de 2019 18:57
  • ese codigo es de otro proyecto que realice con una libreria llamada SpreadsheetLight para recorrer excel y rescatar los valores de las celdas, pero de ese codigo solo quiero poder utilizar el iRow de esa forma para recorrer mi nuevo codigo, mi codigo actual no termina el ciclo queda en un loop infinito.

    public void guardaArchivoTexto()
            {
                try
                {
                    var TxtPath = ConfigurationManager.AppSettings["txtPath"].ToString(); ;
                    var lineasTxt = new List<string>();
                    int iRow = 1;
                    while (conteoPalada1 != 0 | conteoPalada2 != 0 | conteoPalada3 != 0 | conteoPalada4 != 0 | conteoPalada5 != 0)
                    {
                        string contePaladaUno = conteoPalada1.ToString();
                        string contePaladaDos = conteoPalada2.ToString();
                        string contePaladaTres = conteoPalada3.ToString();
                        string contePaladaCuatro= conteoPalada4.ToString();
                        string contePaladaCinco = conteoPalada5.ToString();
    
                        string puntoComa = ConfigurationManager.AppSettings["separador"].ToString(); ;
                        string linea = contePaladaUno + puntoComa;
                        //string linea = conteoPalada1.ToString() + conteoPalada2.ToString() + conteoPalada3.ToString();
                        lineasTxt.Add(linea);
                        iRow++;
                    }
                                    
                    if (lineasTxt.Count > 0)
                    {
                        using (StreamWriter csvFile = new StreamWriter(TxtPath + "CicloPalada" + ".txt"))
                        {
                            foreach (var line in lineasTxt)
                            {
                                csvFile.WriteLine(line + "\n");
                            }
    
                            csvFile.Close();
                        }
                    }
                    else
                    {
                        MessageBox.Show("no hay datos para exportar.");
                    }
                    
                }



    jueves, 10 de enero de 2019 19:28
  • pero alli procesas el excel como si fuera un archivo, usa una libreria, la csvhelper puede ayudar

    sino usas

    string fullpath = Path.Combine(TxtPath, "archivo.csv"); string lineas = File.ReadAllLines(fullpath );

    foreach(var linea in lineas){

    string[] partes = linea.Split(';');

    }

    no veo que en ningun lado cambies las variables conteoPalada1, ... 5, revisa el codigo porque no queda claro de donde saen las variables

    saludos


    Leandro Tuttini

    Blog
    MVP Profile
    Buenos Aires
    Argentina


    jueves, 10 de enero de 2019 20:10
  • Hola. Un bucle while termina cuando se cumple una condición. Viendo tu código no se observa que la condición termine, de ahí el bucle infinito. Deberías actualizar cualquier variable ConteoPalada de cierta forma que valga cero. Revisa la lógica. 

    Si se solucionó tu consulta no olvides marcar la respuesta. Si te ayudó, vótala como útil. Saludos


    jueves, 10 de enero de 2019 21:43
    Moderador