Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/linq/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 读取文本文件跳过一堆行,然后继续读取其他行_C#_Linq_Streamreader - Fatal编程技术网

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

C# 读取文本文件跳过一堆行,然后继续读取其他行,c#,linq,streamreader,C#,Linq,Streamreader,我想跳过我将在文本文件中读取的行,正如您在第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 L

我想跳过我将在文本文件中读取的行,正如您在第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++;
    }
}
var行=新列表();
var计数器=0;
使用(var sr=newstreamreader(文件名)){
弦线;
而((line=sr.ReadLine())!=null){
//忽略前3行
如果(计数器>=3){
//现在计算出我们在7(3读,4跳)模式中的位置
var mod=(计数器-3)%7;
//如果是7个中的前3个,保留它
如果(mod<3)
行。添加(行);
}
计数器++;
}
}

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

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++;
    }
}
var行=新列表();
var计数器=0;
使用(var sr=newstreamreader(文件名)){
弦线;
而((line=sr.ReadLine())!=null){
//忽略前3行
如果(计数器>=3){
//现在计算出我们在7(3读,4跳)模式中的位置
var mod=(计数器-3)%7;
//如果是7个中的前3个,保留它
如果(mod<3)
行。添加(行);
}
计数器++;
}
}
这有帮助吗

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..
  }
}
string[]line=File.ReadAllLines(f.File);
对于(int i=3;i
这有帮助吗

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..
  }
}
string[]line=File.ReadAllLines(f.File);
对于(int i=3;i
您最好使用流读取器,但对于Linq,请跳过/接受答案

        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);
List lines=Enumerable.Range(01100)。选择(i=>i.ToString()).ToList();
可数群;
int c=0;
做
{
组=行。跳过(3+7*c)。取(3);
foreach(组中的var s)
{
控制台。写入线(s);
}
C++;
}而(group.Count()==3);

您最好使用流读取器,但对于Linq,请跳过/接受答案

        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);
List lines=Enumerable.Range(01100)。选择(i=>i.ToString()).ToList();
可数群;
int c=0;
做
{
组=行。跳过(3+7*c)。取(3);
foreach(组中的var s)
{
控制台。写入线(s);
}
C++;
}而(group.Count()==3);

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

var result = Lines.Skip(3).Where((val,idx)=>idx%7<3).Select((x)=>x);
var result=行。跳过(3)。其中((val,idx)=>idx%7x);

可以是文件中所有行的数组,也可以是简单的
文件。ReadLines(filename)

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

var result = Lines.Skip(3).Where((val,idx)=>idx%7<3).Select((x)=>x);
var result=行。跳过(3)。其中((val,idx)=>idx%7x);


可以是文件中所有行的数组,也可以是简单的
file.ReadLines(filename)

您的问题是什么?您给我们的只是一个问题。我想知道如何使用linq或streamreader做到这一点。您已经将
streamreader
类标识为要使用的类。看看它的方法,你会立即看到一个适用于你的情况。这表明你做了一些努力。到目前为止,这只是“我需要做点什么,告诉我怎么做。”这不是一个个人代码编写服务。我会更新我的帖子,我已经尝试过了,很抱歉忘记了。你的问题是什么?您给我们的只是一个问题。我想知道如何使用linq或streamreader做到这一点。您已经将
streamreader
类标识为要使用的类。看看它的方法,你会立即看到一个适用于你的情况。这表明你做了一些努力。到目前为止,这只是“我需要做点什么,告诉我怎么做。”这不是一个个人代码编写服务。我会更新我的帖子,更新我已经尝试过的内容,很抱歉忘记了。上面写着1行,退出,不做任何事,因为计数器小于3。没有loop@JamesBarrass谢谢-被内在逻辑挂住了,完全错过了这一点:)你能发布真实的数据吗。我已经解析文本文件40多年了,有很多经验。使用模块技术不是很可靠,尤其是当代码有空行和页面提要时。@jdweng OP特别提到“行”-如果有更大的需求,他应该发布它,但要记住,如果需求太大,问题可能会变得太宽。@jdweng是的,可能有-但这个问题是关于读取和跳过行的,而不是需要解析的行的解析。它读取1行并退出,因为计数器小于3,所以什么都不做。没有loop@JamesBarrass谢谢-被内在逻辑挂住了,完全错过了这一点:)你能发布真实的数据吗。我已经解析文本文件40多年了,有很多经验。使用模块技术不是很可靠,尤其是当代码有空行和页面提要时。@jdweng OP特别提到“行”-如果有更大的需求,他应该发布它,但要记住,如果它变得太大,问题很可能就解决了