Buscar e imprimir en consola datos desde un .txt en C#

publicado por: user102315

Hola 🙂 Bueno es un programa sencillo en el que se maneja un .txt, el programa tiene la opción de ingresar datos, imprimirlos y buscar….

Mi problema es en la tercera parte: Buscar, los datos que se guardan en el txt son: Clave, Nombre y Puesto de la siguiente manera:

123
Carlos Dayan Rodriguez Perez
Administrador
-Espacio-
234
Diego Antonio Rodriguez Perez
Programador
-Espacio-
456
Juan Camaney
Tester
-Espacio-

Noten que dice -Espacio- con eso indico que en vez de un salto de linea vació cada que termina un “registro” hay un espacio, ya viene el porque de esto……

El código:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.IO;

namespace Programa1_Agenda
{
    class Program
    {
        static StreamReader Leer;
        static StreamWriter Escribir;

        static void Main(string[] args)
        {
            int Op;
            int op_1 = 0;
            do
            {
                Console.Clear();
                Console.WriteLine("AGENDA 2018nn");
                Console.WriteLine("1) Ingresar datosn2) Mostrar datosn3) Buscar personan4) SalirnnTu opcion: ");
                Op = int.Parse(Console.ReadLine());

                if (Op == 1)
                {
                    do
                    {
                        int DUI;
                        string nombre;
                        string puesto;
                        Console.Clear();
                        Console.WriteLine("Escribir un nuevo registronn");
                        Escribir = new StreamWriter("Archivo_Agenda.txt", true);
                        //INGRESA DATOS
                        Console.Write("n* Ingresar nueva clave DUI (3 Digitos enteros): ");
                        DUI = int.Parse(Console.ReadLine());
                        Escribir.WriteLine(DUI);
                        Console.Write("n* Ingresar nombre completo: ");
                        nombre = Console.ReadLine();
                        Escribir.WriteLine(nombre);
                        Console.Write("n* Ingresar puesto: ");
                        puesto = Console.ReadLine();
                        Escribir.WriteLine(puesto);
                        Console.WriteLine("nn");
                        String Cadena = Console.ReadLine();
                        Escribir.WriteLine(Cadena);
                        Escribir.Close();

                        Console.WriteLine("El registro se ha creado exitosamente.nn5) Regresar al menu principaln6) Ingresar un nuevo usuario");
                        Console.Write("nTu opcion: ");
                        op_1 = int.Parse(Console.ReadLine());
                    } while (op_1 == 6);
                }

                if (Op == 2)
                {
                    string Linea;
                    int contador = 0;
                    Console.Clear();
                    Leer = new StreamReader("Archivo_Agenda.txt", true);
                    Console.WriteLine("Mostrando todos los registros:nn");
                    while((Linea = Leer.ReadLine()) != null)
                    {
                        Console.WriteLine(Linea);
                        contador++;
                    }
                    Leer.Close();

                    Console.WriteLine("nEl registro se mostro exitosamente.nn5) Regresar al menu principaln");
                    Console.Write("nTu opcion: ");
                    op_1 = int.Parse(Console.ReadLine());
                }

                if (Op == 3)
                {
                    string Linea;
                    int contador = 0;
                    string result_s;
                    Console.Clear();
                    Leer = new StreamReader("Archivo_Agenda.txt", true);
                    Console.WriteLine("Buscar registro por medio de clave DUI:nn");
                    Console.Write("Ingresa la clave DUI: ");
                    result_s = Console.ReadLine();
                    if((Linea = Leer.ReadLine()) == result_s)
                    {
                        do
                        {
                            Console.WriteLine(Linea);
                            contador++;
                        } while ((Linea = Leer.ReadLine()) != " ");
                    }
                    Leer.Close();

                    Console.WriteLine("nEl registro se mostro exitosamente.nn5) Regresar al menu principaln");
                    Console.Write("nTu opcion: ");
                    op_1 = int.Parse(Console.ReadLine());
                }
                Console.ReadKey();
            } while (op_1 == 5);
        }
    }
}

Lo que intento hacer en la opción 3, es que al pedir la clave DUI y ser detectada en el archivo se imprima en pantalla los datos siguientes hasta que se encuentre un espacio (y esta es la razón del porque…)

Esto lo hace con si se ingresa el primer registro: 123, e imprime lo correcto:

123
Carlos Dayan Rodriguez Perez
Administrador

Pero si ingreso cualquiera de los otros 2 no se imprime nada… 🙁

Por favor ayuda, ya no se que hacer xd

solución

Muy buenas Carlos,
como bien comenta Raul, el problema es que debes usar un primer bucle para encontrar la clave(si existe), y una vez encontrada entonces ya puedes utilizar el bucle que tienes para imprimir por consola la información.

Te dejo un ejemplo de la Opcion 3 funcionando usando dos bucles do-while:

   if (Op == 3)
    {
        string Linea;
        int contador = 0;
        string result_s;
        Console.Clear();
        Leer = new StreamReader("Archivo_Agenda.txt", true);
        Console.WriteLine("Buscar registro por medio de clave DUI:nn");
        Console.Write("Ingresa la clave DUI: ");
        result_s = Console.ReadLine();
        do
        {
            Linea = Leer.ReadLine();
        } while (Linea != result_s && Linea!= null);

        if ((Linea == result_s))
        {
            do
            {
                Console.WriteLine(Linea);
                Linea = Leer.ReadLine();

            } while (Linea !=" ");
        }
        Leer.Close();

        Console.WriteLine("nEl registro se mostro exitosamente.nn5) Regresar al menu principaln");
        Console.Write("nTu opcion: ");
        op_1 = int.Parse(Console.ReadLine());
    }
Respondido por: Anonymous

Leave a Reply

Your email address will not be published. Required fields are marked *