CLR: .Net / Mono / Boo / Otros CLR > C#
Problema De Stream ???
danijr78:
Tengo un problema al ejecutar el siguiente código.
El nombre del archivo se obtiene bien por el diálogo pero después algo falla con el stream...
private StreamReader sr; // variable de clase
private void miFich_Click(object sender, System.EventArgs e)
{
if(ofdFich.ShowDialog()==System.Windows.Forms.DialogResult.OK && ofdFich.FileName!="")
{
string nom = ofdFich.FileName;
FPrincipal.ActiveForm.Text+= nom;
sr= new StreamReader(nom);
if(ap.suPista().estaLibre())
leerAvion();
}
}
public void leerAvion()
{
string cad=null;
do
{
cad=sr.ReadLine();
}
while(cad==null);
string[] cpo= cad.Split(',');
Avion av= null;
-- if( cpo[1].Trim().ToUpper().StartsWith("COM"))// ERROR INDICE
// FUERA DE LIMITES
{...}
}
La excepción se produce porque el Split solo guarda un string en cad y no existe cad[1].
En el debugger el contenido de cad al producirse la excepción es algo así:
" \0\0\0\0\0 \0\0 \0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\02 \0\0\0\0\0\0... (basura)
El contenido del fichero abierto es:
Boeing 747, comer, Valencia, Madrid, 20:45, 1234
Boeing 747, com, Valencia, BCN, 20:56, 1234
Boeing 747, pasa, Valencia, Paris, 20:59, 123, 25
Algo debe estar mal pero no lo veo...
hellscream:
Arregla la parte en la que lees el archivo (do...while)
danijr78:
He probado a hacer simplemente cad=sr.ReadLine() en lugar de hacerlo dentro del do...while ( teoricamente la primera linea del archivo es válida porque tiene comas) y sigue dando el mismo error. Como podria arreglarlo? No entiendo muy bien a que te refieres...
hellscream:
Esa porción de código que te dije que arreglaras es porque cad es sobre-escrito en cada iteración del do-while, hasta que cad sea null, es decir que cad *seguramente* sea null al final de tu lectura.
No sé exáctamente como quieres procesar ese archivo, ya que si lo hicieras línea a línea deberías poner el código que te falla dentro del do-while, pero por lo que muestras, dá la impresión de que primero quieres leer todo el archivo y luego recién procesarlo...
danijr78:
el metodo leerAvion debe leer UNA SOLA LINEA, guardar los campos separados por comas en un array y despues procesarlos para crear un objeto con esos argumentos.
el do...while lo puse para asegurarme de que leia una linea no vacia pero realmente solo debe leer una linea pero MANTENIENDO EL STREAM para en llamadas posteriores leer la siguiente. Es decir:
1- definir el stream al archivo del dialogo
2- leerAvion
- leer una linea
- separar campos
- procesar campos
El problema sigue estando en leer una linea ya que lee basura y no hay comas...
pero...Por qué???
Navegación
[#] Página Siguiente
Ir a la versión completa