Mostrando entradas con la etiqueta streamwriter. Mostrar todas las entradas
Mostrando entradas con la etiqueta streamwriter. Mostrar todas las entradas

viernes, 31 de agosto de 2012

algoritmo para guardar un archivo


// Este ejemplo muestra cómo se procesa el contenido de un archivo, que
//indica operaciones matemáticas básicas: * / + -
// Este ejemplo en particular, escribe el resultado en un archivo destino
using System;
using System.IO;
class Calculadora
{
    StreamReader sr;
    StreamWriter sw;
    bool abierto1 = false;
    bool abierto2 = false;
    // Constructor: Recibe el nombre del archivo y lo intenta abrir.
    // Si no puede abrirse para lectura, "abierto" queda como false
    // Si lo puede abrir, crea un segundo archivo con un nombre similar.
    public Calculadora(string filename)
    {
        try
        {
            sr = new StreamReader(filename);
            abierto1 = true;
        }
        catch (Exception e)
        {
            Console.WriteLine("Error en la apertura de \"{0}\": {1}",
            filename, e.ToString());
        }
        if (abierto1)
        {
            string nombrearchivo2;
           
            nombrearchivo2 = "c.txt";
            try
            {
                sw = new StreamWriter(nombrearchivo2);
                abierto2 = true;
            }
            catch (Exception e)
            {
                Console.WriteLine("Error en la apertura de \"{0}\": {1}",
                nombrearchivo2, e.ToString());
            }
        }
    }
    // Operacion: Recibe la operación y dos números en forma de string.
    // Retorna el resultado (int) de la operación entre ambos números.
    int Operacion(string op, string n1, string n2)
    {
        switch (op)
        {
            case "+": return (int.Parse(n1) + int.Parse(n2));
            case "-": return (int.Parse(n1) - int.Parse(n2));
            case "*": return (int.Parse(n1) * int.Parse(n2));
            case "/": return (int.Parse(n1) / int.Parse(n2));
        }
        return (0);
    }
    // Procesar: lee el archivo abierto, línea por línea,
    // procesando el contenido en forma de operaciones y escribiendo
    // el resultado en un segundo archivo.
    // Observaciones: Al finalizar se cierran los dos streams.
    // No se valida el formato de c/línea.
    public void Procesar()
    {
        string linea, linea2;
        string[] elementos;
        // Si no se pudo abrir, no se podrá leer ni escribir
        if (!abierto1 || !abierto2) return;
        Console.WriteLine("Procesando ...");
        linea = sr.ReadLine();
        while (linea != null)
        {
            elementos = linea.Split();
            // ahora graba los resultados en el segundo archivo
            linea2 = linea + " = " +
            Operacion(elementos[1], elementos[0], elementos[2]).ToString();
            sw.WriteLine(linea2);
            linea = sr.ReadLine();
        }
        sr.Close(); abierto1 = false;
        sw.Close(); abierto2 = false;
        Console.WriteLine("Listo");
    }

    static void Main(string[] args)
    {
        string nombre;
        Console.Write("Nombre del archivo: ");
        nombre = Console.ReadLine();
        Calculadora c = new Calculadora(nombre);
        c.Procesar();
        Console.ReadLine();
    }
}