none
¿Alguna forma de hacer un While mas sencilla? (leer linea de un text box especifica (y alguna pregunta mas)) RRS feed

  • Pregunta

  • Hola a todos, tengo este proyecto donde uso un While para leer cada linea diferente de un txt. El problema es que el código se me esta haciendo BASTANTE complicado de entender y quería saber si esta forma que estoy usando es la única o hay alguna otra mas eficiente y corta.

            void readFile()
            {
                StreamReader archivo = File.OpenText(@" C:\Users\anybody\Documents\info.txt");
                string name = null;
                string lastname = null;
                string age = null;
                string term = null;
                string sexM = null;
                string sexF = null;
                string sexO = null;
                int i = 0;
                while (!archivo.EndOfStream)
                {
                    name = archivo.ReadLine();
                    if (++i == 1) break;
                }
                while (!archivo.EndOfStream)
                {
                    lastname = archivo.ReadLine();
                    if (++i == 2) break;
                }
                while (!archivo.EndOfStream)
                {
                    age = archivo.ReadLine();
                    if (++i == 3) break;
                }
                while (!archivo.EndOfStream)
                {
                    term = archivo.ReadLine();
                    if (++i == 4) break;
                }
                while (!archivo.EndOfStream)
                {
                    sexM = archivo.ReadLine();
                    if (++i == 5) break;
                }
                while (!archivo.EndOfStream)
                {
                    sexF = archivo.ReadLine();
                    if (++i == 6) break;
                }
                while (!archivo.EndOfStream)
                {
                    sexO = archivo.ReadLine();
                    if (++i == 7) break;
                }
                archivo.Close();
                tbName.Text = encryp.Decrypt1(name,key,true);
                tbLastName.Text = encryp.Decrypt1(lastname, key, true);
                string agedes = encryp.Decrypt1(age, key, true);
                trackBar1.Value = Convert.ToInt32(agedes);
                ageN.Text = trackBar1.Value.ToString();
                
                if(encryp.Decrypt1(term, key, true) == "True")
                {
                    cbTerm.Checked = true;
                }
                else
                {
                    cbTerm.Checked = false;
                }
    
                if(encryp.Decrypt1(sexM, key, true) == "True")
                {
                    rbMale.Checked = true;
                }
                else if(encryp.Decrypt1(sexF, key, true) == "True")
                {
                    rbFmale.Checked = true;
                }
                else if (encryp.Decrypt1(sexO, key, true) == "True")
                {
                    rbOther.Checked = true;
                }
                else
                {
                    rbMale.Checked = false;
                    rbFmale.Checked = false;
                    rbOther.Checked = false;
    
                }
    }

    *nota: El archivo que estoy guardando tiene cada linea de texto Encriptado (cifrado), para que la información del txt no sea legible por cualquiera que lo abra. También cree mi propia extensión de archivo (.anaized) tratando de impedir que pueda ser abierto desde el bloc de notas, pero aun así puede ser abierto y modificado su interior. ¿alguna ayuda adicional para evitar la vista y/o edición del archivo desde un bloc de notas?


    Isaac Martinez

    sábado, 1 de febrero de 2020 20:45

Todas las respuestas

  • hola

    Porque usas un while si despues solo asignas una variable, en cada loop pisas el anterior

    >>uso un While para leer cada linea diferente de un txt.

    como esta dispuesta la informacion del archivo

    cada linea es un dato o en una linea tienes todos los datos separados por algun caracter al estilo de un archivo .csv

    saludos


    Leandro Tuttini

    Blog
    MVP Profile
    Buenos Aires
    Argentina

    sábado, 1 de febrero de 2020 21:45
  • Buenas Leandro, cada linea contiene una información especifica. Por ejemplo, en la primera linea estoy guardando el nombre, en la segunda el apellido, etc. Así cuando quiero saber el nombre que se encuentra en la linea 1 le digo a mi while que if(++i==1) se detenga y lea la linea 1...

               while (!archivo.EndOfStream)
                {
                    name = archivo.ReadLine();
                    if (++i == 1) break; //++i==1 o ++i==96
                }

    al igual si fuera la linea 20 o 56... pero copiar y pegar esto una y otra vez hace el código muy difícil de entender.

    Luego que leo todas mis lineas y almaceno el valor en una variable, la desencripto y paso a mostrar su información. 


    Isaac Martinez


    • Editado Isaac0513 sábado, 1 de febrero de 2020 23:20
    sábado, 1 de febrero de 2020 23:16
  • Jajajajja. Muchas gracias Domingo por su respuesta. Pero en realidad no se como  hacer eso, podría darme un pequeño ejemplo de como acceder a una linea especifica y almacenarla en una variable.

    Por favor, y gracias por su respuesta.


    Isaac Martinez

    sábado, 1 de febrero de 2020 23:38
  • hola

    >>cada linea contiene una información especifica.

    porque lo definiste de esa forma, no es practica

    Deberias definir los datos en una misma linea separada por algun caracter, como ser

    nombre;apellido;edad;domicilio

    y asi el resto, puedes usar el punto y coma u otro caracter

    Asi en un archivo puedes poner datos de varias personas y cada linea seria un registro, como si fuera una base de datos, cada dato de la linea separado por punto y coma seria una columna con su dato

    >>pero copiar y pegar esto una y otra vez hace el código muy difícil de entender

    eso sucede porque le archivo esta mal definido, la liena deberia representar a la persona no a cada dato

    Entonces podrias crear una entidad como ser

    public class Persona{
    
       public string nombre{get;set;}
       public string apellido {get;set;}
    
       //resto
    
    }

    Para suar un List<Persona> asi iteras las lineas de cada dato y cortas cada campo poniendo las propiedades

    saludos


    Leandro Tuttini

    Blog
    MVP Profile
    Buenos Aires
    Argentina


    domingo, 2 de febrero de 2020 12:24