读取文本文件跳过一堆行然后继续其他行

Reading textfile skipping bunch of lines then proceeding to other lines

我想跳过我将在文本文件中读取的行,正如您在第 0 行、第 1 行和第 2 行下方看到的那样(文本文件的前三行),然后是阅读此内容( 3 读这个)接下来是(4 跳过这个)

这是模式:

(跳过文本文件的前 3 行,然后是 (3) 然后读这个 (4) 跳过 这直到文本文件的末尾)冲洗并重复其他文本文件,我需要这种模式的帮助。

Line 0 - Skip This
Line 1 - Skip This
Line 2 - Skip This
Line 3 - Read This
Line 4 - Read This
Line 5 - Read This
Line 6 - Skip This
Line 7 - Skip This
Line 8 - Skip This
Line 9 - Skip This
Line 10 - Read This
Line 11 - Read This
Line 12- Read This
Line 13 - Skip This
Line 14 - Skip This
Line 15- Skip This
Line 16- Skip This
Line 17 - Read This and so on

我试过的代码。

string[] Lines = File.ReadAllLines(f.File);
foreach (string line in Lines.Skip(3))
{
   try
   {
      string[] readLineSplit = line.Split('|');

      if (readLineSplit.Length > 1)
      {
         var id = readLineSplit[0].ToString();
         var flagvalue = readLineSplit[1].ToString();
         var status = readLineSplit[2].ToString();
         Lines.Skip(4).ToString();
         Console.WriteLine("ID {0}, Value {1}, Status {2}", id, flagvalue, status)
      }    
   }
   catch (FileNotFoundException error)
   {   
      Console.WriteLine(error);
   }
}

与其读取所有行然后尝试提取您需要的行,不如只读取您需要的行而不将不需要的行存储在内存中:

var lines = new List<string>();
var counter = 0;
using (var sr = new StreamReader(filename)) {
    string line;
    while ((line = sr.ReadLine()) != null) {
        //ignore the first 3 lines
        if (counter >= 3) {
            //now work out where in the pattern of 7 (3 read, 4 skip) we are
            var mod = (counter - 3) % 7;
            //if the first 3 of the 7, keep it
            if (mod < 3)
                lines.Add(line);
        }
        counter++;
    }
}

这有帮助吗?

string[] Lines = File.ReadAllLines(f.File);
for (int i = 3; i < Lines.Length-3; i += 7)
{
  for (int j = 0; j < 3; j++)
  {
    string[] readLineSplit = Line [i+j].Split('|');
    etc..
  }
}

你最好使用流 reader,但对于 Linq,Skip/Take 回答尝试

        List<string> lines = Enumerable.Range(0, 100).Select(i => i.ToString()).ToList();

        IEnumerable<string> group;
        int c = 0;
        do
        {
            group = lines.Skip(3+7*c).Take(3);
            foreach (var s in group)
            {
                Console.WriteLine(s);
            }
            c++;
        } while (group.Count() == 3);

这将是一个简短的 LINQ 解决方案:

var result = Lines.Skip(3).Where((val,idx)=>idx%7<3).Select((x)=>x);

Lines 可以是文件所有行的数组,或者只是 File.ReadLines(filename).