Saltar al contenido

Leer números de un archivo de texto en C#

Si encuentras alguna incompatibilidad en tu código o proyecto, recuerda probar siempre en un ambiente de testing antes aplicar el código al proyecto final.

Solución:

La respuesta de Brannon explica cómo leer. binario datos. si quieres leer texto datos, debería estar leyendo cadenas y luego analizándolas, para lo cual existen métodos integrados, por supuesto.

Por ejemplo, para leer un archivo con datos:

10
10.5
hello

Podrías usar:

using (TextReader reader = File.OpenText("test.txt"))

    int x = int.Parse(reader.ReadLine());
    double y = double.Parse(reader.ReadLine());
    string z = reader.ReadLine();

Tenga en cuenta que esto no tiene manejo de errores. En particular, generará una excepción si el archivo no existe, las dos primeras líneas tienen datos inapropiados o hay menos de dos líneas. Dejará un valor de null en z si el archivo solo tiene dos líneas.

Para una solución más robusta que puede fallar con más gracia, querrá verificar si reader.ReadLine() devuelto null (indicando el final del archivo) y use int.TryParse y double.TryParse en vez de Parse métodos.

Eso es asumiendo que hay un separador de línea entre los valores. Si realmente quieres leer un string Me gusta esto:

10 10.5 hello

entonces el código sería muy similar:

using (TextReader reader = File.OpenText("test.txt"))

    string text = reader.ReadLine();
    string[] bits = text.Split(' ');
    int x = int.Parse(bits[0]);
    double y = double.Parse(bits[1]);
    string z = bits[2];

Una vez más, querrá realizar la detección y el manejo de errores apropiados. Tenga en cuenta que si el archivo realmente solo constaba de una sola línea, es posible que desee utilizar File.ReadAllText en cambio, para hacerlo un poco más simple. También hay File.ReadAllLines que lee todo el archivo en un string array de lineas

EDITAR: si necesita dividir por ninguna espacio en blanco, entonces probablemente sería mejor leer el archivo completo con File.ReadAllText y luego usando una expresión regular para dividirlo. En ese punto, me pregunto cómo representas un string que contiene un espacio.

En mi experiencia, generalmente sabe más sobre el formato que esto: si habrá un separador de línea o múltiples valores en la misma línea separados por espacios, etc.

yo tambien agregaria eso mixed Los formatos binarios/de texto son generalmente desagradables de manejar. El manejo de texto simple y eficiente tiende a leer en un búfer, lo que se vuelve problemático si también hay datos binarios. Si necesita una sección de texto en un archivo binario, generalmente es mejor incluir una longitud prefix para que solo esa pieza de datos pueda ser decodificada.

using (FileStream fs = File.OpenRead("file.txt"))

    BinaryReader reader = new BinaryReader(fs);

    int intVal = reader.ReadInt32();
    float floatVal = reader.ReadSingle();
    string stringVal = reader.ReadString();

No es exactamente la respuesta a su pregunta, pero es solo una idea para considerar si es nuevo en C#: si está usando un archivo de texto personalizado para leer algunos parámetros de configuración, es posible que desee consultar los temas de serialización XML en .NET.

La serialización XML proporciona una forma sencilla de escribir y leer archivos con formato XML. Por ejemplo, si tiene una clase de configuración como esta:

public class Configuration

   public int intVal  get; set; 
   public float floatVal  get; set; 
   public string stringVal  get; set; 

simplemente puede guardarlo y cargarlo usando el XmlSerializer clase:

public void Save(Configuration config, string fileName)

   XmlSerializer xml = new XmlSerializer(typeof(Configuration));
   using (StreamWriter sw = new StreamWriter(fileName))
   
       xml.Serialize(sw, config);
   


public Configuration Load(string fileName)

   XmlSerializer xml = new XmlSerializer(typeof(Configuration));
   using (StreamReader sr = new StreamReader(fileName))
   
       return (Configuration)xml.Deserialize(sr);
   

Save El método definido anteriormente creará un archivo con el siguiente contenido:


    0
    0.0
    

Lo bueno de este enfoque es que no es necesario cambiar el Save y Load métodos si su Configuration cambios de clase.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *