我目前正在开发一个项目,我必须加载并过滤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();
}
}
}
答案 0 :(得分:0)
如您所述,您的输出未订购,因为您分别搜索发送模式和获取模式。将您的模式更改为:
var pattern = @"((SEND.+)|(GET.+))";
现在留下一个循环,与发送或获取模式匹配的段将按文件的顺序添加到列表中。
编辑:添加了另一对括号。