none
Carga de un .txt separado por punto y coma

    Question

  • Hola amigos, hace un tiempo les pregunte de como cargar un archivo .txt a un datagridview y luego guardarlo en una tabla en SQLServer. Bueno el archivo de antes no tenia ni titulo, ni ";" despues de un datos y lo mas complicado que puede ser es que despues de un par de datos trae algo que no tiene que ir osea eliminarlo al momento de cargar.

    ahora les mostrare un poco del archivo.

    FECHA     ;ATM ;SUC;NOMBRE SUCURSAL               ;SEC ;HORA    ;CUENTA       ;TIPO DE CUENTA   ;GLOSA TRANSACCION             ;MONTO      ;ETV
    29/12/2009;xxxx;yyy;XXXXXX                       ;yyy;14:01:42;yyyyyyyyyyy;CTA.CTE.         ;GIRO CAJERO AUTOMATICO        ;ggggggggggggg;SSSSSSSSS
    29/12/2009;xxxx;yyy;XXXXXX                       ;yyy;14:01:42;yyyyyyyyyyy;CTA.CTE.         ;GIRO CAJERO AUTOMATICO        ;ggggggggggggg;SSSSSSSSS
    29/12/2009;xxxx;yyy;XXXXXX                       ;yyy;14:01:42;yyyyyyyyyyy;CTA.CTE.         ;GIRO CAJERO AUTOMATICO        ;ggggggggggggg;SSSSSSSSS
    29/12/2009;xxxx;yyy;XXXXXX                       ;yyy;14:01:42;yyyyyyyyyyy;CTA.CTE.         ;GIRO CAJERO AUTOMATICO        ;ggggggggggggg;SSSSSSSSS
    29/12/2009;xxxx;yyy;XXXXXX                       ;yyy;14:01:42;yyyyyyyyyyy;CTA.CTE.         ;GIRO CAJERO AUTOMATICO        ;ggggggggggggg;SSSSSSSSS
    29/12/2009;xxxx;yyy;XXXXXX                       ;yyy;14:01:42;yyyyyyyyyyy;CTA.CTE.         ;GIRO CAJERO AUTOMATICO        ;ggggggggggggg;SSSSSSSSS
    TOTAL ATM:;8003;   ;TXS: 40 DISPENSADO: 1.824.000
    29/12/2009;xxxx;yyy;XXXXXX                       ;yyy;14:01:42;yyyyyyyyyyy;CTA.CTE.         ;GIRO CAJERO AUTOMATICO        ;ggggggggggggg;SSSSSSSSS
    29/12/2009;xxxx;yyy;XXXXXX                       ;yyy;14:01:42;yyyyyyyyyyy;CTA.CTE.         ;GIRO CAJERO AUTOMATICO        ;ggggggggggggg;SSSSSSSSS

    entonces quiero cargar esto y luego sacar el titulo que trae cada campo, cargar a un datagridview y que luego me los guarde como lo hago ??

    se como puedo guardarlos pero nose como sacar el titulo, y cargar los datos que esten separados por ";".

    ojala me puedan ayudar amigos confio mucho en uds.

    un saludo grande y que tengas un feliz año nuevo todos.
    Wednesday, December 30, 2009 8:36 PM

Answers

  • hola

    solo un comentario por las dudas

    note que cuando haces el Split() de cada dato en el array lo estas dejando tal como esta en un string, para cargar en la grilla no hay drama porque es solo visualziacion pero al ingresarlos en una db y mas si se hace uso de AddWithValue() para definr lo parametros
    es que sino defines al tipo seran para todo del tipo string, lo cual imagino no es del todo correcto

    con lo cual por ejemplo para la linea

    Comando.Parameters.AddWithValue("@Tipo_Reg", datos[0]);

    deberia ser

    Comando.Parameters.AddWithValue("@Tipo_Reg", Convert.ToInt32(datos[0]));

    si este campor en la db es del tipo numerico


    ademas note que cuando haces el split no eliminas los espacios en blanco con el Trim(), ojo porque te agregara esos espacios en la tabla

    por ahi vas a necesitar tomar el ejemplo de jtorrecilla y realziar algunas validaciones y conversiones de tipos
    teniendo en cuenta justamente el tipo que has definido en la db

    no se si sabias pero el AddWithValue() no hace magia para definir el tipo del parametro, este toma la defincion del tipo en base justamente al tipo de la variable que se usa en el parametro
    si usas

    Comando.Parameters.AddWithValue("@Tipo_Reg", Convert.ToInt32(datos[0]));

    el parametro lo define como int
    pero si usas

    Comando.Parameters.AddWithValue("@Tipo_Reg", datos[0]);

    en tu caso sera un varchar o similar, pero todos seran de la misma forma, esto tendras que validarlo


    saludos
    Leandro Tuttini

    Blog
    Buenos Aires
    Argentina
    • Marked as answer by Cristian Pino Tuesday, January 05, 2010 4:56 PM
    Monday, January 04, 2010 9:25 PM
  • hola

    te aconsejaria que le des una mirada a esta libreria

    filehelpers

    te permitira procesar el archivo facilmente

    saludos
    Leandro Tuttini

    Blog
    Buenos Aires
    Argentina
    • Marked as answer by Cristian Pino Thursday, December 31, 2009 12:02 AM
    Wednesday, December 30, 2009 9:38 PM
  • hola

    las columnas en la grilla asl defines en tiempo de diseño ?

    si es asi peude que el numero de valores que la agregas supere a las columans que defines



    ademas veo que en el array empeizas por el nuemro 1, porque es esto ?
    recuerda que lso array en c# con base cero por lo cual iria de 0 a 10 y no de 1 a 11
    esto peude provocar que salgas fuera del rango del array

    prueba de cambiar a algo como esto

    dgv.Rows.Add(datos[0], datos[1], datos[2], datos[3], datos[4], datos[5], datos[6], datos[7], datos[8], datos[9], datos[10]);


    saludos
    Leandro Tuttini

    Blog
    Buenos Aires
    Argentina
    • Marked as answer by Cristian Pino Monday, January 04, 2010 3:56 PM
    Monday, January 04, 2010 3:19 PM
  • Claro ese es el problema las filas de tu fichero no tienen el mismo numero de campos, prueba con algo asi:

    private void b_cargar_Click(object sender, EventArgs e)
            {
                StreamReader objReader = new StreamReader(tx_examinar.Text); 
                List<string> arrText = new List<string>();
                string strLinea = ""; 
                
                while (strLinea != null)
                    {
                        strLinea = objReader.ReadLine();
                        if (strLinea != null)
                        arrText.Add(strLinea);
                    }
                    objReader.Close();
                    objReader.Dispose();

                foreach(string linea in arrText)
                    {
                        string[] datos = linea.Split(';');
       if (datos.Length>4)
         dgv.Rows.Add(datos[0], datos[1], datos[2], datos[3], datos[4], datos[5], datos[6], datos[7], datos[8], datos[9], datos[10]);
                    }
            }

    con la correcion del 4 por el 0, te va a coger aquellos registros que tengan mas de 4 campos, deberias verificar la definicion de tu proceso, quizas necesitas mas validaciones.

    Si la respuesta te ha sido util Marcala como Respuesta o Votala.
    Mi Blog: Jtorrecilla
    • Marked as answer by Cristian Pino Monday, January 04, 2010 6:13 PM
    Monday, January 04, 2010 5:13 PM
    Moderator
  • hola


    para evitar es linea qeu genera el problema podrias agregar validaciones
    por ejemplo


    foreach(string linea in arrText)
    {
        string[] datos = linea.Split(';');

        if(datos.Length < 11)
           continue;

        dgv.Rows.Add(datos[0], datos[1], datos[2], datos[3], datos[4], datos[5], datos[6], datos[7], datos[8], datos[9], datos[10]);
    }


    con ese if descartas las lunea que generen menos de 11 items en el array como esa es ams corta no sera procesada

    para evitar la primer linea podrias convertir al tipo de dato al menos el primer registro,si es del tipo fecha entocnes pasa sino no se procesa


    foreach(string linea in arrText)
    {
        string[] datos = linea.Split(';');

        if(datos.Length < 11)
           continue;


        DateTime fecha;
        if(!DateTime.TryParse(datos[0], out fecha))
          continue;


        dgv.Rows.Add(datos[0], datos[1], datos[2], datos[3], datos[4], datos[5], datos[6], datos[7], datos[8], datos[9], datos[10]);

    }

    como el encabezado no tieen una fecha este no pasara por a conversion de tipo, el resto si

    saludos
    Leandro Tuttini

    Blog
    Buenos Aires
    Argentina
    • Marked as answer by Cristian Pino Monday, January 04, 2010 7:06 PM
    Monday, January 04, 2010 6:19 PM
  • pues vamos a ver, para hacerlo, creo que estabas usando OleDBCommand verdad?:

    foreach(string linea in arrText)
    {
        string[] datos = linea.Split(';');

        if(datos.Length < 11)
           continue;


        DateTime fecha;
        if(!DateTime.TryParse(datos[0], out fecha))
          continue;


        dgv.Rows.Add(datos[0], datos[1], datos[2], datos[3], datos[4], datos[5], datos[6], datos[7], datos[8], datos[9], datos[10]);
        OledbCommand cmd=new OleDbCommand("elnombredetuprocedimiento");
    cmd.CommandType=CommandType.StoredProcedure;
    cmd.Parameters.AddWithValue("tuparametro1",datos[0]);
    cmd.Parameters.AddWithValue("tuparametro2",datos[1]);
    cmd.Parameters.AddWithValue("tuparametro3",datos[2]);
    cmd.Parameters.AddWithValue("tuparametro4",datos[3]);
    cmd.Parameters.AddWithValue("tuparametro5",datos[4]);
    cmd.Parameters.AddWithValue("tuparametro6",datos[5]);
    cmd.Parameters.AddWithValue("tuparametro7",datos[6]);
    cmd.Parameters.AddWithValue("tuparametro8",datos[7]);
    cmd.Parameters.AddWithValue("tuparametro9",datos[8]);
    cmd.Parameters.AddWithValue("tuparametro10",datos[9]);
    cmd.Parameters.AddWithValue("tuparametro11",datos[10]);
    cmd.Connection=tuConexion;
    cmd.ExecuteNonQuery();

    }

    Te estoy hablando de memoria puede que haya alguna Mayuscula que se me haya pasado ya sabes que c# es Case Sensitive

    Si la respuesta te ha sido util Marcala como Respuesta o Votala.
    Mi Blog: Jtorrecilla
    • Marked as answer by Cristian Pino Tuesday, January 05, 2010 4:56 PM
    Monday, January 04, 2010 8:09 PM
    Moderator
  • Aqui tienes, solo adecualo, es decir, ponle el nombre del procedimiento y de los parametros segun sean necesarios,
    private void b_cargar_Click(object sender, EventArgs e)
            {
                StreamReader objReader = new StreamReader(tx_examinar.Text); 
                List<string> arrText = new List<string>();
                string strLinea = ""; 
                
                while (strLinea != null)
                    {
                        strLinea = objReader.ReadLine();
                        if (strLinea != null)
                        arrText.Add(strLinea);
                    }
                    objReader.Close();
                    objReader.Dispose();

                foreach(string linea in arrText)
                    {
                        string[] datos = linea.Split(';');
       if(datos.Length < 11)
           continue;


        DateTime fecha;
        if(!DateTime.TryParse(datos[0], out fecha))
          continue;


        dgv.Rows.Add(datos[0], datos[1], datos[2], datos[3], datos[4], datos[5], datos[6], datos[7], datos[8], datos[9], datos[10]);
       using (SqlCommand Comando = new SqlCommand("inserta_boton_de_pago"))
                    {
                        Comando.CommandType = CommandType.StoredProcedure;

                        Comando.Parameters.AddWithValue("@Tipo_Reg", datos[0]);
                        Comando.Parameters.AddWithValue("@SubTipo",  datos[1]);
                        Comando.Parameters.AddWithValue("@Rut_Compra", datos[2]);
                        Comando.Parameters.AddWithValue("@DV_Compra",  datos[3]);
                        Comando.Parameters.AddWithValue("@Identificador",  datos[4]);
                        Comando.Parameters.AddWithValue("@Glosa_Multipago",  datos[5]);
                        Comando.Parameters.AddWithValue("@Fecha_Venc",  datos[6]);
                        Comando.Parameters.AddWithValue("@Estado_Pag",  datos[7]);
                        Comando.Parameters.AddWithValue("@TX_Banco",  datos[8]));
                        Comando.Parameters.AddWithValue("@Fec_Ope",  datos[9]);
                        Comando.Parameters.AddWithValue("@Hor_Ope",  datos[10]);
       Procedimiento.Ejecuta_Proc(Comando);
    }
                    }
            }



    Si la respuesta te ha sido util Marcala como Respuesta o Votala.
    Mi Blog: Jtorrecilla
    • Marked as answer by Cristian Pino Tuesday, January 05, 2010 4:56 PM
    Monday, January 04, 2010 9:06 PM
    Moderator
  • Cierto Leandro, solamente le puse la base del ejemplo para que con el ejemplo del otro dia vaya siendo capaz de hacerlo....
    Si la respuesta te ha sido util Marcala como Respuesta o Votala.
    Mi Blog: Jtorrecilla
    • Marked as answer by Cristian Pino Tuesday, January 05, 2010 4:56 PM
    Monday, January 04, 2010 9:36 PM
    Moderator
  • hola

    si lo vi y esta perfecto el ejemplo, es por eso que yo tampoco adapter del todo el codigo, solo acote donde podria haber un problema con los tipos.
    la idea es que Cristian lo tenga en cuenta cuando lo implemente

    quise comentarle la logica que aplica el AddWithValue() para qeu se pa que no es magico en la resolucion de tipos de datos hay que definirle el tipo en la variable

    saludos
    Leandro Tuttini

    Blog
    Buenos Aires
    Argentina
    • Marked as answer by Cristian Pino Tuesday, January 05, 2010 4:56 PM
    Monday, January 04, 2010 9:54 PM
  • hola

    Opening a remote machine folder structure in c# file browse dialog

    seria bueno si a la propiedad InitialDirectory  le indicas directametne una carpeta compartida en el remote server
    como lo explicia en el link

    como bien comenta jtorrecilla peudes tambien estar teniendo problemas en els ervicio de DNS, o sea es el servicio de resolucion de nombre, pero esto se soluciona si pones la ip de la pc remota

    sino prueba desde el Windows explorer acceder a este ruta en el servidor remoto \\remotemachine\sharefolder
    si en el Windows Explroer lo abres correctamente esta perfecto

    ahora tambien pdorias ser temas de autenticacion valida que no requiere credenciales para acceder a esta carpeta

    saludos
    Leandro Tuttini

    Blog
    Buenos Aires
    Argentina
    • Marked as answer by Cristian Pino Wednesday, January 06, 2010 1:48 PM
    Wednesday, January 06, 2010 12:46 AM
  • Aqui tienes:


    foreach (string linea in arrText)
                {
                    
                    progressBar1.Value ++; 
                    Application.DoEvents(); 
                    
                    string[] datos = linea.Trim().Split(';');

                    if (datos.Length < 11)
                        continue;
                    
                    DateTime fecha;
                    if (!DateTime.TryParse(datos[0], out fecha))
                        continue;

                    dgv.Rows.Add(datos[0], datos[1], datos[2], datos[3], datos[4], datos[5], datos[6], datos[7], datos[8], datos[9], datos[10]);
                    lb_cargados.Text = dgv.Rows.Count.ToString();


                    lb_cargados.Visible = true;
                }
                progressBar1.Value=0; 
    MessageBox.Show("Datos Cargados Correctamente");
            }


    Si la respuesta te ha sido util Marcala como Respuesta o Votala.
    Mi Blog: Jtorrecilla
    Wednesday, January 06, 2010 9:02 PM
    Moderator
  • hola

    con respecto al punto 4 prueba haciendo

    label1.Text =  string.Format("{0}%", (progressBar1.Value / progressBar1.Maximum) * 100);

    loa otros punto se debe a que no puedes asignar la propiedad Localtion como lo haces

    Control. Location

    debes crear un Point

    veras en el ejemplo del link que hace

    textBox1.Location = New Point(15, 15)
    es asi como debes asignar el location

    podrias suar algo como esto

    int valX = Convert.ToInt32((progressBar1.Location.X + progressBar1.Width) / 2);
    int valY = progressBar1.Location.Y;
    label1.Location = new Point(valX, valY);


    saludos
    Leandro Tuttini

    Blog
    Buenos Aires
    Argentina
    • Marked as answer by Cristian Pino Thursday, January 07, 2010 1:02 PM
    Thursday, January 07, 2010 12:43 PM
  • hola

    si lo marca en verde quiere decir que es un warning, si miras la lista de errores que proporciona el VS alli seguramente veras la descripcion

    igual por lo que describes no creo que este tipo de advertencias sea la causa

    has podido depurar la aplciacion y ver la causa


    podrias sino agregar mensajes

    int valX = Convert.ToInt32((progressBar1.Location.X + progressBar1.Width) / 2);
    int valY = progressBar1.Location.Y;

    Messagebox.Show(string.Format("ValorX:{0} ValorY:{1}", (progressBar1.Location.X + progressBar1.Width) / 2, valY));

    label1.Location = new Point(valX, valY);


    para poder ver que valor calcula

    saludos
    Leandro Tuttini

    Blog
    Buenos Aires
    Argentina
    • Marked as answer by Cristian Pino Thursday, January 07, 2010 2:43 PM
    Thursday, January 07, 2010 2:18 PM

All replies

  • hola

    te aconsejaria que le des una mirada a esta libreria

    filehelpers

    te permitira procesar el archivo facilmente

    saludos
    Leandro Tuttini

    Blog
    Buenos Aires
    Argentina
    • Marked as answer by Cristian Pino Thursday, December 31, 2009 12:02 AM
    Wednesday, December 30, 2009 9:38 PM
  • Hola amigo, gracias por responder.

    mira he estado leyendo un poco la libreria, pero no la entiendo, me podrias dar un ejemplo de como se puede hacer ??

    CON ESTE CODIGO CARGO UN ARCHIVO, PERO SIN SEPARADOR:

    StreamReader objReader = new StreamReader(tx_buscar.Text); //RutaFichero es la ruta de tu fichero la que tienes en la caja de texto...
                string strLinea = "";
                ArrayList arrText = new ArrayList();

                while (strLinea != null)
                {
                    strLinea = objReader.ReadLine();
                    if (strLinea != null)
                        arrText.Add(strLinea);
                }
                objReader.Close();
                objReader.Dispose();


                foreach
                    (
                    object linea in arrText
                    )
                {
                    // El primer numero es la posicion del caracter y el segundo numero es la
                    //Longitud de caracteres que voy a rescatar.
                    string Tipo_Reg = linea.ToString().Substring(1, 1);
                    string SubTipo = linea.ToString().Substring(2, 1);
                    string Rut_Compra = linea.ToString().Substring(4, 8);
                    string DV_Compra = linea.ToString().Substring(12, 1);
                    string Identificador = linea.ToString().Substring(13, 8);
                    string Glosa_Multipago = linea.ToString().Substring(25, 10);
                    string Fecha_Venc = linea.ToString().Substring(55, 8);
                    string Estado_Pag = linea.ToString().Substring(63, 3);
                    string TX_Banco = linea.ToString().Substring(66, 7);
                    string Fec_Ope = linea.ToString().Substring(73, 8);
                    string Hor_Ope = linea.ToString().Substring(81, 6);
                    string Fec_Contable = linea.ToString().Substring(87, 8);
                    string Rut_Cuenta = linea.ToString().Substring(96, 8);
                    string Dv_Cuenta = linea.ToString().Substring(104, 1);
                    string Suc = linea.ToString().Substring(108, 1);
                    string Tipo_Conv = linea.ToString().Substring(109, 2);
                    string Numero_Conv = linea.ToString().Substring(112, 4);
                    string Glosa_Pago = linea.ToString().Substring(116, 10);
                    string Cod_Pago = linea.ToString().Substring(129, 4);
                    string Monto_Pago = linea.ToString().Substring(163, 8);
                    string Res_Batch = linea.ToString().Substring(132, 4);
                    string Alerta = linea.ToString().Substring(174, 1);
                    string Filler = linea.ToString().Substring(137, 4);
                    dgv.Rows.Add(Tipo_Reg, SubTipo, Rut_Compra, DV_Compra, Identificador, Glosa_Multipago, Fecha_Venc, Estado_Pag, TX_Banco, Fec_Ope, Hor_Ope, Fec_Contable, Rut_Cuenta, Dv_Cuenta, Suc, Tipo_Conv, Numero_Conv, Glosa_Pago, Cod_Pago, Monto_Pago, Res_Batch, Alerta, Filler);

    COMO LO PUEDO HACER UN SEPARADOR CON ";"

    PORFAVOR AYUDAAA QUE NO ENTIENDOOOOO NADA.

    DE ANTE MANO MUCHAS GRACIAS.
    Thursday, December 31, 2009 12:02 AM
  • hola

    pero si usas un separador no necesitas cortar con SubString() este se sua ciando los registros vienes en largo fijo

    si tienes un delimitador usa el Split() del string


    foreach(object linea in arrText)
    {
         string[] datos = linea.Split(';');

         dgv.Rows.Add(datos[0], datos[1], ....);
    }

    como veras cada posicion del array de string contendra un bloque de informacion
    aqui lo hice facil y lo paso directo a el Row, pero la idea es que tambien puedas validar antes si la info es corrrecta y tambien hacer un Trim() de cada valor asi eliminas los espacios en blanco

    saludos
    Leandro Tuttini

    Blog
    Buenos Aires
    Argentina
    Thursday, December 31, 2009 1:07 AM
  • Hola amigo.

    Mira he visto tu ejemplo y lo he tratado de implementar, son 11 campos y varios registros, pero como al registro 20 o puede ser despues aparese un caracter que necesito eliminar para cargar y eso nose junto con la carga. aqui estael codigo aunque no va muy avanzado pero hice lo que pude.

    el caracter que queiro que se elimine esta en el primer post es donde sale la palabra TOTAL ATM..... bueno toda esa linea quiero que se elimine y siga cargando normal y asi sucesibamente con todas lineas que aparescan asi hacia abajo del archivo.

    private void b_cargar_Click(object sender, EventArgs e)
            {
                ArrayList arrText = new ArrayList();

                foreach(object linea in arrText)
                    {
                        string[] datos = linea.Split(';');
                        dgv.Rows.Add(fecha[0] , atm[1] ); -->> aqui me lanza un error, eso si que puse don campos para probar pero no me funiono.
                    }
            }

    Gracias
    Thursday, December 31, 2009 3:03 AM
  • hola

    mmm creo que no has captado el concepto, al hacer un split cargas los valors a un array que esta en una variable

    la idea es utilizar el nombre de esa variable y acceder a cada posicion

    si ves el ejemplo que puse yo use simpre el nombre "datos" y accedi a cada posicion

    dgv.Rows.Add(datos[0], datos[1] , ....);

    veras que siempre uso la variable datos que contiene el array


    - porque es que has usado distintos nombres sino los tienes definidos ?
    justamente lo que marcas en negrita es incorrecto, debes usar el nombre del array, en este caso de nombre "datos"



    te dejo un tutorial que acosejo leas asi entras en tema

    saludos
    Leandro Tuttini

    Blog
    Buenos Aires
    Argentina
    Thursday, December 31, 2009 4:10 AM
  • hola

    mmm creo que no has captado el concepto, al hacer un split cargas los valors a un array que esta en una variable

    la idea es utilizar el nombre de esa variable y acceder a cada posicion

    si ves el ejemplo que puse yo use simpre el nombre "datos" y accedi a cada posicion

    dgv.Rows.Add(datos[0], datos[1] , ....);

    veras que siempre uso la variable datos que contiene el array


    - porque es que has usado distintos nombres sino los tienes definidos ?
    justamente lo que marcas en negrita es incorrecto, debes usar el nombre del array, en este caso de nombre "datos"



    te dejo un tutorial que acosejo leas asi entras en tema

    saludos
    Leandro Tuttini

    Blog
    Buenos Aires
    Argentina

    Ahhh ya si entendi eso era, ahora nose porque pero me tira un error en la palabra "Split", Tengo que declarar algo mas para que me pesque ???
    Thursday, December 31, 2009 4:22 AM
  • si no me di cuenta de un detalle que se me paso, linea es del tipo object, y deberia ser un string


    List<string> arrText = new List<string>();

    while (strLinea != null)
    {
        strLinea = objReader.ReadLine();
        if (strLinea != null)
            arrText.Add(strLinea);
    }
    objReader.Close();
    objReader.Dispose();

    foreach(string linea in arrText)
    {
         string[] datos = linea.Split(';');

         dgv.Rows.Add(datos[0], datos[1], ....);
    }


    te consejo que dejes de usar el arraylist, usa las listas genericas son mucho mejor
    en este caso use una lista del tipo string y veras que luego para recorrerla se define como string a la variable linea, con eso hata que Split() funcione


    te recomiento este link



    saludos

    Leandro Tuttini

    Blog
    Buenos Aires
    Argentina
    Thursday, December 31, 2009 4:57 AM
  • me sigue dando errores en las sigueintes lineas.

    List<string> arrText = new List<string>();
               
                while (strLinea != null)
                    {
                        strLinea = objReader .ReadLine();
                        if (strLinea != null)
                        arrText.Add(strLinea );
                    }
                    objReader .Close();
                    objReader .Dispose();

                foreach(string linea in arrText)
                    {
                        string[] datos = linea.Split(';');

                        dgv.Rows.Add(datos[0], datos[1], datos[2], datos[3], datos[4], datos[5], datos[6], datos[7], datos[8], datos[9], datos[10]);
                    }

    solamente en los datos que estan con subrallado y cursiva en esos tengo los problemas.

    ojala pueda terminar luego este cachito que me pasaron y con tu ayuda mejor.

    de ante mano muchas gracias.
    Thursday, December 31, 2009 5:21 AM
  • hola

    dices que tienes errores en esas lineas, pero puedes ver el mensaje de error ?
    siempre ayuda tener el mensaje para poder determinar la causa


    igualmente me imagino que puede venir por el tipo de datos
    valida de que tipo declaras a strLinea, esa deberia ser del tipo string


    saludos
    Leandro Tuttini

    Blog
    Buenos Aires
    Argentina
    Thursday, December 31, 2009 1:42 PM
  • hola

    dices que tienes errores en esas lineas, pero puedes ver el mensaje de error ?
    siempre ayuda tener el mensaje para poder determinar la causa


    igualmente me imagino que puede venir por el tipo de datos
    valida de que tipo declaras a strLinea, esa deberia ser del tipo string


    saludos
    Leandro Tuttini

    Blog
    Buenos Aires
    Argentina


    Holaaa

    Mira mis errores son:

    El nombre 'strLinea' no existe en el ontexto actual
    el nombre 'objReader' no existe en el ontexto actual

    tendre que declarar algo mas ??

    bueno un saludo.

    gracias de ante mano.
    Thursday, December 31, 2009 2:37 PM
  • hola

    en el codigo original que usabas y habias posteado en la pregunta tenias estas variables
    que paso con ellas que ahora no estan


    StreamReader objReader = new StreamReader(tx_buscar.Text);

                string strLinea = "";
                ArrayList arrText = new ArrayList();

                while (strLinea != null)
                {
                    strLinea = objReader.ReadLine();
                    if (strLinea != null)
                        arrText.Add(strLinea);
                }
                objReader.Close();
                objReader.Dispose();


                foreach
                    (
                    object linea in arrText
                    )
                {
                    // El primer numero es la posicion del caracter y el segundo numero es la
                    //Longitud de caracteres que voy a rescatar.
                    string Tipo_Reg = linea.ToString().Substring(1, 1);
                    string SubTipo = linea.ToString().Substring(2, 1);

    .
    .
    .
    .


    como veras en negrita marco donde estaban, porque es que ahora ya no las tienes ?

    bien ahi donde estan es correcto, porque no las declaras nuevamente

    saludos
    Leandro Tuttini

    Blog
    Buenos Aires
    Argentina
    Thursday, December 31, 2009 11:39 PM
  • Holaaa amigo antes que todo un muy feliz año para todoooss.

    mira el problema es este:

    private void b_cargar_Click(object sender, EventArgs e)
            {
                StreamReader objReader = new StreamReader(tx_examinar.Text);
                List<string> arrText = new List<string>();
                string strLinea = "";
               
                while (strLinea != null)
                    {
                        strLinea = objReader.ReadLine();
                        if (strLinea != null)
                        arrText.Add(strLinea);
                    }
                    objReader.Close();
                    objReader.Dispose();

                foreach(string linea in arrText)
                    {
                        string[] datos = linea.Split(';');

                        dgv.Rows.Add(datos[1], datos[2], datos[3], datos[4], datos[5], datos[6], datos[7], datos[8], datos[9], datos[10], datos[11]); Índice fuera de los límites de la matriz.
                    }
            }

    lo que esta en negrita es el error porque ???, ahora ya no me manda nada de subrayados ni nada.
    Monday, January 04, 2010 3:13 PM
  • hola

    las columnas en la grilla asl defines en tiempo de diseño ?

    si es asi peude que el numero de valores que la agregas supere a las columans que defines



    ademas veo que en el array empeizas por el nuemro 1, porque es esto ?
    recuerda que lso array en c# con base cero por lo cual iria de 0 a 10 y no de 1 a 11
    esto peude provocar que salgas fuera del rango del array

    prueba de cambiar a algo como esto

    dgv.Rows.Add(datos[0], datos[1], datos[2], datos[3], datos[4], datos[5], datos[6], datos[7], datos[8], datos[9], datos[10]);


    saludos
    Leandro Tuttini

    Blog
    Buenos Aires
    Argentina
    • Marked as answer by Cristian Pino Monday, January 04, 2010 3:56 PM
    Monday, January 04, 2010 3:19 PM
  • ya lo probe de la otra forma y me lanza el mismo error

    private void b_cargar_Click(object sender, EventArgs e)
            {
                StreamReader objReader = new StreamReader(tx_examinar.Text);
                List<string> arrText = new List<string>();
                string strLinea = "";
               
                while (strLinea != null)
                    {
                        strLinea = objReader.ReadLine();
                        if (strLinea != null)
                        arrText.Add(strLinea);
                    }
                    objReader.Close();
                    objReader.Dispose();

                foreach(string linea in arrText)
                    {
                        string[] datos = linea.Split(';');
                        dgv.Rows.Add(datos[0], datos[1], datos[2], datos[3], datos[4], datos[5], datos[6], datos[7], datos[8], datos[9], datos[10]);
                    }
            }

    nose que puede ser ya que lo intente de las 2 formas para ver si me funcionaba.

    saludos.
    Monday, January 04, 2010 3:53 PM
  • Hola Cristian, por favor comprueba cual es la longitud del array, tambien puedes hacer algo asi:

    private void b_cargar_Click(object sender, EventArgs e)
            {
                StreamReader objReader = new StreamReader(tx_examinar.Text); 
                List<string> arrText = new List<string>();
                string strLinea = ""; 
                
                while (strLinea != null)
                    {
                        strLinea = objReader.ReadLine();
                        if (strLinea != null)
                        arrText.Add(strLinea);
                    }
                    objReader.Close();
                    objReader.Dispose();

                foreach(string linea in arrText)
                    {
                        string[] datos = linea.Split(';');
       if (datos.Length>0)
                        dgv.Rows.Add(datos[0], datos[1], datos[2], datos[3], datos[4], datos[5], datos[6], datos[7], datos[8], datos[9], datos[10]);
                    }
            }

    Si la respuesta te ha sido util Marcala como Respuesta o Votala.
    Mi Blog: Jtorrecilla
    Monday, January 04, 2010 4:03 PM
    Moderator
  • hola

    si haces un


    MessageBox.Show(datos.Length);

    que valor visualizas ?


    foreach(string linea in arrText)
    {
        string[] datos = linea.Split(';');

        MessageBox.Show(datos.Length);

        dgv.Rows.Add(datos[0], datos[1], datos[2], datos[3], datos[4], datos[5], datos[6], datos[7], datos[8], datos[9], datos[10]);
    }


    esto es para verificar que tienes 10 posiciones en el array


    - has podido verificar lo de las columnas, por ahi lo del indice es proque estas queriendo insertar datos qeu esceden la cantidad de columasn que defines

    saludos
    Leandro Tuttini

    Blog
    Buenos Aires
    Argentina
    Monday, January 04, 2010 4:14 PM
  • mira no me pesca el mensaje me tira error, lo otro es que cuanto y cuento los datos del archivo y son 11, pero empesando con el "0" se que son 10 y los nombres de los campos del datagridview los pongo en tiempo de diseño.

    este es el tipo de archivo que me llega.

    FECHA     ;ATM ;SUC;NOMBRE SUCURSAL               ;SEC ;HORA    ;CUENTA       ;TIPO DE CUENTA   ;GLOSA TRANSACCION             ;MONTO      ;ETV
    29/12/2009;8003;013;IQUIQUE                       ;0484;14:01:42;0001200016218;CTA.CTE.         ;GIRO CAJERO AUTOMATICO        ;00000200000;PROSEGUR
    29/12/2009;8003;013;IQUIQUE                       ;0485;14:26:32;0083373000593;CTA.CTE.         ;GIRO CAJERO AUTOMATICO        ;00000098000;PROSEGUR
    29/12/2009;8003;013;IQUIQUE                       ;0486;14:42:07;0000000000000;REDBANC          ;GIRO ADQUIRENTE               ;00000020000;PROSEGUR
    29/12/2009;8003;013;IQUIQUE                       ;0488;15:14:25;0002573008467;CTA.CTE.         ;GIRO CAJERO AUTOMATICO        ;00000013000;PROSEGUR
    29/12/2009;8003;013;IQUIQUE                       ;0490;15:40:06;0000000000000;REDBANC          ;GIRO ADQUIRENTE               ;00000040000;PROSEGUR
    29/12/2009;8003;013;IQUIQUE                       ;0492;16:00:15;0023973039440;CTA.CTE.         ;GIRO CAJERO AUTOMATICO        ;00000050000;PROSEGUR
    29/12/2009;8003;013;IQUIQUE                       ;0494;16:02:27;0002170239108;CTA.CTE.         ;GIRO CAJERO AUTOMATICO        ;00000030000;PROSEGUR
    29/12/2009;8003;013;IQUIQUE                       ;0495;16:03:25;0052773032467;CTA.CTE.         ;GIRO CAJERO AUTOMATICO        ;00000001000;PROSEGUR
    29/12/2009;8003;013;IQUIQUE                       ;0496;16:40:09;0000000000000;REDBANC          ;GIRO ADQUIRENTE               ;00000130000;PROSEGUR
    29/12/2009;8003;013;IQUIQUE                       ;0497;16:40:58;0023570187970;CTA.CTE.         ;GIRO CAJERO AUTOMATICO        ;00000045000;PROSEGUR
    29/12/2009;8003;013;IQUIQUE                       ;0499;16:42:31;0023661140739;AHO.VISTA        ;GIRO CAJERO AUTOMATICO        ;00000117000;PROSEGUR
    29/12/2009;8003;013;IQUIQUE                       ;0500;16:43:09;0023661140739;AHO.VISTA        ;GIRO CAJERO AUTOMATICO        ;00000033000;PROSEGUR
    29/12/2009;8003;013;IQUIQUE                       ;0501;16:53:08;0000000000000;REDBANC          ;GIRO ADQUIRENTE               ;00000005000;PROSEGUR
    29/12/2009;8003;013;IQUIQUE                       ;0503;16:55:30;0000000000000;REDBANC          ;GIRO ADQUIRENTE               ;00000010000;PROSEGUR
    29/12/2009;8003;013;IQUIQUE                       ;0504;17:29:46;0024573011755;CTA.CTE.         ;GIRO CAJERO AUTOMATICO        ;00000040000;PROSEGUR
    29/12/2009;8003;013;IQUIQUE                       ;0506;17:49:37;0091973046361;CTA.CTE.         ;GIRO CAJERO AUTOMATICO        ;00000004000;PROSEGUR
    29/12/2009;8003;013;IQUIQUE                       ;0511;18:59:43;0023573007379;CTA.CTE.         ;GIRO CAJERO AUTOMATICO        ;00000002000;PROSEGUR
    29/12/2009;8003;013;IQUIQUE                       ;0513;19:00:38;0001370332696;CTA.CTE.         ;GIRO CAJERO AUTOMATICO        ;00000002000;PROSEGUR
    29/12/2009;8003;013;IQUIQUE                       ;0515;20:02:43;0024573013367;CTA.CTE.         ;GIRO CAJERO AUTOMATICO        ;00000180000;PROSEGUR
    29/12/2009;8003;013;IQUIQUE                       ;0516;22:00:40;0001370010010;CTA.CTE.         ;GIRO CAJERO AUTOMATICO        ;00000210000;PROSEGUR
    29/12/2009;8003;013;IQUIQUE                       ;0517;22:01:42;0052770059381;CTA.CTE.         ;GIRO CAJERO AUTOMATICO        ;00000008000;PROSEGUR
    29/12/2009;8003;013;IQUIQUE                       ;0519;22:55:43;0001300168341;CTA.CTE.         ;GIRO CAJERO AUTOMATICO        ;00000022000;PROSEGUR
    29/12/2009;8003;013;IQUIQUE                       ;0521; 1:28:24;0025370031536;CTA.CTE.         ;GIRO CAJERO AUTOMATICO        ;00000040000;PROSEGUR
    29/12/2009;8003;013;IQUIQUE                       ;0524; 7:29:38;0023573012381;CTA.CTE.         ;GIRO CAJERO AUTOMATICO        ;00000005000;PROSEGUR
    29/12/2009;8003;013;IQUIQUE                       ;0525; 7:40:43;0023570096044;CTA.CTE.         ;GIRO CAJERO AUTOMATICO        ;00000008000;PROSEGUR
    29/12/2009;8003;013;IQUIQUE                       ;0528;10:19:09;0023573022335;CTA.CTE.         ;GIRO CAJERO AUTOMATICO        ;00000010000;PROSEGUR
    29/12/2009;8003;013;IQUIQUE                       ;0530;10:44:25;0023570097130;CTA.CTE.         ;GIRO CAJERO AUTOMATICO        ;00000009000;PROSEGUR
    29/12/2009;8003;013;IQUIQUE                       ;0532;11:08:52;0001370074239;CTA.CTE.         ;GIRO CAJERO AUTOMATICO        ;00000080000;PROSEGUR
    29/12/2009;8003;013;IQUIQUE                       ;0533;11:11:10;0000000000000;REDBANC          ;GIRO ADQUIRENTE               ;00000010000;PROSEGUR
    29/12/2009;8003;013;IQUIQUE                       ;0534;11:16:26;0000744432990;TCRED.MASTER     ;AVANCE EFECTIVO CAJ.AUTOMATICO;00000010000;PROSEGUR
    29/12/2009;8003;013;IQUIQUE                       ;0535;11:17:03;0052773051038;CTA.CTE.         ;GIRO CAJERO AUTOMATICO        ;00000010000;PROSEGUR
    29/12/2009;8003;013;IQUIQUE                       ;0536;11:18:02;0000000000000;REDBANC          ;GIRO ADQUIRENTE               ;00000010000;PROSEGUR
    29/12/2009;8003;013;IQUIQUE                       ;0538;11:59:10;0001370421346;CTA.CTE.         ;GIRO CAJERO AUTOMATICO        ;00000025000;PROSEGUR
    29/12/2009;8003;013;IQUIQUE                       ;0539;12:00:00;0023973015222;CTA.CTE.         ;GIRO CAJERO AUTOMATICO        ;00000210000;PROSEGUR
    29/12/2009;8003;013;IQUIQUE                       ;0540;12:21:50;0023973018621;CTA.CTE.         ;GIRO CAJERO AUTOMATICO        ;00000002000;PROSEGUR
    29/12/2009;8003;013;IQUIQUE                       ;0543;12:25:28;0001870081193;CTA.CTE.         ;GIRO CAJERO AUTOMATICO        ;00000050000;PROSEGUR
    29/12/2009;8003;013;IQUIQUE                       ;0545;12:34:48;0025170026945;CTA.CTE.         ;GIRO CAJERO AUTOMATICO        ;00000045000;PROSEGUR
    29/12/2009;8003;013;IQUIQUE                       ;0547;13:17:41;0023573013514;CTA.CTE.         ;GIRO CAJERO AUTOMATICO        ;00000005000;PROSEGUR
    29/12/2009;8003;013;IQUIQUE                       ;0548;13:47:17;0052773043205;CTA.CTE.         ;GIRO CAJERO AUTOMATICO        ;00000025000;PROSEGUR
    29/12/2009;8003;013;IQUIQUE                       ;0550;13:51:08;0024573010198;CTA.CTE.         ;GIRO CAJERO AUTOMATICO        ;00000010000;PROSEGUR
    TOTAL ATM:;8003;   ;TXS: 40 DISPENSADO: 1.824.000
    29/12/2009;8011;825;PUERTO MONTT                  ;7893;14:20:23;0063170005670;CTA.CTE.         ;GIRO CAJERO AUTOMATICO        ;00000170000;PROSEGUR
    29/12/2009;8011;825;PUERTO MONTT                  ;7895;14:21:45;0012573006672;CTA.CTE.         ;GIRO CAJERO AUTOMATICO        ;00000136000;PROSEGUR
    29/12/2009;8011;825;PUERTO MONTT                  ;7899;14:47:12;0072960434839;AHO.VISTA        ;GIRO CAJERO AUTOMATICO        ;00000100000;PROSEGUR
    29/12/2009;8011;825;PUERTO MONTT                  ;7904;14:54:20;0082370086105;CTA.CTE.         ;GIRO CAJERO AUTOMATICO        ;00000018000;PROSEGUR
    29/12/2009;8011;825;PUERTO MONTT                  ;7906;15:07:56;0000000000000;REDBANC          ;GIRO ADQ
    Monday, January 04, 2010 4:30 PM
  • Cristian has probado lo que te indicaba arriba??

    Puedes ir depurando  comprobar la longitud en cada momento? para ver si lo hace bien?

    Si no si te parece sube el ´codigo y le damos un vistazo

    Si la respuesta te ha sido util Marcala como Respuesta o Votala.
    Mi Blog: Jtorrecilla
    Monday, January 04, 2010 4:41 PM
    Moderator
  • amigo mio, me dice qie tiene 4, pero es raro porque no le he dado ninguna longitud y lo otro es que quiero que me elimine el nombre de las columnas en el archivo .txt y que cuando llegue a la linea donde dice total tambien la elimine y siga con la linea siguiente y asi susesibamente.

    ahora voy a subir el codigo para que lo veas.

    ya se llama transaciones_horarias_remotas

    http://cid-c0524eb0809d6b61.skydrive.live.com/browse.aspx/.Public?uc=1

    saludos ojala me puedas ayudar.
    Monday, January 04, 2010 4:52 PM
  • Claro ese es el problema las filas de tu fichero no tienen el mismo numero de campos, prueba con algo asi:

    private void b_cargar_Click(object sender, EventArgs e)
            {
                StreamReader objReader = new StreamReader(tx_examinar.Text); 
                List<string> arrText = new List<string>();
                string strLinea = ""; 
                
                while (strLinea != null)
                    {
                        strLinea = objReader.ReadLine();
                        if (strLinea != null)
                        arrText.Add(strLinea);
                    }
                    objReader.Close();
                    objReader.Dispose();

                foreach(string linea in arrText)
                    {
                        string[] datos = linea.Split(';');
       if (datos.Length>4)
         dgv.Rows.Add(datos[0], datos[1], datos[2], datos[3], datos[4], datos[5], datos[6], datos[7], datos[8], datos[9], datos[10]);
                    }
            }

    con la correcion del 4 por el 0, te va a coger aquellos registros que tengan mas de 4 campos, deberias verificar la definicion de tu proceso, quizas necesitas mas validaciones.

    Si la respuesta te ha sido util Marcala como Respuesta o Votala.
    Mi Blog: Jtorrecilla
    • Marked as answer by Cristian Pino Monday, January 04, 2010 6:13 PM
    Monday, January 04, 2010 5:13 PM
    Moderator
  • hola

    probe tu codigo y me ha funciona perfecto
    no obtengo ningun error de indices

    prueba de usar un archivo de texto mas corto patra testear la aplicacion

    FECHA     ;ATM ;SUC;NOMBRE SUCURSAL               ;SEC ;HORA    ;CUENTA       ;TIPO DE CUENTA   ;GLOSA TRANSACCION             ;MONTO      ;ETV
    29/12/2009;8003;013;IQUIQUE                       ;0484;14:01:42;0001200016218;CTA.CTE.         ;GIRO CAJERO AUTOMATICO        ;00000200000;PROSEGUR
    29/12/2009;8003;013;IQUIQUE                       ;0485;14:26:32;0083373000593;CTA.CTE.         ;GIRO CAJERO AUTOMATICO        ;00000098000;PROSEGUR
    29/12/2009;8003;013;IQUIQUE                       ;0486;14:42:07;0000000000000;REDBANC          ;GIRO ADQUIRENTE               ;00000020000;PROSEGUR
    29/12/2009;8003;013;IQUIQUE                       ;0488;15:14:25;0002573008467;CTA.CTE.         ;GIRO CAJERO AUTOMATICO        ;00000013000;PROSEGUR
    29/12/2009;8003;013;IQUIQUE                       ;0490;15:40:06;0000000000000;REDBANC          ;GIRO ADQUIRENTE               ;00000040000;PROSEGUR


    yo lo hice con estos datos e un archivo de tet de prueba y funciono de maravilla


    saludos
    Leandro Tuttini

    Blog
    Buenos Aires
    Argentina
    Monday, January 04, 2010 5:20 PM
  • Leandro el problema viene en que el fichero que ha puesto arriba tiene esta linea en mitad del fichero: TOTAL ATM:;8003;   ;TXS: 40 DISPENSADO: 1.824.000

    son 4 campos por lo que falla...


    Si la respuesta te ha sido util Marcala como Respuesta o Votala.
    Mi Blog: Jtorrecilla
    Monday, January 04, 2010 5:26 PM
    Moderator
  • tiene razon

    es un problema con los datos de esa linea en particular, no habia analizado los datos pero esa lineas al ser mas corta genera menos indices en el array por lo tanto habria que pasarla de largo y no procesarla


    saludos


    Leandro Tuttini

    Blog
    Buenos Aires
    Argentina
    Monday, January 04, 2010 5:34 PM
  • eso, eso, eso, hasta que me entendieron jejej milagroooo eso es lo que quiero que esa linea se borre y respondiendo a la pregunta de Leandro no puedo ocupar otro archivo porque esta va hacer una carga diaria de estos archivos entonces tienen que pescar estos datos y cargarlos directos a la base de datos.

    pero esa es la idea, cargar los datos en el datagridview QUITANDO LOS NOMBRES DE LOS CAMPOS QUE ESTAN AL PRINCIPIO DE LAS LINAS Y BORRANDO LA LIA ESA QUE SALE UN TOTAL, ESA LINE A SE REPITE VARIAS VECES EN EL ARCHIVO PORQUE QUIERO HACER QUE CUANDO ENCUENTRE LA ESA LINEA LA BORRE Y SIGA CARGANDO LOS SIGUIENTES DATOS NORMALMENTE.


    OJALA ME PUEDAN AYUDAR AMIGOS SE PASARON

    DE ANTE MANO MUCHAS GRACIAS.
    Monday, January 04, 2010 6:07 PM
  • BIEN JTORRECILLA ME SALBASTE ESO ERA AHORA ME RESCATA TODOS LOS CAMPOS, PERO ME ESTA DEJANDO EL TITULO DE CADA CAMPO COMO LO SACO AL IGUAL QUE LA LINEA TOTAL ???

    Y DESPUES DE ESO COMO LO GUADARIA EN LA BASE DE DATOS ????


    SALUDOS.
    Monday, January 04, 2010 6:14 PM
  • hola


    para evitar es linea qeu genera el problema podrias agregar validaciones
    por ejemplo


    foreach(string linea in arrText)
    {
        string[] datos = linea.Split(';');

        if(datos.Length < 11)
           continue;

        dgv.Rows.Add(datos[0], datos[1], datos[2], datos[3], datos[4], datos[5], datos[6], datos[7], datos[8], datos[9], datos[10]);
    }


    con ese if descartas las lunea que generen menos de 11 items en el array como esa es ams corta no sera procesada

    para evitar la primer linea podrias convertir al tipo de dato al menos el primer registro,si es del tipo fecha entocnes pasa sino no se procesa


    foreach(string linea in arrText)
    {
        string[] datos = linea.Split(';');

        if(datos.Length < 11)
           continue;


        DateTime fecha;
        if(!DateTime.TryParse(datos[0], out fecha))
          continue;


        dgv.Rows.Add(datos[0], datos[1], datos[2], datos[3], datos[4], datos[5], datos[6], datos[7], datos[8], datos[9], datos[10]);

    }

    como el encabezado no tieen una fecha este no pasara por a conversion de tipo, el resto si

    saludos
    Leandro Tuttini

    Blog
    Buenos Aires
    Argentina
    • Marked as answer by Cristian Pino Monday, January 04, 2010 7:06 PM
    Monday, January 04, 2010 6:19 PM
  • Que wena leandro me funciono. gracias

    ahora los quiero agregar en la base de datos que tengo por medio de un procedimiento de almacenado como lo hago ???

    de ante mano muchas gracias te has pasado.
    Monday, January 04, 2010 7:27 PM
  • pues vamos a ver, para hacerlo, creo que estabas usando OleDBCommand verdad?:

    foreach(string linea in arrText)
    {
        string[] datos = linea.Split(';');

        if(datos.Length < 11)
           continue;


        DateTime fecha;
        if(!DateTime.TryParse(datos[0], out fecha))
          continue;


        dgv.Rows.Add(datos[0], datos[1], datos[2], datos[3], datos[4], datos[5], datos[6], datos[7], datos[8], datos[9], datos[10]);
        OledbCommand cmd=new OleDbCommand("elnombredetuprocedimiento");
    cmd.CommandType=CommandType.StoredProcedure;
    cmd.Parameters.AddWithValue("tuparametro1",datos[0]);
    cmd.Parameters.AddWithValue("tuparametro2",datos[1]);
    cmd.Parameters.AddWithValue("tuparametro3",datos[2]);
    cmd.Parameters.AddWithValue("tuparametro4",datos[3]);
    cmd.Parameters.AddWithValue("tuparametro5",datos[4]);
    cmd.Parameters.AddWithValue("tuparametro6",datos[5]);
    cmd.Parameters.AddWithValue("tuparametro7",datos[6]);
    cmd.Parameters.AddWithValue("tuparametro8",datos[7]);
    cmd.Parameters.AddWithValue("tuparametro9",datos[8]);
    cmd.Parameters.AddWithValue("tuparametro10",datos[9]);
    cmd.Parameters.AddWithValue("tuparametro11",datos[10]);
    cmd.Connection=tuConexion;
    cmd.ExecuteNonQuery();

    }

    Te estoy hablando de memoria puede que haya alguna Mayuscula que se me haya pasado ya sabes que c# es Case Sensitive

    Si la respuesta te ha sido util Marcala como Respuesta o Votala.
    Mi Blog: Jtorrecilla
    • Marked as answer by Cristian Pino Tuesday, January 05, 2010 4:56 PM
    Monday, January 04, 2010 8:09 PM
    Moderator
  • Mira compañero este es el codigo que ocupe una vez anteriror cuando tu mismo me ayudaste.

    private void b_guardar_Click(object sender, EventArgs e)
            {
                int i = 0;
                foreach (DataGridViewRow row in dgv.Rows)
                {

                    ++i;
                    using (SqlCommand Comando = new SqlCommand("inserta_boton_de_pago"))
                    {
                        Comando.CommandType = CommandType.StoredProcedure;

                        Comando.Parameters.AddWithValue("@Tipo_Reg", row.Cells[0].Value.ToString());
                        Comando.Parameters.AddWithValue("@SubTipo", row.Cells[1].Value.ToString());
                        Comando.Parameters.AddWithValue("@Rut_Compra", row.Cells[2].Value.ToString());
                        Comando.Parameters.AddWithValue("@DV_Compra", row.Cells[3].Value.ToString());
                        Comando.Parameters.AddWithValue("@Identificador", row.Cells[4].Value.ToString());
                        Comando.Parameters.AddWithValue("@Glosa_Multipago", row.Cells[5].Value.ToString());
                        Comando.Parameters.AddWithValue("@Fecha_Venc", row.Cells[6].Value.ToString());
                        Comando.Parameters.AddWithValue("@Estado_Pag", row.Cells[7].Value.ToString());
                        Comando.Parameters.AddWithValue("@TX_Banco", row.Cells[8].Value.ToString());
                        Comando.Parameters.AddWithValue("@Fec_Ope", row.Cells[9].Value.ToString());
                        Comando.Parameters.AddWithValue("@Hor_Ope", row.Cells[10].Value.ToString());
                        Comando.Parameters.AddWithValue("@Fec_Contable", row.Cells[11].Value.ToString());
                        Comando.Parameters.AddWithValue("@Rut_Cuenta", row.Cells[12].Value.ToString());
                        Comando.Parameters.AddWithValue("@Dv_Cuenta", row.Cells[13].Value.ToString());
                        Comando.Parameters.AddWithValue("@Suc", row.Cells[14].Value.ToString());
                        Comando.Parameters.AddWithValue("@Tipo_Conv", row.Cells[15].Value.ToString());
                        Comando.Parameters.AddWithValue("@Numero_Conv", row.Cells[16].Value.ToString());
                        Comando.Parameters.AddWithValue("@Glosa_Pago", row.Cells[17].Value.ToString());


                        if(string.IsNullOrEmpty(row.Cells[18].Value.ToString()))
                            Comando.Parameters.AddWithValue("@Cod_Pago", DBNull.Value);
                        else
                            Comando.Parameters.AddWithValue("@Cod_Pago", row.Cells[18].Value.ToString());
                       

                        Comando.Parameters.AddWithValue("@Monto_Pago", row.Cells[19].Value.ToString());


                        if (string.IsNullOrEmpty(row.Cells[20].Value.ToString()))
                            Comando.Parameters.AddWithValue("@Res_Batch", DBNull.Value);
                        else
                            Comando.Parameters.AddWithValue("@Res_Batch", row.Cells[20].Value.ToString());


                        Comando.Parameters.AddWithValue("@Alerta", row.Cells[21].Value.ToString());


                        if (string.IsNullOrEmpty(row.Cells[22].Value.ToString()))
                            Comando.Parameters.AddWithValue("@Filler", DBNull.Value);
                        else
                            Comando.Parameters.AddWithValue("@Filler", row.Cells[22].Value.ToString());
                       

                        Procedimiento.Ejecuta_Proc(Comando);
                        lb_cantidad.Text = i.ToString();
                        lb_cantidad.Visible = true;
                        lb_total.Visible = true;
                    }
                }
                MessageBox.Show("Datos Ingresados Correctamente: " + i.ToString() + " De " + dgv.Rows.Count.ToString());
                dgv.Rows.Clear();
                lb_cantidad.ResetText();
                tx_buscar.Clear();
                lb_ruta.ResetText();
                lb_total.Visible = false;
            }

    la diferencia es que los datos no estan separados por comas nada mas, osea rescatar los datos del datagridview tal cual, pero con un procedimiento de almacenado paresido a este que esta aki en este ejemplo.

    saludos
    Monday, January 04, 2010 8:58 PM
  • Aqui tienes, solo adecualo, es decir, ponle el nombre del procedimiento y de los parametros segun sean necesarios,
    private void b_cargar_Click(object sender, EventArgs e)
            {
                StreamReader objReader = new StreamReader(tx_examinar.Text); 
                List<string> arrText = new List<string>();
                string strLinea = ""; 
                
                while (strLinea != null)
                    {
                        strLinea = objReader.ReadLine();
                        if (strLinea != null)
                        arrText.Add(strLinea);
                    }
                    objReader.Close();
                    objReader.Dispose();

                foreach(string linea in arrText)
                    {
                        string[] datos = linea.Split(';');
       if(datos.Length < 11)
           continue;


        DateTime fecha;
        if(!DateTime.TryParse(datos[0], out fecha))
          continue;


        dgv.Rows.Add(datos[0], datos[1], datos[2], datos[3], datos[4], datos[5], datos[6], datos[7], datos[8], datos[9], datos[10]);
       using (SqlCommand Comando = new SqlCommand("inserta_boton_de_pago"))
                    {
                        Comando.CommandType = CommandType.StoredProcedure;

                        Comando.Parameters.AddWithValue("@Tipo_Reg", datos[0]);
                        Comando.Parameters.AddWithValue("@SubTipo",  datos[1]);
                        Comando.Parameters.AddWithValue("@Rut_Compra", datos[2]);
                        Comando.Parameters.AddWithValue("@DV_Compra",  datos[3]);
                        Comando.Parameters.AddWithValue("@Identificador",  datos[4]);
                        Comando.Parameters.AddWithValue("@Glosa_Multipago",  datos[5]);
                        Comando.Parameters.AddWithValue("@Fecha_Venc",  datos[6]);
                        Comando.Parameters.AddWithValue("@Estado_Pag",  datos[7]);
                        Comando.Parameters.AddWithValue("@TX_Banco",  datos[8]));
                        Comando.Parameters.AddWithValue("@Fec_Ope",  datos[9]);
                        Comando.Parameters.AddWithValue("@Hor_Ope",  datos[10]);
       Procedimiento.Ejecuta_Proc(Comando);
    }
                    }
            }



    Si la respuesta te ha sido util Marcala como Respuesta o Votala.
    Mi Blog: Jtorrecilla
    • Marked as answer by Cristian Pino Tuesday, January 05, 2010 4:56 PM
    Monday, January 04, 2010 9:06 PM
    Moderator
  • hola

    solo un comentario por las dudas

    note que cuando haces el Split() de cada dato en el array lo estas dejando tal como esta en un string, para cargar en la grilla no hay drama porque es solo visualziacion pero al ingresarlos en una db y mas si se hace uso de AddWithValue() para definr lo parametros
    es que sino defines al tipo seran para todo del tipo string, lo cual imagino no es del todo correcto

    con lo cual por ejemplo para la linea

    Comando.Parameters.AddWithValue("@Tipo_Reg", datos[0]);

    deberia ser

    Comando.Parameters.AddWithValue("@Tipo_Reg", Convert.ToInt32(datos[0]));

    si este campor en la db es del tipo numerico


    ademas note que cuando haces el split no eliminas los espacios en blanco con el Trim(), ojo porque te agregara esos espacios en la tabla

    por ahi vas a necesitar tomar el ejemplo de jtorrecilla y realziar algunas validaciones y conversiones de tipos
    teniendo en cuenta justamente el tipo que has definido en la db

    no se si sabias pero el AddWithValue() no hace magia para definir el tipo del parametro, este toma la defincion del tipo en base justamente al tipo de la variable que se usa en el parametro
    si usas

    Comando.Parameters.AddWithValue("@Tipo_Reg", Convert.ToInt32(datos[0]));

    el parametro lo define como int
    pero si usas

    Comando.Parameters.AddWithValue("@Tipo_Reg", datos[0]);

    en tu caso sera un varchar o similar, pero todos seran de la misma forma, esto tendras que validarlo


    saludos
    Leandro Tuttini

    Blog
    Buenos Aires
    Argentina
    • Marked as answer by Cristian Pino Tuesday, January 05, 2010 4:56 PM
    Monday, January 04, 2010 9:25 PM
  • Cierto Leandro, solamente le puse la base del ejemplo para que con el ejemplo del otro dia vaya siendo capaz de hacerlo....
    Si la respuesta te ha sido util Marcala como Respuesta o Votala.
    Mi Blog: Jtorrecilla
    • Marked as answer by Cristian Pino Tuesday, January 05, 2010 4:56 PM
    Monday, January 04, 2010 9:36 PM
    Moderator
  • hola

    si lo vi y esta perfecto el ejemplo, es por eso que yo tampoco adapter del todo el codigo, solo acote donde podria haber un problema con los tipos.
    la idea es que Cristian lo tenga en cuenta cuando lo implemente

    quise comentarle la logica que aplica el AddWithValue() para qeu se pa que no es magico en la resolucion de tipos de datos hay que definirle el tipo en la variable

    saludos
    Leandro Tuttini

    Blog
    Buenos Aires
    Argentina
    • Marked as answer by Cristian Pino Tuesday, January 05, 2010 4:56 PM
    Monday, January 04, 2010 9:54 PM
  • Amigos muchas gracias a los 2 se pasaron, de verdad que les estoy muy agradecido por todo lo que ayudan a la gente del foro, les tengo que reconocer que se aprende demaciado con gente como uds enseñando en los foros.

    miagos miren cambiando de tema tengo este codigo para examinar un archivo(osea habrir un archivo), pero quiero dejar el nombre del archivo dentro de la caja de texto como se hace ?? hasta el momento en la caja se me guarda la ruta del archivo.


    Muchas gracias de ante mano.
    Tuesday, January 05, 2010 4:56 PM
  • Hola ME has matado con "habrir" ... pero te indico como hacer lo del archivo.

    digamos que tienes textbox1:

    textbox1.Text=textBox1.Text.Substring(textBox1.Text.LastIndexOf("\\")+1);

    Si la respuesta te ha sido util Marcala como Respuesta o Votala.
    Mi Blog: Jtorrecilla
    Tuesday, January 05, 2010 5:23 PM
    Moderator
  • jeejje si es que se me colo una "H" jejej pero buenos son cosas del Jurgol jejeje

    amigo te cuento que no me funiono eso que ne pasaste.

    saludos
    • Edited by Cristian Pino Tuesday, January 05, 2010 5:51 PM actualizacion
    Tuesday, January 05, 2010 5:47 PM
  • Porque no te funciono te dio algun error? pon el codigo que has escrito para revisarlo porfavor
    Si la respuesta te ha sido util Marcala como Respuesta o Votala.
    Mi Blog: Jtorrecilla
    Tuesday, January 05, 2010 7:06 PM
    Moderator
  • private void b_examinar_Click(object sender, EventArgs e)
            {
                Abrir.Filter = "Textos|*.txt|" + "Todos los archivos|*.*";
                //Pedeefes|*.pdf|" +
                //"Documentos|*.doc|" +
                //"Imagenes|*.bmp;*.jpg;*.gif|" +

                Abrir.InitialDirectory = "\\servidor o no ?? nose ";
                Abrir.Title = "Examinar Archivo";
                if (Abrir.ShowDialog() == DialogResult.OK)
                {
                    //tx_examinar.Text = Abrir.FileName;
                    tx_examinar.Text = tx_examinar.Text.Substring(tx_examinar.Text.LastIndexOf("\\") + 1);
                }
                b_salir.Visible = true;
                ControlBox = false;
            }

    mi otro problema es que como tengo que poner la ruta dentro de abrir.InitialDirectory de un directorio de un servidor ????
    • Edited by Cristian Pino Tuesday, January 05, 2010 9:22 PM Modificacion
    Tuesday, January 05, 2010 9:21 PM
  • Jeje, vale, te cuento el error de porque no te funciona para corregirlo:


    private void b_examinar_Click(object sender, EventArgs e)
            {
                Abrir.Filter = "Textos|*.txt|" + "Todos los archivos|*.*";
                //Pedeefes|*.pdf|" +
                //"Documentos|*.doc|" +
                //"Imagenes|*.bmp;*.jpg;*.gif|" +

                Abrir.InitialDirectory = "\\nbServidor"; //Tambien es valido la dirección ip del servidor...
                Abrir.Title = "Examinar Archivo";
                if (Abrir.ShowDialog() == DialogResult.OK)
                        tx_examinar.Text =   Abrir.FileName.Substring(Abrir.FileName.LastIndexOf("\\") + 1);
                b_salir.Visible = true;
                ControlBox = false;
            }

    Si la respuesta te ha sido util Marcala como Respuesta o Votala.
    Mi Blog: Jtorrecilla
    Tuesday, January 05, 2010 9:30 PM
    Moderator
  • hola

    Opening a remote machine folder structure in c# file browse dialog

    seria bueno si a la propiedad InitialDirectory  le indicas directametne una carpeta compartida en el remote server
    como lo explicia en el link

    como bien comenta jtorrecilla peudes tambien estar teniendo problemas en els ervicio de DNS, o sea es el servicio de resolucion de nombre, pero esto se soluciona si pones la ip de la pc remota

    sino prueba desde el Windows explorer acceder a este ruta en el servidor remoto \\remotemachine\sharefolder
    si en el Windows Explroer lo abres correctamente esta perfecto

    ahora tambien pdorias ser temas de autenticacion valida que no requiere credenciales para acceder a esta carpeta

    saludos
    Leandro Tuttini

    Blog
    Buenos Aires
    Argentina
    • Marked as answer by Cristian Pino Wednesday, January 06, 2010 1:48 PM
    Wednesday, January 06, 2010 12:46 AM
  • Gracias leandro eso me sirbio.

    se te agradece toda la buena disposicion y buena onda.

    muchas gracias.
    Wednesday, January 06, 2010 1:48 PM
  • Holaaa amigos, les tengo una pregunta mas. Como puedo implementar un progressBar1 en mi codigo ??? que cuando este cargando al datagridview me aparesca al medio del datagridview y que despues al momento de gusrdar a la base de datos tambien me aparesca.

    como se implementa esto ???

    de ante mano muchas gracias


    using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Data;
    using System.Data.SqlClient;
    using System.Data.OleDb;
    using System.Drawing;
    using System.Linq;
    using System.Text;
    using System.Windows.Forms;
    using System.IO;
    using Diario_Serv_Tec;
    using System.Collections;

    namespace transacciones_horarias_remotas
    {
        public partial class Transacciones : Form
        {
            public Transacciones()
            {
                InitializeComponent();
                lb_cargados.Visible = false;
            }

            private void b_cargar_Click(object sender, EventArgs e)
            {
                StreamReader objReader = new StreamReader(Abrir.FileName);
                List<string> arrText = new List<string>();
                string strLinea = "";

                while (strLinea != null)
                {

                    strLinea = objReader.ReadLine();
                    if (strLinea != null)
                        arrText.Add(strLinea);

                }
                objReader.Close();
                objReader.Dispose();

                foreach (string linea in arrText)
                {

                    string[] datos = linea.Trim().Split(';');

                    if (datos.Length < 11)
                        continue;


                    DateTime fecha;
                    if (!DateTime.TryParse(datos[0], out fecha))
                        continue;

                    dgv.Rows.Add(datos[0], datos[1], datos[2], datos[3], datos[4], datos[5], datos[6], datos[7], datos[8], datos[9], datos[10]);
                    lb_cargados.Text = dgv.Rows.Count.ToString();
                    lb_cargados.Visible = true;
                }
                MessageBox.Show("Datos Cargados Correctamente");
            }

            DataBase_Proc Procedimiento = new DataBase_Proc("", "");
            OpenFileDialog Abrir = new OpenFileDialog();

            private void b_examinar_Click(object sender, EventArgs e)
            {
                Abrir.Filter = "Textos|*.txt|" + "Todos los archivos|*.*";
                //Pedeefes|*.pdf|" +
                //"Documentos|*.doc|" +
                //"Imagenes|*.bmp;*.jpg;*.gif|" +

                Abrir.InitialDirectory = ";
                Abrir.Title = "Examinar Archivo";
                if (Abrir.ShowDialog() == DialogResult.OK)
                {
                    //tx_examinar.Text = Abrir.FileName;
                    tx_examinar.Text = Abrir.FileName.Substring(Abrir.FileName.LastIndexOf("\\") + 1);
                }
                b_salir.Visible = true;
                ControlBox = false;
            }

            private void b_salir_Click(object sender, EventArgs e)
            {
                DialogResult rs2 = MessageBox.Show("Realmente desea Abandonar la Aplicacion?", "Mensaje de Salida", MessageBoxButtons.YesNo, MessageBoxIcon.Warning);
                if (rs2 == DialogResult.Yes)
                {
                    this.Close();
                }
            }

            private void b_guardar_Click(object sender, EventArgs e)
            {
                int i = 0;
                StreamReader objReader = new StreamReader(tx_examinar.Text);
                List<string> arrText = new List<string>();
                string strLinea = "";
               
                while (strLinea != null)
                    {
                        strLinea = objReader.ReadLine();
                        if (strLinea != null)
                        arrText.Add(strLinea);
                    }
                    objReader.Close();
                    objReader.Dispose();

                foreach(string linea in arrText)
                    {
                    string[] datos = linea.Split(';');
                    if(datos.Length < 11)
                    continue;

                    DateTime fecha;
                    if(!DateTime.TryParse(datos[0], out fecha))
                    continue;


                    dgv.Rows.Add(datos[0], datos[1], datos[2], datos[3], datos[4], datos[5], datos[6], datos[7], datos[8], datos[9], datos[10]);
                    ++i;
       
                    using (SqlCommand Comando = new SqlCommand("inserta_transacciones_horarias"))
                             {
                        Comando.CommandType = CommandType.StoredProcedure;

                        Comando.Parameters.AddWithValue("@fecha", datos[0]);
                        Comando.Parameters.AddWithValue("@atm", Convert.ToInt32(datos[1]));
                        Comando.Parameters.AddWithValue("@suc", Convert.ToInt32(datos[2]));
                        Comando.Parameters.AddWithValue("@nombre_sucursal",  datos[3]);
                        Comando.Parameters.AddWithValue("@sec", Convert.ToInt32(datos[4]));
                        Comando.Parameters.AddWithValue("@hora",  datos[5]);
                        Comando.Parameters.AddWithValue("@cuenta",  datos[6]);
                        Comando.Parameters.AddWithValue("@tipo_cuenta",  datos[7]);
                        Comando.Parameters.AddWithValue("@glosa_transaccion",  datos[8]);
                        Comando.Parameters.AddWithValue("@monto",  datos[9]);
                        Comando.Parameters.AddWithValue("@etv",  datos[10]);
                        Procedimiento.Ejecuta_Proc(Comando);
                        lb_cargados.Text = i.ToString();
                        lb_cargados.Visible = true;
                    }
               
                }
                MessageBox.Show("Datos Guardados en la Base de Datos Correctamente: " + i.ToString());
                dgv.Rows.Clear();
                lb_cargados.ResetText();
                tx_examinar.Clear();
                lb_cargados.Visible = false;

        }
        }
    }
    Wednesday, January 06, 2010 3:02 PM
  • En primer lugar tendrás que agregar el control a tu formulario, y establecer las propiedades para que aparezca centrado.

    A continuación,

    Tendrás que tener en cuenta el nº de registros de la base de datos y hacer algo similar a esto:

    tuProgresBar.Maximum= arrText.Lenght;
    dentro del bucle donde llenas el array :

    tuProgresBar.Value + = 1; // Te sirve para ir moviendo el valor de la barra.
    Application.DoEvents();//Está linea permite que se refresque la pantalla...



    Si la respuesta te ha sido util Marcala como Respuesta o Votala.
    Mi Blog: Jtorrecilla
    Wednesday, January 06, 2010 3:16 PM
    Moderator
  • Mira lo pongo asi y me lanza un error.

    private void b_cargar_Click(object sender, EventArgs e)
            {
                StreamReader objReader = new StreamReader(Abrir.FileName);
                List<string> arrText = new List<string>();
                string strLinea = "";

                while (strLinea != null)
                {

                    strLinea = objReader.ReadLine();
                    if (strLinea != null)
                        arrText.Add(strLinea);

                }
                objReader.Close();
                objReader.Dispose();

                foreach (string linea in arrText)
                {
                    progressBar1.Maximum = arrText.Lenght ;   <------- Aqio esta el error
                    progressBar1.Value = 1; // Te sirve para ir moviendo el valor de la barra.
                    Application.DoEvents(); //Está linea permite que se refresque la pantalla...
                   
                    string[] datos = linea.Trim().Split(';');

                    if (datos.Length < 11)
                        continue;
                   
                    DateTime fecha;
                    if (!DateTime.TryParse(datos[0], out fecha))
                        continue;

                    dgv.Rows.Add(datos[0], datos[1], datos[2], datos[3], datos[4], datos[5], datos[6], datos[7], datos[8], datos[9], datos[10]);
                    lb_cargados.Text = dgv.Rows.Count.ToString();


                    lb_cargados.Visible = true;
                }
                MessageBox.Show("Datos Cargados Correctamente");
            }

    me dijiste que fuera dentro de donde rescato los datos en el arreglo y bueno es hay pero no me funiona. alomejor lo estoy implementado mal, ayudame por favor.

    Gracias.
    Wednesday, January 06, 2010 3:45 PM
  • hola


    claro es que la propiedad Maximum  debe ser definida fuera del ciclo



    progressBar1.Maximum = arrText.Lenght;

    foreach (string linea in arrText)
                {
                   
                    progressBar1.Value ++;
                    Application.DoEvents();
                   
                    string[] datos = linea.Trim().Split(';');

                    if (datos.Length < 11)
                        continue;
                   
                    DateTime fecha;
                    if (!DateTime.TryParse(datos[0], out fecha))
                        continue;

                    dgv.Rows.Add(datos[0], datos[1], datos[2], datos[3], datos[4], datos[5], datos[6], datos[7], datos[8], datos[9], datos[10]);
                    lb_cargados.Text = dgv.Rows.Count.ToString();


                    lb_cargados.Visible = true;
                }
                MessageBox.Show("Datos Cargados Correctamente");
            }

    esta solo se establece una vez para declarar el maximo numero, asi al ir incrementando peuda calcular el progress el mismo control

    saludos
    Leandro Tuttini

    Blog
    Buenos Aires
    Argentina
    Wednesday, January 06, 2010 3:57 PM
  • Amigo no me resulta me sigue tirando error en la palabra Lenght y eso que lo puse fuera como me dijiste. te recuero que es C# por si es que estabas confundido.

    Saludos.
    Wednesday, January 06, 2010 4:04 PM
  • Perdon me equivoque al teclear es Length no Lenght.
    Por cierto, esto es un error: progressBar1.Value = 1;

    deberia de ser progressBar1.Value += 1;
    o en su defecto:
    progressBar1.Value ++;

    Sino siempre va a tener el mismo valor!

    Si la respuesta te ha sido util Marcala como Respuesta o Votala.
    Mi Blog: Jtorrecilla
    Wednesday, January 06, 2010 4:07 PM
    Moderator
  • hola

    si tienes razon no me fije en esos detalles solo vi que esta mas posicionado el uso de la propiedad, que estaba dentro del loop

    ahi edite el post anterior agregando los cambios

    saludos
    Leandro Tuttini

    Blog
    Buenos Aires
    Argentina
    Wednesday, January 06, 2010 4:13 PM
  • Perdon me equivoque al teclear es Length no Lenght.
    Por cierto, esto es un error: progressBar1.Value = 1;

    deberia de ser progressBar1.Value += 1;
    o en su defecto:
    progressBar1.Value ++;

    Sino siempre va a tener el mismo valor!

    Si la respuesta te ha sido util Marcala como Respuesta o Votala.
    Mi Blog: Jtorrecilla


    Amigos les cuento que me sigue mandando el mismo error en la linea del Length, ya nose que hacer si hago lo que uds me dicen, pero aun asi no entindo porque me sigue marcando esa palabra.

    Saludos.
    Wednesday, January 06, 2010 7:11 PM
  • Por favot postea tu código completo o suibelo al skydrive para revisarlo porque a simple vista no veo otra cosa.
    Si la respuesta te ha sido util Marcala como Respuesta o Votala.
    Mi Blog: Jtorrecilla
    Wednesday, January 06, 2010 8:04 PM
    Moderator
  • Por favot postea tu código completo o suibelo al skydrive para revisarlo porque a simple vista no veo otra cosa.
    Si la respuesta te ha sido util Marcala como Respuesta o Votala.
    Mi Blog: Jtorrecilla

     Aqui les va

    http://cid-c0524eb0809d6b61.skydrive.live.com/browse.aspx/.Public?uc=1

    Saludos.
    Wednesday, January 06, 2010 8:25 PM
  • Vale, perdon me parecia que tratabas con un array pero es un List, tienes que hacerlo asi:

    progressBar1.Maximum = arrText.Count; 

    foreach (string linea in arrText)
                {
                    
                    progressBar1.Value ++; 
                    Application.DoEvents(); 
                    
                    string[] datos = linea.Trim().Split(';');

                    if (datos.Length < 11)
                        continue;
                    
                    DateTime fecha;
                    if (!DateTime.TryParse(datos[0], out fecha))
                        continue;

                    dgv.Rows.Add(datos[0], datos[1], datos[2], datos[3], datos[4], datos[5], datos[6], datos[7], datos[8], datos[9], datos[10]);
                    lb_cargados.Text = dgv.Rows.Count.ToString();


                    lb_cargados.Visible = true;
                }
                MessageBox.Show("Datos Cargados Correctamente");
            }

    Si la respuesta te ha sido util Marcala como Respuesta o Votala.
    Mi Blog: Jtorrecilla
    Wednesday, January 06, 2010 8:29 PM
    Moderator
  • Bien compañeroooooooooooo ahy si que sip me resulto exelente era lo que me faltaba para darle el toque magico a esto jeje.

    amigo una pregunta como puedo volver a dejar en blanco el progressBar1 despues que alla cargado lanza un mensaje, al momento de aceptar el mensaje que se ponga en blanco para despues cuando guarde los datos en la base de datos empiese como de cero me entiendes ??


    bueno eso no mas seria.


    muchas gracias te has pasado mucho.

    saludos.
    Wednesday, January 06, 2010 8:59 PM
  • Aqui tienes:


    foreach (string linea in arrText)
                {
                    
                    progressBar1.Value ++; 
                    Application.DoEvents(); 
                    
                    string[] datos = linea.Trim().Split(';');

                    if (datos.Length < 11)
                        continue;
                    
                    DateTime fecha;
                    if (!DateTime.TryParse(datos[0], out fecha))
                        continue;

                    dgv.Rows.Add(datos[0], datos[1], datos[2], datos[3], datos[4], datos[5], datos[6], datos[7], datos[8], datos[9], datos[10]);
                    lb_cargados.Text = dgv.Rows.Count.ToString();


                    lb_cargados.Visible = true;
                }
                progressBar1.Value=0; 
    MessageBox.Show("Datos Cargados Correctamente");
            }


    Si la respuesta te ha sido util Marcala como Respuesta o Votala.
    Mi Blog: Jtorrecilla
    Wednesday, January 06, 2010 9:02 PM
    Moderator
  • jejeje una ves que me puse a investigar me salio solo pero igual muchas graciaasss.

    ahora lo que estoy tratando de hacer pero no me a salido es poner al lado del progressBar1 un Label que me diga el porcentaje de cuanto se va cargando, nose si me puedes ayudar con eso porque seria muy interesante.


    Saludos
    Wednesday, January 06, 2010 10:22 PM
  • agrega una label a tu formulario,

    y establece esto :

    label1.Location.X= progressBar1.Location.X + progressBar1.Width/2;
    label1.Location.y= progressBar1.Location.y;
    foreach (string linea in arrText)
                {
                   if (progressBar1.Value==0)
    {
    label1.Text="0 %";
    }
    else
    {
    label1.Text = (String)(progressBar1.Value/progressBar1.Maximum * 100) + " %";
    }
                    progressBar1.Value ++; 
                    Application.DoEvents(); 
                    
                    string[] datos = linea.Trim().Split(';');

                    if (datos.Length < 11)
                        continue;
                    
                    DateTime fecha;
                    if (!DateTime.TryParse(datos[0], out fecha))
                        continue;

                    dgv.Rows.Add(datos[0], datos[1], datos[2], datos[3], datos[4], datos[5], datos[6], datos[7], datos[8], datos[9], datos[10]);
                    lb_cargados.Text = dgv.Rows.Count.ToString();


                    lb_cargados.Visible = true;
                }
                progressBar1.Value=0; 
    MessageBox.Show("Datos Cargados Correctamente");
            }


    Si la respuesta te ha sido util Marcala como Respuesta o Votala.
    Mi Blog: Jtorrecilla
    Wednesday, January 06, 2010 10:28 PM
    Moderator
  • me tira varios errores.



    private void b_cargar_Click(object sender, EventArgs e)
            {
                StreamReader objReader = new StreamReader(Abrir.FileName); //RutaFichero es la ruta de tu fichero la que tienes en la caja de texto...
                string strLinea = "";
                ArrayList arrText = new ArrayList();

                while (strLinea != null)
                {
                    strLinea = objReader.ReadLine();
                    if (strLinea != null)
                        arrText.Add(strLinea);
                }
                objReader.Close();
                objReader.Dispose();

                progressBar1.Maximum = arrText.Count;
                foreach(object linea in arrText)
                {
                   foreach(object linea in arrText)
                {
                    label1.Location .X= progressBar1.Location.X + progressBar1.Width/2;
                    label1.Location.y = progressBar1.Location.y ;
                    foreach (string linea in arrText)
                    {
                        if (progressBar1.Value == 0)
                        {
                            label1.Text = "0 %";
                        }
                        else
                        {
                            label1.Text = (String)(progressBar1.Value / progressBar1.Maximum * 100) + " %";
                        }
                    }
                   
                    progressBar1.Value++; // Te sirve para ir moviendo el valor de la barra.
                    Application.DoEvents(); //Está linea permite que se refresque la pantalla...

                    //El primer numero es la posicion del caracter y el segundo numero es la
                    //Longitud de caracteres que voy a rescatar.
                    string Tipo_Reg = linea.ToString().Substring(1, 1);
                    string SubTipo = linea.ToString().Substring(2, 1);
                    string Rut_Compra = linea.ToString().Substring(4, 8);
                    string DV_Compra = linea.ToString().Substring(12, 1);
                    string Identificador = linea.ToString().Substring(13, 8);
                    string Glosa_Multipago = linea.ToString().Substring(25, 10);
                    string Fecha_Venc = linea.ToString().Substring(55, 8);
                    string Estado_Pag = linea.ToString().Substring(63, 3);
                    string TX_Banco = linea.ToString().Substring(66, 7);
                    string Fec_Ope = linea.ToString().Substring(73, 8);
                    string Hor_Ope = linea.ToString().Substring(81, 6);
                    string Fec_Contable = linea.ToString().Substring(87, 8);
                    string Rut_Cuenta = linea.ToString().Substring(96, 8);
                    string Dv_Cuenta = linea.ToString().Substring(104, 1);
                    string Suc = linea.ToString().Substring(108, 1);
                    string Tipo_Conv = linea.ToString().Substring(109, 2);
                    string Numero_Conv = linea.ToString().Substring(112, 4);
                    string Glosa_Pago = linea.ToString().Substring(116, 10);
                    string Cod_Pago = linea.ToString().Substring(129, 4);
                    string Monto_Pago = linea.ToString().Substring(163, 8);
                    string Res_Batch = linea.ToString().Substring(132, 4);
                    string Alerta = linea.ToString().Substring(174, 1);
                    string Filler = linea.ToString().Substring(137, 4);
                    dgv.Rows.Add(Tipo_Reg, SubTipo, Rut_Compra, DV_Compra, Identificador, Glosa_Multipago, Fecha_Venc, Estado_Pag, TX_Banco, Fec_Ope, Hor_Ope, Fec_Contable, Rut_Cuenta, Dv_Cuenta, Suc, Tipo_Conv, Numero_Conv, Glosa_Pago, Cod_Pago, Monto_Pago, Res_Batch, Alerta, Filler);

                             
                }
                MessageBox.Show("Datos Cargados Correctamente: " + dgv.Rows.Count.ToString());
                progressBar1.Maximum = 0;
            }

    una observacion se puede tener un foreach dentro de otro ??? alomejor eso es el problema o no ??

    bueno tu eres es el experto tu me diras cual es el erro y que es lo que estoy haciendo mal.


    Saludos.
    Wednesday, January 06, 2010 10:39 PM
  • hola

    si el hacer un foreach dentro de otro la verdad puede ser una de las causas, pero yo me inclinaria mas a que estas usando el mismo nombre de variable para definir las lineas en los tres foreach lo cual trae conflicto

    estos tres nombres que marco en negrita no puedes ser los mismos

    progressBar1.Maximum = arrText.Count;
    foreach(object linea in arrText)
    {
    foreach(object linea in arrText)
    {
    label1.Location .X= progressBar1.Location.X + progressBar1.Width/2;
    label1.Location.y = progressBar1.Location.y ;
    foreach (string linea in arrText)
    {
    if (progressBar1.Value == 0)
    {
    label1.Text = "0 %";
    }
    else
    {
    label1.Text = (String)(progressBar1.Value / progressBar1.Maximum * 100) + " %";
    }
    }

    progressBar1.Value++; // Te sirve para ir moviendo el valor de la barra.
    Application.DoEvents(); //Está linea permite que se refresque la pantalla...

    //El primer numero es la posicion del caracter y el segundo numero es la
    //Longitud de caracteres que voy a rescatar.
    string Tipo_Reg = linea.ToString().Substring(1, 1);
    .
    .
    .
    }
    }

    debes ponerles nombre diferentes
    ya que sino indicara que ya ha sido declarada la variable


    - igualmente por ahi podrías explicar porque es que necesitas hacer tres ciclos recorriendo los registros


    saludos

    Leandro Tuttini

    Blog
    Buenos Aires
    Argentina
    Thursday, January 07, 2010 4:06 AM
  • Modifique el lo qu eme dijiste, pero me sigue tirando errores.

    progressBar1.Maximum = arrText.Count;
               
                foreach(object linea in arrText)
                {
                    foreach (string lineas in arrText)
                    {
                        label1.Location .X = progressBar1.Location.X + progressBar1.Width / 2;
                        label1.Location.y = progressBar1.Location.y ;
                        if (progressBar1.Value == 0)
                        {
                            label1.Text = "0 %";
                        }
                        else
                        {
                            label1.Text = (String)(progressBar1.Value / progressBar1.Maximum * 100) + " %";
                        }
                    }
                   
                    progressBar1.Value++;
                    Application.DoEvents();

    Errores:
    1.- No se puede modificar el valor devuelto de 'System.Windows.Forms.Control.Location' porque no es una variable.
    2.- 'System.Drawing.Point.y' no es accesible debido a su nivel de proteccion
    3.- 'System.Drawing.Point.y' no es accesible debido a su nivel de proteccion
    4.- No se puede convertir el tipo 'int' en 'string'
    Thursday, January 07, 2010 12:20 PM
  • hola

    con respecto al punto 4 prueba haciendo

    label1.Text =  string.Format("{0}%", (progressBar1.Value / progressBar1.Maximum) * 100);

    loa otros punto se debe a que no puedes asignar la propiedad Localtion como lo haces

    Control. Location

    debes crear un Point

    veras en el ejemplo del link que hace

    textBox1.Location = New Point(15, 15)
    es asi como debes asignar el location

    podrias suar algo como esto

    int valX = Convert.ToInt32((progressBar1.Location.X + progressBar1.Width) / 2);
    int valY = progressBar1.Location.Y;
    label1.Location = new Point(valX, valY);


    saludos
    Leandro Tuttini

    Blog
    Buenos Aires
    Argentina
    • Marked as answer by Cristian Pino Thursday, January 07, 2010 1:02 PM
    Thursday, January 07, 2010 12:43 PM
  • asi me quedo, me funiona pero se queda en cero todo el rato.


    public Point Location { get; set; }

            private void b_cargar_Click(object sender, EventArgs e)
            {
                StreamReader objReader = new StreamReader(Abrir.FileName); //RutaFichero es la ruta de tu fichero la que tienes en la caja de texto...
                string strLinea = "";
                ArrayList arrText = new ArrayList();

                while (strLinea != null)
                {
                    strLinea = objReader.ReadLine();
                    if (strLinea != null)
                        arrText.Add(strLinea);
                }
                objReader.Close();
                objReader.Dispose();

               

                progressBar1.Maximum = arrText.Count;
               
                foreach(object linea in arrText)
                {
                    foreach (string lineas in arrText)
                    {
                       
                        int valX = Convert.ToInt32((progressBar1.Location.X + progressBar1.Width) / 2);
                        int valY = progressBar1.Location.Y;
                        label1.Location = new Point(valX, valY);
                        if (progressBar1.Value == 0)
                        {
                            label1.Text = "0 %";
                        }
                        else
                        {
                            label1.Text = String.Format("{0}%",(progressBar1.Value / progressBar1.Maximum) * 100);
                        }
                    }
                   
                    progressBar1.Value++;
                    Application.DoEvents();

    Saludos.
    Thursday, January 07, 2010 1:02 PM
  • hola

    llegado a este punto te recomendaria que agregues breakpoints en ale codigo y realices un debug paso a apso para ir analziando que valores toma ese punto donde dices que se queda en cero

    por ahi un calculo incorrecto
    o por ahi la formula

    int valX = Convert.ToInt32((progressBar1.Location.X + progressBar1.Width) / 2);

    este devolviendo valores con decimales en dodne la aprte entera sea del tipo 0,50, entonces la apsa r a entero se trunque la aprte decimal

    pero esto lo veras solo si vas depurando el codigo e inspeccionando las variables

    saludos
    Leandro Tuttini

    Blog
    Buenos Aires
    Argentina
    Thursday, January 07, 2010 1:40 PM
  • hay otra cosa que alomejor puede estar causando eso que me pasa. en la declaracion de esto:

    public Point Location { get; set; }

    me lanza no un error pero se Subralla en verde la palabra Location. el verde me causa raresa alomejor eso puede ser o no ?

    Saludos
    Thursday, January 07, 2010 1:59 PM
  • hola

    si lo marca en verde quiere decir que es un warning, si miras la lista de errores que proporciona el VS alli seguramente veras la descripcion

    igual por lo que describes no creo que este tipo de advertencias sea la causa

    has podido depurar la aplciacion y ver la causa


    podrias sino agregar mensajes

    int valX = Convert.ToInt32((progressBar1.Location.X + progressBar1.Width) / 2);
    int valY = progressBar1.Location.Y;

    Messagebox.Show(string.Format("ValorX:{0} ValorY:{1}", (progressBar1.Location.X + progressBar1.Width) / 2, valY));

    label1.Location = new Point(valX, valY);


    para poder ver que valor calcula

    saludos
    Leandro Tuttini

    Blog
    Buenos Aires
    Argentina
    • Marked as answer by Cristian Pino Thursday, January 07, 2010 2:43 PM
    Thursday, January 07, 2010 2:18 PM