Foros del Web » Programación para mayores de 30 ;) » .NET »

c# problema con ejercicio lectura y escritura de archivo

Estas en el tema de c# problema con ejercicio lectura y escritura de archivo en el foro de .NET en Foros del Web. Hola amigos soy nuevo en el foro y en esto de la programacion, bueno la cosa es que estoy tratando de resolver el siguiente ejercicio ...
  #1 (permalink)  
Antiguo 22/07/2014, 19:47
 
Fecha de Ingreso: julio-2014
Mensajes: 8
Antigüedad: 10 años, 4 meses
Puntos: 0
Pregunta c# problema con ejercicio lectura y escritura de archivo

Hola amigos soy nuevo en el foro y en esto de la programacion, bueno la cosa es que estoy tratando de resolver el siguiente ejercicio pero ya me atasque y no se si lo que estoy haciendo esta bien o no, ojala me puedan echar una mano... No se si estoy bien, mal, estoy confundido...

EJERCICIO:
Solicita al usuario que capture frases y cada vez que presione la tecla Intro se almacene la línea o frases capturadas en un archivo llamado "frases.txt".
Deja de solicitar la captura de elementos cuando el usuario pulse la tecla Intro sin teclear nada.
Muestra el contenido del archivo al finalizar la captura.


Código:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.IO;

namespace ConsoleApplication1
{
    class Program
    {
        static void Main(string[] args)
        {
            Console.WriteLine("Escriba palabras que se guardaran en un archivo llamado <<frases.txt>>");

            //como puedo llamar aqui a las funciones Write y despues a Read, si es que Write termino
            //null, para que se pueda ejecutar enseguida Read?... no se si esta bien mi codigo



            Console.WriteLine("Oprima una tecla para continuar...");
            System.Console.ReadKey();
        }
    }


    public class ListaEnlazada //inicio de lista enlazada
    {

        public void Write()//inicio de write
        {
            StreamWriter fichero;

            string linea;
            string ruta = @"C:\Windows\Temp\frases.txt";
            File.CreateText(ruta);
            fichero = File.CreateText(ruta);
            linea = Console.ReadLine();


            do
            {            
                linea = Console.ReadLine();
                fichero.WriteLine(linea);
            } 
            while (linea == null) ;


            fichero.Close();
        }//fin de write

    

        public void Read()//inicio de read
        {
            StreamReader fichero;
            string line;
            string ruta = @"C:\Windows\Temp\frases.txt";
            fichero = File.OpenText(ruta);

            do
            {
                line = fichero.ReadLine();
                if (line != null)
                    Console.WriteLine(line);
            } while (line != null);


            fichero.Close();
        }//fin de read


        }//fin de lista enlazada
   
 
}
  #2 (permalink)  
Antiguo 23/07/2014, 05:43
Avatar de Malenko
Moderador
 
Fecha de Ingreso: enero-2008
Mensajes: 5.323
Antigüedad: 16 años, 11 meses
Puntos: 606
Respuesta: c# problema con ejercicio lectura y escritura de archivo

De entrada te marco dos errores, uno de algorítmo y otro de desconocimiento del lenguaje.

El de algoritmo es este:

Código:
 linea = Console.ReadLine();
            do
            {            
                linea = Console.ReadLine();
                fichero.WriteLine(linea);
            } 
            while (linea == null) ;
El primer texto que capturas antes de entrar en el bucle lo estas descartando ya que en cuanto entras en el "do", vuelves a leer del teclado. Una vez veas claro el fallo que te comento, mira de replantearte esas lineas de código para ver como solucionarlo.

El segundo error es, en mi criterio, de desconocimiento del lenguaje. Estas asumiendo que si alguien no introduce nada, linea será null. Si miras la documentación de ReadLine, solo devolverá "null" al pulsar desde el teclado "Control + Z". Si alguien pulsa únicamente return, lo que te devuelve es una cadena vacía. Para poder controlar si la cadena está vacía (ha pulsado return sin escribir nada) o si ha enviado un "Control + Z" y te está devolviendo null, la clase String dispone de la función IsNullOrEmpty.

Prueba de entrada con estos cambios a ver que tal ;)
__________________
Aviso: No se resuelven dudas por MP!
  #3 (permalink)  
Antiguo 23/07/2014, 08:51
 
Fecha de Ingreso: julio-2014
Mensajes: 8
Antigüedad: 10 años, 4 meses
Puntos: 0
Respuesta: c# problema con ejercicio lectura y escritura de archivo

Muchas gracias, a ver si entendí bien, te muestro como quedo:

Código:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.IO;

namespace ConsoleApplication1
{
    class Program
    {
        static void Main(string[] args)
        {
            Console.WriteLine("Escriba palabras que se guardaran en un archivo llamado <<frases.txt>>");

            ListaEnlazada objeto = new ListaEnlazada();
            objeto.Write();
            objeto.Read();



            Console.WriteLine("Oprima una tecla para continuar...");
            System.Console.ReadKey();
        }
    }

    

    public class ListaEnlazada //inicio de lista enlazada
    {
       
        public void Write()//inicio de write
        {
            StreamWriter fichero;

            string linea;
            string ruta = @"C:\Windows\Temp\frases.txt";
            File.CreateText(ruta);
            fichero = File.CreateText(ruta);

            do
            {
                linea = Console.ReadLine();
                fichero.WriteLine(linea);
            }
            while (string.IsNullOrEmpty(linea)== true);


            fichero.Close();
        }//fin de write



        public void Read()//inicio de read
        {
            StreamReader fichero;
            string line;
            string ruta = @"C:\Windows\Temp\frases.txt";
            fichero = File.OpenText(ruta);

            do
            {
                line = fichero.ReadLine();
                if (string.IsNullOrEmpty(line) == true)
                   //true    
                        Console.WriteLine(line);
            } while (string.IsNullOrEmpty(line) == false);


            fichero.Close();
        }//fin de read


    }//fin de lista enlazada


}
al ejecutar el codigo me muestra el siguiente error:


lo que mencionas de IsNullOrEmpty lo tome de la siguiente referencia:

http://www.dotnetperls.com/isnullorempty

de ante mano muchas gracias por tu ayuda
  #4 (permalink)  
Antiguo 23/07/2014, 09:15
Avatar de Malenko
Moderador
 
Fecha de Ingreso: enero-2008
Mensajes: 5.323
Antigüedad: 16 años, 11 meses
Puntos: 606
Respuesta: c# problema con ejercicio lectura y escritura de archivo

Segun la condición que has puesto, mientras se cumpla que la cadena sea nula o vacia, seguirás leyendo del teclado. Es eso lo que deseas? ;)

En cuanto al error, es un problema de permisos ya que estas escribiendo en un subdirectorio de Windows. Prueba a ejecutar tu aplicación como administrador, o mejor aún, escribe en una carpeta distinta, como por ejemplo "c:\temp".
__________________
Aviso: No se resuelven dudas por MP!
  #5 (permalink)  
Antiguo 23/07/2014, 09:56
 
Fecha de Ingreso: julio-2014
Mensajes: 8
Antigüedad: 10 años, 4 meses
Puntos: 0
Respuesta: c# problema con ejercicio lectura y escritura de archivo

Si, eso es lo que deseo, como dicen las instrucciones:

Deja de solicitar la captura de elementos cuando el usuario pulse la tecla Intro sin teclear nada.
Muestra el contenido del archivo al finalizar la captura.


pero aun me sigue saliendo el mismo error, lo que hice fue cambiar la ruta por la siguiente:

Código:
string ruta = @"C:\\frases.txt";
ya lo compile tratando de ejecutarlo como administrador de sistema pero obtengo esta pantalla:



EDITADO:
disculpa te entendí mal, lo que quiero es que cuando se pulse INTRO sin escribir nada, despliegue lo que hay dentro del archivo en consola...

según entiendo, tendría que invertir el valor de las condiciones de FALSE a TRUE y viceversa? para que cuando no se escriba nada me imprima en pantalla el contenido del "*.txt"...

Última edición por jonhjonhz; 23/07/2014 a las 10:27 Razón: entendí mal
  #6 (permalink)  
Antiguo 23/07/2014, 13:43
 
Fecha de Ingreso: julio-2014
Mensajes: 8
Antigüedad: 10 años, 4 meses
Puntos: 0
Pregunta Problema con LinkedList C#

Hola, me dejaron esta tarea pero no se por donde comenzar, alguien me puede dar una mano?

EJERCICIO:
observa que este ejemplo está limitado a insertar tres elementos en la lista. Modifica el código necesario para que, al ejecutarse el programa, solicite continuamente la captura de un valor que será insertado en la lista enlazada hasta que el usuario ya no desee continuar con dicho registro.

Código:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace lista_enlazada_2
{
    class Program
    {
        static void Main(string[] args)
        {
            ListaEnlazada lista = new ListaEnlazada();//Se crea el objeto lista enlazada
            lista.Insertar(9);//Se inserta un nodo a la lista con un atributo de tipo entero
            lista.Insertar(12);
            lista.Insertar(4);
            lista.Mostrar();//_Muestra la lista enlazada ordenada del menor al mayor de los tipos enteros
            lista.Mostrar();
            lista.Borrar(4);//Borra un nodo de la lista enlazada
            
            
            lista.Mostrar();
            Console.ReadKey();
        }
    }
    class Nodo
    {
        public int valor;
        public Nodo sig;
        public Nodo(int v, Nodo s)
        {
            valor = v;
            sig = s;
        }
    }
    class ListaEnlazada
    {
        Nodo primero;
        Nodo actual;
        public ListaEnlazada()
        {
        }
         public void Insertar(int v)
        {
            Nodo anterior;
            if (ListaVacia() || primero.valor > v)
            {
                primero = new Nodo(v, primero);
            }
            else
            {
                anterior = primero;
                while (anterior.sig != null && anterior.sig.valor <= v)
                    anterior = anterior.sig;
                anterior.sig = new Nodo(v,anterior.sig);
            }
        }
        public void Mostrar()
        {
            Nodo aux;
            aux = primero;
            while (aux != null)
            {
                Console.Write(aux.valor + "->");
                aux = aux.sig;
            }
            Console.Write(" null");
            Console.WriteLine();
        }
        public void Siguiente()
        {
            if (actual != null)
                actual = actual.sig;
        }
        public void Primero()
        {
            actual = primero;
        }
        public void Borrar(int v)
        {
            Nodo anterior, nodo;
            nodo = primero;
            anterior = null;
            while (nodo != null && nodo.valor < v)
            {
                anterior = nodo;
                nodo = nodo.sig;
            }
            if (nodo == null || nodo.valor != v)
                return;
            else
            {
                if (anterior == null)
                    primero = nodo.sig;
                else
                    anterior.sig = nodo.sig;
            }
        }
        public bool ListaVacia()
        {
            if (primero == null)
                return true;
            return false;
        }
        public void Ultimo()
        {
            Primero();
            if (!ListaVacia())
                while (actual.sig != null)
                    Siguiente();

        }
        public bool Actual()
        {
            if (actual != null)
                return true;
            return false;
        }
        public int ValorActual()
        {
            return actual.valor;
        }
    }
}
Por donde puedo comenzar? ...lo que pensaba hacer era agregar al inicio:
Código:
using System.IO;
Después de alguna manera modificar, el main
Código:
ListaEnlazada lista = new ListaEnlazada();//Se crea el objeto lista enlazada
lista.Insertar(Console.ReadLine());//Se inserta un nodo a la lista con un atributo de tipo entero
O algo así, para que el usuario pueda ingresar valores al nodo...

Pues como verán, es una estupidez pero no se por donde comenzar... alguna sugerencia?

Etiquetas: c#, ejercicio, programación-general, valor
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 10:13.