jose;san martin;pepe;seba;pipo
y en otra linea tenes:
jose;maria;martin
llega hasta el indice 2 y los otros no existe y ahi el error, para evitar eso se me ocurre que cada vez que en el while se haga el split, hagas un For, algo asi:
Código
private void button1_Click(object sender, EventArgs e) { string[] campos; char[] x ={ ';' };//delimitador string vLinea = ""; FileStream fs = new FileStream("C:\\ejemplo.txt", FileMode.Open); StreamReader sr = new StreamReader(fs); listView1.Columns.Add("FECHA ", 75); listView1.Columns.Add("CLIENTE", 100); listView1.Columns.Add("NUMERO", 75); listView1.Columns.Add("BANCO", 100); listView1.Columns.Add("VENCIMIENTO", 75); listView1.Columns.Add("IMPORTE", 75); listView1.Columns.Add("TENEDOR", 100); while (!sr.EndOfStream) { vLinea = sr.ReadLine(); campos = vLinea.Split(x); ListViewItem oReg = new ListViewItem(campos[0]); listView1.View = View.Details; for (int i=1; i< campos.Length -1 ; i++) { oReg.SubItems.Add(campos[i]); } listView1.Items.Add(oReg); } fs.Close(); sr.Close(); }
lo que hace es hacer un For desde el indice 0 hasta el mayor indice que tenga la matriz y lo agrega, y funciona por mas que no tengas algunos campos, pero no es lo que se deberia hacer, porque hay un problema por ejemplo ¿ como vos te aseguras que el dato que esta en la columna 2 es realmente de la columna 2 ?
ejemplo:
supongamos que en la columan 2 solo van los nombres
una linea normal:
01/01/2000;josesito;banco nacion
una linea sin la columna 1 te quedaria:
josesito;banco nacion
el codigo te va a funcionar, pero te va a insertar la columna 2 como si fuera la 1 porque falta un campo....a no ser que te asegures que realmente cuando falta un campo este el separador ";" exista, por ejemplo en el ejemplo anterior deberia quedar asi:
;josesito;banco nacion
pregunta ¿quien genera ese archivo? ¿ no es mejor trabajarla con una base de datos?
saludos.