C#使用文本文件

Tho*_*mas 1 c# console-application text-files visual-studio

几个小时以来,我一直在研究这个问题,我正在研究我正在研究的最后一部分.我需要弄清楚如何限制循环从文本行中定义的范围中获取值.像1-5行,然后6-10等

TextReader tr = new StreamReader("values.txt");
        for (int i = 0; i <= 5; i++)
        {
            for (int a = 0; a <= 5; a++)
            {
                line = tr.ReadLine();
                **while ((line = tr.ReadLine()) != null)**
                    for (a = 0; a <= 5; a++){
                        ln = tr.ReadLine();
                        if (ln != null){
                            value = int.Parse(ln);
                            if (value > max)
                                max = value;
                            if (value < min)
                                min = value;}
                    }
                Console.WriteLine(tr.ReadLine());
                if (i % 5 == 0)
                    Console.WriteLine("The max is" + max);
                if (i % 5 == 0)
                    Console.WriteLine("The min is" + min);
                if (i % 5 == 0)
                    Console.WriteLine("-----First 5");
            }
Run Code Online (Sandbox Code Playgroud)

我已经准备好去睡觉但不想睡不着觉.任何正确的推动都将受到赞赏.

Jam*_*iec 5

您可以使用LINQ的SkipdocsTakedocs方法轻松实现此目的.只需使用File.ReadAllLines文档阅读您的文本,然后根据需要跳过并采取:

var lines = File.ReadAllLines("values.txt").Skip(5).Take(5);
//lines now has lines 6-10
Run Code Online (Sandbox Code Playgroud)

如果您多次这样做,我建议将其拆分为文件访问权限和linq:

var allLines = File.ReadAllLines("values.txt")
var lines6To10 = allLines.Skip(5).Take(5);

... // Later on 

var lines21To25 = allLines.Skip(20).Take(5)
Run Code Online (Sandbox Code Playgroud)

至于你的其余代码..看起来你正试图从行中找到min/max,它应该只包含整数.

var min = int.MaxValue;
var max = int.MinValue;
foreach(var line in lines)
{
   var value = int.Parse(line);
   if(value > max)
      max = value;
   if(value < min)
      min = value;
}
Run Code Online (Sandbox Code Playgroud)

这可以在行示例中看到:http://rextester.com/rundotnet?code = SHP19181(注意加载数字的不同方式,因为rextester无法从文件加载.但原理是相同的)