c#处理文本文件

本文关键字:文件 文本 处理 | 更新日期: 2023-09-27 18:10:54

我已经做了几个小时了,我已经完成了最后一项工作。我需要弄清楚如何限制循环从文本行上定义的范围获取值。比如第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");
            }

我准备睡觉了,但不想被打败。

c#处理文本文件

您可以使用LINQ的Skip docsTake docs方法轻松实现这一点。只需使用File.ReadAllLines docs阅读文本,然后根据需要跳过并采取:

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

如果您多次执行此操作,我建议将其拆分为文件访问和linq:

var allLines = File.ReadAllLines("values.txt")
var lines6To10 = allLines.Skip(5).Take(5);
... // Later on 
var lines21To25 = allLines.Skip(20).Take(5)

至于其余的代码…看起来您正在尝试从行中找到最小/最大,它应该只包含整数。

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;
}

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

如果您想使用StreamReader(例如,因为文件大小预计很大),您可以这样做:

using (TextReader tr = new StreamReader("values.txt"))
{
    string currentLine = null;
    do
    {
        Console.WriteLine("processing set of 5 lines");
        for (int i = 0; i < 5; i++)
        {
            currentLine = tr.ReadLine();
            if (currentLine == null)
            {
                break;
            }
            Console.WriteLine("processing line {0} of 5", i);
            // your code goes here:
        }
    } while (currentLine != null);
}

编辑:并且您应该在using block(代码更新)中使用您的StreamReader。