文本文件只读取奇数或偶数行

本文关键字:文件 读取 文本 | 更新日期: 2023-09-27 18:16:50

我试着写一个小的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();
        }
    }
}

任何想法?

文本文件只读取奇数或偶数行

我建议使用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]);
         }
    }

您的代码没有这样的问题。您可能会遇到的情况是,在循环的末尾有一个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");
      }
    }
  }
}