Cyl*_*len 2 c# filter streamreader
我已经在这个上挖了很多东西而且找不到我正在寻找的东西.
INPUT:多行(数百,偶尔数千)ASCII文本行,范围从97个字符到500个以上.我是否要保留此数据的标准纯粹包含在前3个字符中(总是数字 - 任意值100,200和300是我感兴趣的).
所需的输出只是那些以100,200或300开头的输出,其余我可以忽略.
这就是我的streamreader,它目前输出到控制台:
using System;
using System.Collections.Generic;
using System.IO;
class Program
{
public void Do
{
// Read in a file line-by-line, and store in a List.
List<string> list = new List<string>();
using (StreamReader reader = new StreamReader("File.dat"))
{
string line;
while ((line = reader.ReadLine()) != null)
{
list.Add(line); // Add to list.
Console.WriteLine(line); // Write to console.
// Console.ReadLine();
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
我希望能说出一句话
IF {
FIRST3CHAR != (100,200,300) }
then skip,
Run Code Online (Sandbox Code Playgroud)
但我不确定如何定义FIRST3CHAR类.这是将对原始数据执行的唯一过滤器.
接下来,我将根据其中包含的其他标准分析这个过滤后的数据集,但在请求任何帮助之前,我会自己给出一个镜头.
此代码更具可读性,可以满足您的需求:
var allowedNumbers = new[]{ "100", "200", "300" };
IEnumerable<String> lines = File
.ReadLines("File.dat")
.Where(l => allowedNumbers.Any(num => l.StartsWith(num)));
Run Code Online (Sandbox Code Playgroud)
现在你可以枚举这些行,例如foreach
:
foreach(string line in lines)
{
Console.WriteLine(line); // Write to console.
}
Run Code Online (Sandbox Code Playgroud)
由于您想要将这些行添加到List<string>
任何方面,您可以使用Enumerable.ToList
而不是foreach
:
List<string> list = lines.ToList();
Run Code Online (Sandbox Code Playgroud)