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();
    }
}

No hay comentarios:

Publicar un comentario