C sharp - leer la siguiente linea del fichero

 
Vista:

leer la siguiente linea del fichero

Publicado por jevikris (3 intervenciones) el 14/08/2007 14:07:37
Hola!

He estado mirando en un libro de C sharp asi como en diversos foros pero no encuentro la manera de hacer lo que busco ....
A ver si me podeis echar una mano :)

El programa que realizo controlara un robot, para ello he de leer los comandos que vienen dados en un fichero. Cada linea del fichero tiene comandos dirigidos a un motor del robot.
Como las acciones son secuenciales solo quiero leer una linea del fichero cada vez que acceda a la funcion leer fichero .

Cada linea del fichero tiene un tamanyo diferente pues los campos no son los mismos para cada comando, asi pues hasta encontrar la \n de final de linea, cada vez que lea una linea guardare en un string[] los diferentes campos del comando a ejecutar sin incluir los espacios ....

lo que he hecho por desgracia no refleja lo que quiero hacer porque solo lee la misma linea del fichero ....


public static string[] Read(StreamReader sread) {

string[] aline = new string[20];

string line = sread.ReadLine();



if (line == null) { aline = null; Console.WriteLine("end of file"); }
//EOF
else
{
line = line.Replace('\t', ' ').Trim();

const char space = ' ';
const char end = '\n';
char[] delimiters = new char[]
{
space,
end
};

foreach (string subString in line.Split(delimiters))
{
aline[i] = subString;
i++;
}
}
return aline;

}


lo unico que se me ocurre es utilizar sread.Read, contar el numero de caracteres de cada linea, poner un contador, guardarlo todo en el buffer de caracteres, pasar el buffer de caracteres a un string cada vez q haya un espacio ... etc

pero me parece bastante tedioso y me extranya q no haya una forma mas "limpia" de hacerlo....

Cualquier ayuda se agradece!!!

Muchas gracias de antemano :)

Cris
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
sin imagen de perfil
Val: 158
Bronce
Ha disminuido 1 puesto en C sharp (en relación al último mes)
Gráfica de C sharp

RE:leer la siguiente linea del fichero

Publicado por Yamil Bracho (1164 intervenciones) el 14/08/2007 15:09:06
No se si entendi bien el problema pero cada linea esta separada de la otra por medio de un \nr\r, cierto ? asi que simplemente puedes hacer

string [] aLine = new string[0];
string sLinea = sread.ReadLine();
if (sLine != null && sLine.Trim().Length >0)
{
aLine = sLine.Split(' ');
}

return aLine;
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:leer la siguiente linea del fichero

Publicado por Cris (3 intervenciones) el 14/08/2007 15:31:09
Gracias Yamil, puede que me haya explicado mal porque el problema no era ese ...

el fichero contiene comandos del tipo:

MOVE <id> <direction> <speed> <distance>
STOP <id>

Es decir cada linea del fichero contiene un numero diferente de caracteres y lo que quiero es desde el main , llamar a la funcion "lee la siguiente linea del fichero" cada vez que reciba la confirmacion por parte del robot de movimiento efectuado.

Por eso solo quiero leer una linea cada vez, y cada vez que acceda a la funcion quiero leer la siguiente linea ...

yo creo que necesito la funcion seek de StreamReader pero no veo claro como hacerlo ....

Gracias
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:leer la siguiente linea del fichero

Publicado por Rudy Castañeda (24 intervenciones) el 14/08/2007 16:24:36
Bueno a ver si entendi... y acá va mi solución:

Creo que lo más obvio para esto es que tu variable de archivo (StreamReader) sea una variable global... ya que con esto, simplemente lo abres al principio de la ejecución y lo cierras al final de la última línea algo así:

//Declaración global
//Esta línea se ejecuta sólo una vez.. y al principio de toooda la lectura
//obviamente dentro de un try

try
{
private StreamReader Arch = new StreamReader(<nombreArchivo>);
}
catch
{
......
}

//Inicio de la lectura...
//Proceso de inicio de lectura del archivo esto es como siempre lo has hecho
//Solo que sin abrir el archivo cada vez...
leer_del_archivo()
....
...
...
//y al final lo cierras
Arch.close();

private String leer_del_archivo()
{
String linea;
linea = Arch.ReadLine();
if (!String.IsNullOrEmpty(linea))
return linea;
else
return null;
}

Nota: Recuerda que la variable Arch... es global... asi que siempre que la uses en la función te devolverá la siguiente línea.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar