Guardar y leer archivo txt

  • Autor Autor Meta
  • Fecha de inicio Fecha de inicio
M

Meta

Alfa
¡Usuario con pocos negocios! ¡Utiliza siempre saldo de Forobeta!
Opciones03.jpg

Usando C# en modo consola, se puede señalar con las flechas del teclado seleccionar alguna opción con esto >. Solo debe estar marcado con una x.

La idea es, al ejecutar el programa, si no encuentra el archivo.txt, lo cree y escribe la opción marcada con la x.

Al volver a ejecutar el programa, me indica la opción marcada que leyó en el archivo.txt.

Código que he hecho hasta ahora pero no lee, si lo crea es este:
using System;
using System.IO;

namespace Pruebas_Opciones_Consola_02
{
internal class Program
{
static void Main(string[] args)
{
#region Configuración ventana.
// Título de la ventana.
Console.Title = "Opciones";

// Tamaño de la ventana, x, y o, ancho y alto.
const byte ancho = 20, alto = 5;
Console.SetWindowSize(ancho, alto);

// Quitar scroll laterales. Derecho y abajo.
Console.SetBufferSize(ancho, alto);

// Color de fondo.
Console.BackgroundColor = ConsoleColor.Yellow;

// Color de las letras.
Console.ForegroundColor = ConsoleColor.Black;

// Limpiar pantalla y dejarlo todo en color de fondo.
Console.Clear();

// Visible el cursor. // No! Así lo haces invisible.
Console.CursorVisible = false;
#endregion

string[] opciones =
{
" ** TÍTULO ** ", // Posición 0.
" ( ) Opción A ", // 1
" ( ) Opción B ", // 2
" ( ) Opción C ", // 3
" SALIR ", // 4
">", // 5
"x", // 6
" ", // 7
" " // 8
};
string opA = "x";
string opB = " ";
string opC = " ";

Menu();

#region Opociones, selecciones y guardar archivo .txt
void OpcionesA()
{
Console.SetCursorPosition(0, 0);
Console.Write(opciones[0]); // ** TÍTULO **
Console.SetCursorPosition(0, 1);
Console.Write(opciones[1]); // ( ) Opción A
Console.SetCursorPosition(0, 2);
Console.Write(opciones[2]); // ( ) Opción B
Console.SetCursorPosition(0, 3);
Console.Write(opciones[3]); // ( ) Opción C
}

void OpcionesB()
{
Console.SetCursorPosition(0, 1);
Console.Write(opciones[4]); // SALIR
Console.SetCursorPosition(0, 2);
Console.Write(opciones[8]); //
Console.SetCursorPosition(0, 3);
Console.Write(opciones[8]); //
}

void SelectorA()
{
Console.SetCursorPosition(0, 1);
Console.Write(opciones[5]); // >
Console.SetCursorPosition(0, 2);
Console.Write(opciones[7]);
Console.SetCursorPosition(0, 3);
Console.Write(opciones[7]);
}

void SelectorB()
{
Console.SetCursorPosition(0, 1);
Console.Write(opciones[7]);
Console.SetCursorPosition(0, 2);
Console.Write(opciones[5]); // >
Console.SetCursorPosition(0, 3);
Console.Write(opciones[7]);
}

void SelectorC()
{
Console.SetCursorPosition(0, 1);
Console.Write(opciones[7]);
Console.SetCursorPosition(0, 2);
Console.Write(opciones[7]);
Console.SetCursorPosition(0, 3);
Console.Write(opciones[5]); // >
}
#endregion

void Menu()
{
sbyte indiceSeleccionado = 0; // Índice seleccionado de cada opción del menú.
bool salir = false; // Para salir del menú principal al INICIO.
sbyte SELECCION_OPCIONES_TOTALES = 3; // Total de opciones para seleccionar y fija.

// Capturar tecla para luego validar.
ConsoleKey tecla;

// Crear archivo y guarda el * seleccioinado en él.
if (File.Exists("Archivo.txt"))
{
string data = File.ReadAllText("Archivo.txt");
opA = Convert.ToString(data);
opB = Convert.ToString(data);
opC = Convert.ToString(data);
}

do
{
//******************************************************************
// Dibujo el menú principal.

switch (indiceSeleccionado)
{
case 0:
OpcionesA();
SelectorA();
Console.SetCursorPosition(3, 1);
Console.Write(opA);
Console.SetCursorPosition(3, 2);
Console.Write(opB);
Console.SetCursorPosition(3, 3);
Console.Write(opC);
break;

case 1:
OpcionesA();
SelectorB();
Console.SetCursorPosition(3, 1);
Console.Write(opA);
Console.SetCursorPosition(3, 2);
Console.Write(opB);
Console.SetCursorPosition(3, 3);
Console.Write(opC);
break;

case 2:
OpcionesA();
SelectorC();
Console.SetCursorPosition(3, 1);
Console.Write(opA);
Console.SetCursorPosition(3, 2);
Console.Write(opB);
Console.SetCursorPosition(3, 3);
Console.Write(opC);
break;

case 3:
OpcionesB();
Console.SetCursorPosition(0, 1);
Console.Write(opciones[5]); // >
break;
default:
Console.Write("Fuera de rango. ");
break;
}

// Fin de pintar el menú principal.
//******************************************************************

// Leer tecla ingresada por el usuario.
tecla = Console.ReadKey(true).Key;

// Validar el tipo de tecla.
if (tecla == ConsoleKey.Enter)
{
switch (indiceSeleccionado)
{
case 0:
opA = "x"; opB = " "; opC = " ";
// Si pulsa Enter, escribes en el archivo.
if (tecla == ConsoleKey.Enter)
{
File.WriteAllText("Archivo.txt", opA.ToString());
}
break;

case 1:
opA = " "; opB = "x"; opC = " ";
// Si pulsa Enter, escribes en el archivo.
if (tecla == ConsoleKey.Enter)
{
File.WriteAllText("Archivo.txt", opB.ToString());
}
break;

case 2:
opA = " "; opB = " "; opC = "x";
// Si pulsa Enter, escribes en el archivo.
if (tecla == ConsoleKey.Enter)
{
File.WriteAllText("Archivo.txt", opC.ToString());
}
break;

case 3:
indiceSeleccionado = 0; // Restaurar índice antes de salir.
salir = true; // Salir.
break;

default:
Console.Write("Fuera de rango. ");
break;
}
}

// ¿Has pulsado tecla flecha Abajo?
if (tecla == ConsoleKey.DownArrow)
{
indiceSeleccionado++;
}

// Entonces si pulsas tecla flecha Arriba.
if (tecla == ConsoleKey.UpArrow)
{
indiceSeleccionado--;
}

// Si está en la última opción, salta a la primera.
if (indiceSeleccionado > SELECCION_OPCIONES_TOTALES)
{
indiceSeleccionado = 0;
}

// Si está en la primera posición, salta a la última.
if (indiceSeleccionado < 0)
{
indiceSeleccionado = SELECCION_OPCIONES_TOTALES;
}

// Uso la tecla escape como salida.
} while (!salir);
}
}
}
}
 
¿Te sirvió? Únete a la conversación

Con tu cuenta gratis puedes responder, escribirle al autor por mensaje privado y comprar con Saldo retenido: el pago se libera cuando recibes lo acordado.

Toma 30 segundos · vuelves a este tema al terminar
Tu codigo esta bien, solo necesita unos cmabios.

Prueba haciendo estos ajustes colega.

Tienes un problema potencial de índice fuera de límites en tu menu. Tu variable SELECCION_OPCIONES_TOTALES está establecida en 3, pero sus opciones de menu incluyen en realidad 4 opciones (0 a 3).

Asi que cambia esto:
if (indiceSeleccionado > SELECCION_OPCIONES_TOTALES)

Por esto:
if (indiceSeleccionado > 3)

Asegurate de que las llamadas de File.WriteAllText se utilizan correctamente. Es posible que estes deseando comprobar si el archivo se puede crear o si tiene permisos para escribir en él.

C#:
if (tecla == ConsoleKey.Enter)
{
    switch (indiceSeleccionado)
    {
        case 0:
            opA = "x"; opB = " "; opC = " ";
            break;

        case 1:
            opA = " "; opB = "x"; opC = " ";
            break;

        case 2:
            opA = " "; opB = " "; opC = "x";
            break;

        case 3:
            indiceSeleccionado = 0; // Restaurar índice antes de salir.
            salir = true; // Salir.
            break;

        default:
            Console.Write("Fuera de rango. ");
            break;
    }
    // Guardar en archivo solo después de actualizar la opción seleccionada
    File.WriteAllText("Archivo.txt", opA + opB + opC);
}
 
Buenas colega.

Me sale esto.

Al leer, guardar parece que guarda bien, pero al leer como que no.
 

Adjuntos

  • Opciones04.webp
    Opciones04.webp
    6,4 KB · Visitas: 11
Ya me funciona, se hace así:

Dejo el código por si alguien lo necesita o solo quiere curiosear hasta en el alma. Xddddddd.
C#:
using System;
using System.IO;

namespace Pruebas_Opciones_Consola_02
{
    internal class Program
    {
        static void Main(string[] args)
        {
            #region Configuración ventana.
            // Título de la ventana.
            Console.Title = "Opciones";

            // Tamaño de la ventana, x, y o, ancho y alto.
            const byte ANCHO_X = 20, ALTO_Y = 5;
            Console.SetWindowSize(ANCHO_X, ALTO_Y);

            // Quitar scroll laterales. Derecho y abajo.
            Console.SetBufferSize(ANCHO_X, ALTO_Y);

            // Color de fondo.
            Console.BackgroundColor = ConsoleColor.Yellow;

            // Color de las letras.
            Console.ForegroundColor = ConsoleColor.Black;

            // Limpiar pantalla y dejarlo todo en color de fondo.
            Console.Clear();

            // Visible el cursor. // No! Así lo haces invisible.
            Console.CursorVisible = false;
            #endregion

            string[] opciones =
{
                    "    ** TÍTULO **    ",    // Posición 0.
                    "  ( ) Opción A      ",    // 1
                    "  ( ) Opción B      ",    // 2
                    "  ( ) Opción C      ",    // 3
                    "  SALIR             ",    // 4
                    ">",                       // 5
                    "x",                       // 6
                    " ",                       // 7
                    "                    "     // 8
                };
            string opA = "x";
            string opB = " ";
            string opC = " ";

            Menu();

            #region Opociones, selecciones y guardar archivo .txt
            void OpcionesA()
            {
                Console.SetCursorPosition(0, 0);
                Console.Write(opciones[0]);       //    ** TÍTULO **   
                Console.SetCursorPosition(0, 1);
                Console.Write(opciones[1]);       //   ( ) Opción A
                Console.SetCursorPosition(0, 2);
                Console.Write(opciones[2]);       //   ( ) Opción B
                Console.SetCursorPosition(0, 3);
                Console.Write(opciones[3]);       //   ( ) Opción C
            }

            void OpcionesB()
            {
                Console.SetCursorPosition(0, 1);
                Console.Write(opciones[4]);       //   SALIR
                Console.SetCursorPosition(0, 2);
                Console.Write(opciones[8]);       // 
                Console.SetCursorPosition(0, 3);
                Console.Write(opciones[8]);       //
            }

            void SelectorA()
            {
                Console.SetCursorPosition(0, 1);
                Console.Write(opciones[5]);       // >
                Console.SetCursorPosition(0, 2);
                Console.Write(opciones[7]);
                Console.SetCursorPosition(0, 3);
                Console.Write(opciones[7]);
            }

            void SelectorB()
            {
                Console.SetCursorPosition(0, 1);
                Console.Write(opciones[7]);
                Console.SetCursorPosition(0, 2);
                Console.Write(opciones[5]);       // >
                Console.SetCursorPosition(0, 3);
                Console.Write(opciones[7]);
            }

            void SelectorC()
            {
                Console.SetCursorPosition(0, 1);
                Console.Write(opciones[7]);
                Console.SetCursorPosition(0, 2);
                Console.Write(opciones[7]);
                Console.SetCursorPosition(0, 3);
                Console.Write(opciones[5]);        // >
            }
            #endregion

            void Menu()
            {
                sbyte indiceSeleccionado = 0;                // Índice seleccionado de cada opción del menú.
                bool salir = false;                          // Para salir del menú principal al INICIO.
                sbyte SELECCION_OPCIONES_TOTALES = 3;        // Total de opciones para seleccionar y fija.

                // Capturar tecla para luego validar.
                ConsoleKey tecla;

                // Crear archivo y guarda el * seleccioinado en él.
                if (File.Exists("Archivo.txt"))
                {
                    // Leer los datos separados
                    string[] result = File.ReadAllText("Archivo.txt").Split(new char[] { ',' });
                    opA = result[0];
                    opB = result[1];
                    opC = result[2];
                }

                do
                {
                    //******************************************************************
                    // Dibujo el menú principal.

                    switch (indiceSeleccionado)
                    {
                        case 0:
                            OpcionesA();
                            SelectorA();
                            Console.SetCursorPosition(3, 1);
                            Console.Write(opA);
                            Console.SetCursorPosition(3, 2);
                            Console.Write(opB);
                            Console.SetCursorPosition(3, 3);
                            Console.Write(opC);
                            break;

                        case 1:
                            OpcionesA();
                            SelectorB();
                            Console.SetCursorPosition(3, 1);
                            Console.Write(opA);
                            Console.SetCursorPosition(3, 2);
                            Console.Write(opB);
                            Console.SetCursorPosition(3, 3);
                            Console.Write(opC);
                            break;

                        case 2:
                            OpcionesA();
                            SelectorC();
                            Console.SetCursorPosition(3, 1);
                            Console.Write(opA);
                            Console.SetCursorPosition(3, 2);
                            Console.Write(opB);
                            Console.SetCursorPosition(3, 3);
                            Console.Write(opC);
                            break;

                        case 3:
                            OpcionesB();
                            Console.SetCursorPosition(0, 1);
                            Console.Write(opciones[5]);       // >
                            break;
                        default:
                            Console.Write("Fuera de rango.     ");
                            break;
                    }

                    // Fin de pintar el menú principal.
                    //******************************************************************

                    // Leer tecla ingresada por el usuario.
                    tecla = Console.ReadKey(true).Key;

                    // Validar el tipo de tecla.
                    if (tecla == ConsoleKey.Enter)
                    {
                        switch (indiceSeleccionado)
                        {
                            case 0:
                                opA = "x"; opB = " "; opC = " ";
                                break;

                            case 1:
                                opA = " "; opB = "x"; opC = " ";
                                break;

                            case 2:
                                opA = " "; opB = " "; opC = "x";
                                break;

                            case 3:
                                indiceSeleccionado = 0; // Restaurar índice antes de salir.
                                salir = true;           // Salir.
                                break;

                            default:
                                Console.Write("Fuera de rango.     ");
                                break;
                        }
                        // Guardar en archivo solo después de actualizar la opción seleccionada.
                        // Guardar los datos con separador.
                        File.WriteAllText("Archivo.txt", string.Join(",", new string[] { opA, opB, opC }));
                    }

                    // ¿Has pulsado tecla flecha Abajo?
                    if (tecla == ConsoleKey.DownArrow)
                    {
                        indiceSeleccionado++;
                    }

                    // Entonces si pulsas tecla flecha Arriba.
                    if (tecla == ConsoleKey.UpArrow)
                    {
                        indiceSeleccionado--;
                    }

                    // Si está en la última opción, salta a la primera.
                    if (indiceSeleccionado > SELECCION_OPCIONES_TOTALES)
                    {
                        indiceSeleccionado = 0;
                    }

                    // Si está en la primera posición, salta a la última.
                    if (indiceSeleccionado < 0)
                    {
                        indiceSeleccionado = SELECCION_OPCIONES_TOTALES;
                    }

                    // Uso la tecla escape como salida.
                } while (!salir);
            }
        }
    }
}
 
Atrás
Arriba