string lot = "RU644276G01";
var year = "201" + lot.Substring(2, 1);
var folder = @"\\sinsdn38.ap.infineon.com\ArchView\03_Reports\" + year +
@"\" + lot.Substring(3, 2) + @"\" + lot.Substring(0,8) + @"\";
DirectoryInfo di = new DirectoryInfo(folder);
foreach (var fi in di.GetFiles("*.TLT"))
{
var file = fi.FullName;
string line;
using (StreamReader sr = new StreamReader(file))
{
while ((line = sr.ReadLine()) != null)
{
if (line.StartsWith("TEST-END"))
{
timeStampTextBox.Text = line;
}
}
}
这是我目前的代码。
我想从特定行(例如第8行)读取,该行以"Test-End"
开头。但是,第8行包含所有这些
"TEST-END : 2017-01-08 15:51 PROGRAM : TLE8888QK-B2 BAU-NR : 95187193"
但我只想阅读"2017-01-98 15:51"
。
如何更改代码才能获得该代码?目前我正在获取整行,而不是我想要的特定时间戳。
修改的
如何更改代码,使string lot =" "
可以是任意数字,这意味着它不需要是RU644276G01,它可以是用户输入的不同数字。我创建了一个文本框供用户输入数字。
答案 0 :(得分:3)
您提取文本。它似乎很规则,所以正则表达式应该能够提供帮助:
using System;
using System.Text.RegularExpressions;
public class Program
{
public static void Main()
{
var line = "TEST-END : 2017-01-08 15:51 PROGRAM : TLE8888QK-B2 BAU-NR : 95187193";
Regex re = new Regex(@"^(?:TEST-END : )(.*?\d{4}-\d{2}-\d{2} \d{2}:\d{2})");
var match = re.Match(line);
Console.WriteLine(match.Groups[1]);
Console.ReadLine(); // leave console open
}
}
输出:
2017-01-08 15:51 // this is group 1, group 0 is the full capture including TEST-END :
使用此功能在regexr中检查它:https://regexr.com/3l1sf如果您将鼠标悬停在文本上,它将覆盖您的捕获组
正则表达式意味着:
^ start of the string
(?:TEST-END : ) non capturing group, text must be present
( a group
.*? as few (0-n) anythings as possible
\d{4}-\d{2}-\d{2} \d{2}:\d{2} 4 digits-2 digits-2digits 2digits:2digits
) end of group
有关正则表达式的更多信息:
一个正则表达式测试程序(很多,我使用的一个):https://regexr.com/
答案 1 :(得分:0)
您可以使用“:”拆分该行,就像这样
var value = line.split(':');
并得到你的日期。
var date = value[1] + ":" + value[2].Replace("PROGRAM", "");
以上陈述意味着
date = "2017-01-98 15" + ":" + "51"
if (line.StartsWith("TEST-END"))
{
var value = line.split(':');
var date = value[1] + ":" + value[2].Replace("PROGRAM", "");
timeStampTextBox.Text = date;
}
这不是最好的答案,它完全取决于你给出的陈述。
答案 2 :(得分:0)
以下是使用正则表达式的答案。
if (line.StartsWith("TEST-END"))
{
Regex re = new Regex(@"\d{4}-\d{2}-\d{2} \d{2}:\d{2}");
var match = re.Match(line);
if(m.Success)
{
timeStampTextBox.Text = match.Value;
}
}
输出:2017-01-08 15:51
答案 3 :(得分:0)
我终于从最后一行得到了所有三个参数
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Text.RegularExpressions;
namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
Dictionary<string, string> dict = new Dictionary<string, string>();
string pattern = @"(?'name'[^\s]+)\s:\s(?'value'[\w\s\-]*|\d{4}-\d{2}-\d{2}\s\d{2}:\d{2})";
string line = "TEST-END : 2017-01-08 15:51 PROGRAM : TLE8888QK-B2 BAU-NR : 95187193";
MatchCollection matches = Regex.Matches(line, pattern, RegexOptions.RightToLeft);
foreach (Match match in matches)
{
Console.WriteLine("name : '{0}', value : '{1}'", match.Groups["name"].Value, match.Groups["value"].Value);
dict.Add(match.Groups["name"].Value, match.Groups["value"].Value);
}
DateTime date = DateTime.Parse(dict["TEST-END"]);
Console.ReadLine();
}
}
}