не будет прочитана первая строка C#

#file

#файл

Вопрос:

У меня проблема с read(){} функцией C #. Когда я открываю и читаю свой документ, он не читает первую строку:

   private static void read(string file, Konteineris butas)
    {
        using (StreamReader reader = new StreamReader(@file))
        {
            string line;
            line = reader.ReadLine();
            while (null != (line = reader.ReadLine()))
            {
                string[] values = line.Split(';');
                int nr = Convert.ToInt16(values[0]);
                double plotas = Convert.ToDouble(values[1]);
                int kambariusk = Convert.ToInt16(values[2]);
                int kaina = Convert.ToInt32(values[3]);
                string tnr = values[4];
                Apartaments apart = new Butas(nr,plotas,kambariusk,kaina,tnr); // array of apartaments

                apartaments.addapartament(apart); 

            }
        }
    }
  

текстовый файл:

 1;25,4;1;25000;867467212 // skips this line...
2;26,4;2;100000;867467212
3;75,4;3;2100;867467212
4;65,4;4;15000;867467212
  

Ответ №1:

Удалите первый вызов line = reader.ReadLine(); , который вы вызываете ReadLine() вашего цикла, поэтому он вам там не нужен.

Ответ №2:

Поскольку вы выполняете строку = reader.ReadLine(); затем выполняете тот же код в цикле while, к тому времени, когда он попадает на первую итерацию цикла, он уже дважды выполняет .ReadLine() , таким образом, находится во второй строке файла.

Удалите строку = reader.ReadLine(); из кода и повторите попытку.

Ответ №3:

  private static void read(string file, Konteineris butas)
{
    using (StreamReader reader = new StreamReader(@file))
    {
        string line;
  

строка = reader.ReadLine();

         while (null != (line = reader.ReadLine()))
        {
            string[] values = line.Split(';');
            int nr = Convert.ToInt16(values[0]);
            double plotas = Convert.ToDouble(values[1]);
            int kambariusk = Convert.ToInt16(values[2]);
            int kaina = Convert.ToInt32(values[3]);
            string tnr = values[4];
            Apartaments apart = new Apartaments(nr,plotas,kambariusk,kaina,tnr); // array of apartaments

            apartaments.addapartament(apart); 

        }
    }
}
  

удалите это. поскольку ваше условие while уже делает это, и вы перейдете к первой строке на основе этого вызова.
line = reader.ReadLine(); выдает вам новую строку каждый раз, когда вы ее вызываете.
Итак, в вашем состоянии while вы получаете вторую строку, не используя первую.

способ1:

   private static void read(string file, Konteineris butas)
{
    using (StreamReader reader = new StreamReader(@file))
    {
        string line;
        while (null != (line = reader.ReadLine()))
        {
            string[] values = line.Split(';');
            int nr = Convert.ToInt16(values[0]);
            double plotas = Convert.ToDouble(values[1]);
            int kambariusk = Convert.ToInt16(values[2]);
            int kaina = Convert.ToInt32(values[3]);
            string tnr = values[4];
            Apartaments apart = new Apartaments(nr,plotas,kambariusk,kaina,tnr); // array of apartaments

            apartaments.addapartament(apart); 

        }
    }
}
  

способ2:

   private static void read(string file, Konteineris butas)
{
    using (StreamReader reader = new StreamReader(@file))
    {
        string line;

        while (line!=null)
        { 
            line = reader.ReadLine();
            string[] values = line.Split(';');
            int nr = Convert.ToInt16(values[0]);
            double plotas = Convert.ToDouble(values[1]);
            int kambariusk = Convert.ToInt16(values[2]);
            int kaina = Convert.ToInt32(values[3]);
            string tnr = values[4];
            Apartaments apart = new Apartaments(nr,plotas,kambariusk,kaina,tnr); // array of apartaments

            apartaments.addapartament(apart); 

        }
    }
}
  

Комментарии:

1. woops да, я исправил это 😉