【问题标题】:Filtering a List/.Txt file过滤列表/.Txt 文件
【发布时间】:2017-02-11 03:21:46
【问题描述】:

我目前正在处理一个项目,我必须加载并过滤一个 txt 文件,并将过滤后的 txt 保存到一个列表中。目前,我的过滤器正在工作,但它们没有维护 .txt 文件的顺序。

我理解为什么会发生这种情况,因为 try 块一个接一个地运行,但我想知道是否有一种方法可以使我的代码更高效并使其保存所需的行以便它们被阅读。

我认为将模式变量保存在一个变量中可能会更好,但是,我不确定它们应该如何格式化,因为当我尝试组合两个字符串时,Regax.Match 不起作用。

using System;
using System.Collections.Generic;
using System.IO;
using System.Text.RegularExpressions;

namespace program
{
 internal class Program
{
  private static void Main(string[] args)
  {
     var inputFile = File.ReadAllText(@"C:\olive.txt");

     Filter(inputFile);
  }

  public static void Filter(string fileToBeFiltered)
  {
     var sendList = new List<string>();
     Match m;
     var sendPattern = @"(SEND.+)";
     var getPattern = @"(GET.+)"; //+ "(SEND.+)";


     try
     {
        m = Regex.Match(fileToBeFiltered, getPattern);
        while (m.Success)
        {
           var add = m.Groups[1].ToString();
           sendList.Add(add);
           m = m.NextMatch();
        }
     }
     catch (RegexMatchTimeoutException)
     {
        Console.WriteLine("The matching operation timed out.");
     }

     try
     {
        m = Regex.Match(fileToBeFiltered, sendPattern);
        while (m.Success)
        {
           var add = m.Groups[1].ToString();
           sendList.Add(add);
           m = m.NextMatch();
        }
     }
     catch (RegexMatchTimeoutException)
     {
        Console.WriteLine("The matching operation timed out.");
     }


     foreach (var value in sendList)
        Console.WriteLine(value);
     Console.WriteLine();
  }
 }
}

【问题讨论】:

标签: c# list filter


【解决方案1】:

正如您所说,您的输出没有排序,因为您分别搜索发送模式和获取模式。将您的模式更改为:

var pattern = @"((SEND.+)|(GET.+))";

现在留下一个循环,匹配发送或获取模式的段将按文件顺序添加到列表中。

编辑:添加了另一对括号。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-06-15
    • 2015-12-02
    • 1970-01-01
    • 2022-03-06
    • 1970-01-01
    • 2020-07-31
    相关资源
    最近更新 更多