我在这方面进行了很多研究,但没有找到我一直在寻找的东西。
输入:多行(数百,偶尔数千)行 ASCII 文本,长度从 97 个字符到 500 多个字符不等。我是否要保留此数据的标准完全包含在前 3 个字符中 (总是数字——我感兴趣的是任意值 100,200 和 300)。
需要输出的只是100、200、300开头的,其他的可以忽略。
这是我的流阅读器,目前输出到控制台:
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();
}
}
}
}
我希望在一行中写上
IF {
FIRST3CHAR != (100,200,300) }
then skip,
但我不确定如何定义 FIRST3CHAR 类。这是对原始数据进行的唯一过滤。
之后,我会根据其中包含的其他标准分析这个过滤后的数据集,但在寻求任何帮助之前,我会自己试一试。
最佳答案
这段代码更具可读性并且可以做你想做的事情:
var allowedNumbers = new[]{ "100", "200", "300" };
IEnumerable<String> lines = File
.ReadLines("File.dat")
.Where(l => allowedNumbers.Any(num => l.StartsWith(num)));
现在您可以使用 foreach
枚举行:
foreach(string line in lines)
{
Console.WriteLine(line); // Write to console.
}
因为您想将这些行添加到 List<string>
无论如何,你可以使用 Enumerable.ToList
而不是 foreach
:
List<string> list = lines.ToList();
关于c# - 逐行分析,如果符合条件则存储,否则忽略,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13623651/