Текстовый файл только чтение нечетных или четных строк? - PullRequest
3 голосов
/ 05 декабря 2011

Я пытаюсь написать небольшую программу на C #, которая читает текстовый файл и позволяет выбрать строку для печати. ​​

По какой-то причине он будет печатать только строки 1,3,5 и т. Д.

Если я изменю бит, который говорит int chooseLine = Convert.ToInt32(input);, на int chooseLine = (int)Convert.ToInt64(input);, то он печатает только четные строки (0,2,4,6 и т. Д.).

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.IO;
class Steve
{
    public static int count = 0;
    public static String[] steveTalk;
    public static void Main()
    {
        using (StreamReader r = new StreamReader("Steve.txt"))
        {
            string line;
            while ((line = r.ReadLine()) != null)
            {
                count++;
            }
        }
        using (StreamReader sr = new StreamReader("Steve.txt"))
        {
            int i = 0;
            steveTalk = new String[count];
            String line;
            while ((line = sr.ReadLine()) != null)
            {
                steveTalk[i] = line;
                Console.WriteLine(steveTalk[i]);
                i++;
            }
        }
        while (true)
        {
            string input = Console.ReadLine();
            int chooseLine = Convert.ToInt32(input);
            try
            {
                Console.WriteLine(steveTalk[chooseLine]);
            }
            catch
            {
                Console.WriteLine("Error! Not a number or array index out of bounds");
            }
            Console.ReadLine();
        }
    }
}

Есть идеи?

Ответы [ 2 ]

5 голосов
/ 05 декабря 2011

Я хотел бы предложить метод System.IO.File.ReadAllLines(filename).

string []lines=System.IO.File.ReadAllLines("Steve.txt");

string input ;

while ((input = Console.ReadLine()) != "end")
    {
        int chooseLine;
        int.TryParse(input,out chooseLine);
        if(chooseLine<lines.Length)
         {
           Console.WriteLine(lines[chooseLine]);
         }
    }
2 голосов
/ 05 декабря 2011

Нет такой проблемы с вашим кодом. Возможно, вы столкнулись с тем, что в конце цикла у вас есть Console.ReadLine(), поэтому, если вы введете число, оно отобразит эту строку, а затем введите другое число, и это число будет игнорироваться. Все остальные введенные вами номера будут игнорироваться, что соответствует вашему описанию, если вы только пытались вводить цифры последовательно.

Вот некоторые улучшения в коде.

  • Используйте File.ReadAlLines для чтения файла.
  • Не используйте исключения, если они вам не нужны. Вы можете легко проверить ввод, прежде чем произойдет какое-либо исключение.

Код:

using System;
using System.IO;

class Steve {

  public static void Main() {
    string[] lines = File.ReadAllLines("Steve.txt");
    while (true) {
      int line;
      if (Int32.TryParse(Console.ReadLine(), out line)) {
        if (line >= 0 && line < lines.Length) {
          Console.WriteLine(lines[chooseLine]);
        } else {
          Console.WriteLine("Error! Array index out of bounds");
        }
      } else {
        Console.WriteLine("Error! Not a number");
      }
    }
  }

}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...