使用LINQ来处理文本文件 [英] using LINQ to process a text file

查看:189
本文介绍了使用LINQ来处理文本文件的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

文本文件格式

 
headerinfo =ABC
**第一部分= 001 **
$中element1 b $ b element2的....
...
element15
END_ELEMENT
**第二部分= 002 **
中element1
element2的....
...
emelent15
END_ELEMENT
......
end_header

我要选择从第1部分= 001 启动文本中的所有行,但不包括第二部分= 002



到目前为止,我有:

  VAR解析度=(从File.ReadAllLines线(sExecPath + @\+ sFileName)
其中线==第1部分= 001
选线).ToList();



我想在LINQ选项之间使用,它似乎并不返回任何结果。

  VAR第一部分=(PRT从在File.ReadAllLines(sExecPath + @\+ sFileName)
,其中PRT。的CompareTo(第一部分= 001)> = 0
和;&安培; prt.CompareTo(部分= 002)> = 0
选择PRT);


解决方案

我认为你正在寻找的 TakeWhile

  VAR linesInPartOne =文件
.ReadAllLines(sExecPath + @\+ sFileName)
.SkipWhile(行=>!line.StartsWith(**第1部分=) )
//要跳到第1部分标题行,去掉注释如下:!
//跳过(1)
.TakeWhile(行=> line.StartsWith(**第二部分=));

要推广这个检索任何给定的编号部分,像这样的事:

 公共静态的IEnumerable<串GT; ReadHeaderPart(字符串文件路径,诠释一部分){
返回文件
.ReadAllLines(文件路径)
.SkipWhile(行=>!line.StartsWith(**部分+部分+= ))
//要跳到第1部分标题行,取消以下行:
//跳过(1)
.TakeWhile(行=>
线! StartsWith(**部分+(部分+ 1)+=
和;&安培;!
line.StartsWith(end_header)))
.ToList();
}



编辑:我有一个跳过(1)在那里跳过第1部分头。因为你似乎想保留该行删除它。


Text File Format

headerinfo = "abc"
**part1=001**
element1
element2....
...
element15
end_element
**part2=002**
element1
element2....
...
emelent15
end_element
......
end_header

I want to select all rows of text starting from part1=001 up to but not including part2=002.

So far I have:

var res = (from line in File.ReadAllLines(sExecPath + @"\" + sFileName)
           where line == "part1=001"
           select line).ToList();

I am trying to use between option in linq, it does not seem to return any result.

var part1= (from prt in File.ReadAllLines(sExecPath + @"\" + sFileName)
            where prt.CompareTo("part1=001") >=0  
            && prt.CompareTo("part=002") >= 0
            select prt);

解决方案

I think you are looking for TakeWhile:

var linesInPartOne = File
       .ReadAllLines(sExecPath + @"\" + sFileName)
       .SkipWhile(line => !line.StartsWith("**part1="))
       // To skip to part 1 header line, uncomment the line below:
       // Skip(1)
       .TakeWhile(line => !line.StartsWith("**part2="));

To generalize this to retrieve any given numbered part, something like this would do:

public static IEnumerable<String> ReadHeaderPart(String filePath, int part) {
    return File
        .ReadAllLines(filePath)
        .SkipWhile(line => !line.StartsWith("**part" + part + "="))
        // To skip to part 1 header line, uncomment the line below:
        // Skip(1)
       .TakeWhile(line => 
            !line.StartsWith("**part" + (part + 1) + "=" 
            && 
            !line.StartsWith("end_header")))
       .ToList();
 }

EDIT: I had a Skip(1) in there to skip the part 1 header. Removed it since you seem to want to keep that line.

这篇关于使用LINQ来处理文本文件的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆