Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/19.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# Regex-如何从日志文件中获取同一行中的不同字符串?_C#_Regex_Text Files - Fatal编程技术网

C# Regex-如何从日志文件中获取同一行中的不同字符串?

C# Regex-如何从日志文件中获取同一行中的不同字符串?,c#,regex,text-files,C#,Regex,Text Files,我正在寻找一些帮助,从文本文件中获取特定字符串。 文本文件中有一些特定的单词,我正在使用它们来获取我想要的结果 以下是日志示例: TLWin会话数据日志-TaskLink 7.90版记录日期: 2014年9月29日02:17:45下午任务名称:XXXXXX\U A06\U U1用户ID: 管理员模式系统:PP/PS系列FlashCORE机器ID: 123456789设备:WINBOND_ELECTRONICS W25Q64FV-SS-Q SO8数据 来源:c:\xptox\u projects\

我正在寻找一些帮助,从文本文件中获取特定字符串。 文本文件中有一些特定的单词,我正在使用它们来获取我想要的结果

以下是日志示例:

TLWin会话数据日志-TaskLink 7.90版记录日期: 2014年9月29日02:17:45下午任务名称:XXXXXX\U A06\U U1用户ID: 管理员模式系统:PP/PS系列FlashCORE机器ID: 123456789设备:WINBOND_ELECTRONICS W25Q64FV-SS-Q SO8数据 来源:c:\xptox\u projects\xxxxx\xxxxxxxx(8mb)。bin Sumcheck: 12345678流程:连续性/空白检查/ID 检查/擦除/编程/验证/标记/视觉过程状态:作业开始 状态:新作业,作业结束状态:已停止TLWin会话ID:
工作开始时间:2014年9月29日上午10:23:37工作结束时间:2014年9月29日 下午2:17:45设备总数:1105台已通过设备:1104台 失败:1总体设备产量:99.91%任务描述: W25Q64FVS标称吞吐量:666 dph作业吞吐量:290 dph 拾取的设备输入:1110个设备失败视觉:0个设备失败 剩余:0台设备丢失/正在使用:5作业运行时间:3小时0 分54秒作业设置时间:0小时0分5秒作业 处理时间:1小时0分40秒作业协助时间:2 小时0分8秒作业关闭时间:0小时0分0 秒算法:3605410C.ELF算法状态:Beta算法 作者:数据I/O Alg COM Dll:<未使用>Alg COM Dll版本:< 未使用>TaskLink版本:7.90 AH500版本:6.5.0固件 版本:05.52.00.C序列化程序:<未使用> 序列化程序版本:<未使用>输入媒体:磁带输出 介质:磁带拒绝1:纸盘1拒绝2:不适用启动序列 编号:不适用结束序列号:不适用未使用序列号:不适用。 类别:通行证、CF、NB、IB、PF、VF1、VF2、FT1、FT2、SFF、SFB、DO、EF、EID、OE TotalStats:1104,1,0,0,0,1,0,0,0,0,0,0,0, 0站点1 Skt 1:0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0站点1 Skt 2:0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0站点1 Skt 3:0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0站点1 Skt 4:0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0站点2 Skt 1:0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0站点2 Skt 2:0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0站点2 Skt 3:0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0站点2 Skt 4:0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0站点3 Skt 1:139,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0站点3 Skt 2:139,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0站点3 Skt 3:138,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0站点3 Skt 4:135,1, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0站点4 Skt 1:141, 0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0站点4 Skt 2: 138,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0站点4 Skt 3:137,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 站点4 Skt 4:137,0,0,0,0,0,0,0,0,0,0,0,0,0

0, 0 以下是我需要收集并存储在某处的指定数据:

Date Logged:  09-29-2014
Task Name:  XXXXXX_A06_U1
Machine ID: 123456789
Device: WINBOND_ELECTRONICS W25Q64FV-SS-Q SO8
Devices Total: 1105
Devices Passed: 1104
Devices Failed: 1
Overall Device Yield: 99.91%
Nominal Throughput: 666
Job Throughput: 290
Devices Picked Input: 1110
Devices Failed Vision: 0
Devices Failed REST: 0
我要存储的结果在“:”之后。结果将通过SQL过程发送到DB(下一步)

代码如下:

foreach (string file in Directory.EnumerateFiles(ConfigurationManager.AppSettings["Path"], "*.log"))
            {

                Regex found = new Regex(@"Date\sLogged\s*:\s*([\d\-]+).*\nTask\sName\s*:\s*(.+)[\n]|.*Machine\sID\s*:\s*(\d+)[\n]|.*Device\s*:\s*(.+)");
                string fileText = File.ReadAllText(file);
                string fileTextReplacement = Regex.Replace(fileText, @"\t|\n|\r"," ");

                if (!string.IsNullOrEmpty(fileText))
                {

                    if (found.Match(fileText).Success)
                    {

                        DateTime dtLogged = Convert.ToDateTime(found.Match(fileText).Groups[1].Value);
                        string taskName = found.Match(fileText).Groups[2].Value;
                        string machineId = found.Match(fileText).Groups[3].Value;
                        string icDevice = found.Match(fileText).Groups[4].Value;
                        int deviceTotal = Convert.ToInt32(found.Match(fileText).Groups[5].Value);
                        int devicePassed = Convert.ToInt32(found.Match(fileText).Groups[6].Value);

                    }

                }
任何帮助都将不胜感激!
谢谢。

您需要的图案基本上是

(<start>)(.*)(?=<finish>)|(<start>)(.*)(?=<finish>) ... ect...

唯一需要注意的是,它需要所有日志描述符(并按顺序)。如果不是这样的话,那么您必须修改它来搜索每一个永远的开始,每一个可能的结束,并将其放入一个循环中。这应该不会太难

(Date Logged:)(.*?)(?=(Task Name:|User ID:|System:|ect...))

这些是分开的吗?还是像我们在你的帖子中看到的那样混乱?这些信息就像我的帖子(有点混乱)。这是字符串“fileTextReplacement”的结果@MichaelRandallIs是否始终按此顺序?是的,顺序与上面相同,不会因文件日志模板而更改:)谢谢兄弟!很好!
(Date Logged:)(.*?)(?=(Task Name:|User ID:|System:|ect...))