Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/url/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 使用正则表达式从许多文件中获取特定数据_C#_Regex - Fatal编程技术网

C# 使用正则表达式从许多文件中获取特定数据

C# 使用正则表达式从许多文件中获取特定数据,c#,regex,C#,Regex,为了从原始数据(有史以来都很奇怪的日志文件)中获取特定数据,我面临一些问题。 基本上,我需要获得SerialNumber+测量结果,如下所示: 输出文件:results.txt 文件内容:123456789124,1.521978E-04(100多个文件的结果相同) 此时,我可以获取序列号,但我在获取测量结果时遇到了一些问题。这是我的密码: static void Main(string[] args) { Regex regex = new Regex(@"(?<

为了从原始数据(有史以来都很奇怪的日志文件)中获取特定数据,我面临一些问题。 基本上,我需要获得SerialNumber+测量结果,如下所示:

输出文件:results.txt 文件内容:123456789124,1.521978E-04(100多个文件的结果相同)

此时,我可以获取序列号,但我在获取测量结果时遇到了一些问题。这是我的密码:

static void Main(string[] args)
    {
        Regex regex = new Regex(@"(?<={@BTEST\|)(.*?)(?=\|)");

        string LogPath = @"C:\Data\FailedLogs";

        var LogDBSNResult = @"C:\results1.txt";


        List<string> fileNames = new List<string>(Directory.GetFiles(LogPath));
        List<string> dbSerialNumbers = new List<string>();

        using (System.IO.StreamWriter file = new System.IO.StreamWriter(LogDBSNResult))
        {
            foreach (var filename in fileNames)
            {
                string fileContent = File.ReadAllText(filename);

                if (regex.IsMatch(fileContent))
                {
                    var result = regex.Match(fileContent).ToString();

                    // Adding the results in the list
                    dbSerialNumbers.Add(result);
                    Console.WriteLine("Found: " + result);
                    file.WriteLine(result);
                }
            }

            //List<string> removeDuplicated = dbSerialNumbers.Distinct().ToList();
            //foreach (var value in removeDuplicated)
            //{
            //    file.WriteLine(value);
            //}

        }     
    }
static void Main(字符串[]args)
{

Regex Regex=new Regex(@“(?我建议您将搜索、提取序列的模式和提取测量结果的其他模式分开。尝试一下:

string patSerial = @"(?<={@BTEST\|)(.*?)(?=\|)";
string patMeasur = @"(?<={@A-CAP\|\d\|.)(.*?)(?=\{)";
string LogPath = @"C:\Data\FailedLogs";
string LogDBSNResult = @"C:\results1.txt";

using (StreamWriter log = new StreamWriter(LogDBSNResult))
{
    foreach(string fileName in Directory.GetFiles(LogPath))
    {
        string fileContent = File.ReadAllText(fileName);

        if (Regex.IsMatch(fileContent, patSerial) && Regex.IsMatch(fileContent, patMeasur))
        {
            string serial = Regex.Match(fileContent, patSerial).Value;
            string measurement = Regex.Match(fileContent, patMeasur).Value;

            log.WriteLine($"{serial}, {measurement}");
        }
    }
}

string patSerial=@”(?示例数据是当前代码的结果,还是您希望从中获取的源文件
12345678124
1.521978E
?预期结果是什么?Hi@Thefourthbird-日志文件具有@{RPT contents这是收入数据,预期结果将是一个txt文件,包含:12345678124,1.521978E-04(每个结果一个文件)。谢谢!问题中给出的所需输出不包括
+
,但如果测量值为负值…谢谢!工作正常!非常欢迎。祝你好运。
string patSerial = @"(?<={@BTEST\|)(.*?)(?=\|)";
string patMeasur = @"(?<={@A-CAP\|\d\|.)(.*?)(?=\{)";
string LogPath = @"C:\Data\FailedLogs";
string LogDBSNResult = @"C:\results1.txt";

using (StreamWriter log = new StreamWriter(LogDBSNResult))
{
    foreach(string fileName in Directory.GetFiles(LogPath))
    {
        string fileContent = File.ReadAllText(fileName);

        if (Regex.IsMatch(fileContent, patSerial) && Regex.IsMatch(fileContent, patMeasur))
        {
            string serial = Regex.Match(fileContent, patSerial).Value;
            string measurement = Regex.Match(fileContent, patMeasur).Value;

            log.WriteLine($"{serial}, {measurement}");
        }
    }
}