c# - 逐行分析,如果符合条件则存储,否则忽略

标签 c# filter streamreader

我在这方面进行了很多研究,但没有找到我一直在寻找的东西。

输入:多行(数百,偶尔数千)行 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/

相关文章:

c# - 长时间运行的 ASP.NET MVC 核心 Controller HTTPPost 方法超时

c# - UWP 关闭信息亭模式

c# - 文本文件中的 I-V 数据解析

android - 在 Android Studio 中加载一个简单的文本文件

c# - 用于代码对齐的 Visual Studio 扩展

c# - 在 MVC 3 C# 中将日期时间更改为日期

javascript - jquery根据特定位置的特定字符过滤值

java - 在另一个方法的参数输入中声明一个方法?

c++ - FFmpeg Windows directshow 过滤器

c# - 如何从目录 c# 中读取所有文件?