C# 读取文本文件并获取日期值行
有没有一种简单的方法可以找到包含日期和时间的行 到目前为止,我可以阅读文本文件,我的下一步是解析它,但在此之前,我想我需要一些指导才能继续。以下是我当前的阅读脚本:C# 读取文本文件并获取日期值行,c#,readfile,C#,Readfile,有没有一种简单的方法可以找到包含日期和时间的行 到目前为止,我可以阅读文本文件,我的下一步是解析它,但在此之前,我想我需要一些指导才能继续。以下是我当前的阅读脚本: List<string> Temp = new List<string>(); string[] filePaths = Directory.GetFiles(@"C:\\Temp\\", "*.txt"); foreach (string files in filePaths) {
List<string> Temp = new List<string>();
string[] filePaths = Directory.GetFiles(@"C:\\Temp\\", "*.txt");
foreach (string files in filePaths)
{
var fileStream = new FileStream(files, FileMode.Open, FileAccess.Read);
using (var streamReader = new StreamReader(fileStream, Encoding.UTF8))
{
Temp.Add(streamReader.ReadToEnd());
}
}
foreach (string i in Temp)
{
if (i.Contains("Events"))
{
Console.WriteLine(i);
}
}
我的目标或预期结果是获得具有datetime值的行:
"10/25/2018 4:59:27 PM" 1 5.5816e-008 1.3141e-008 -1.6109e-010
"10/25/2018 4:59:35 PM" 2 5.5484e-008 1.3403e-008 6.9720e-010
"10/25/2018 4:59:41 PM" 3 5.5633e-008 1.3388e-008 8.8094e-011
"10/25/2018 4:59:48 PM" 4 5.7289e-008 1.2343e-008 1.4095e-010
"10/25/2018 4:59:54 PM" 5 5.2841e-008 1.3219e-008 7.5257e-010
任何建议。您可能(暂时)可以通过这种模式逃脱惩罚。它考虑了负数扩展符号,并且还具有原始格式的选项卡(示例中未显示)
注意:我不打算写正则表达式解释,因为它太长了
示例
var pattern = @"^""\d+/\d+/\d+ \d+:\d+:\d+ (AM|PM)""\s+-?\d+\s+\d+.?\d+e-\d+";
var regex = new Regex(pattern, RegexOptions.Compiled);
var filePaths = Directory.GetFiles(@"C:\Temp", "*.txt");
var results = new List<string>();
foreach (var file in filePaths)
{
var lines = File.ReadLines(@"D:\sample.txt").Where(x => regex.IsMatch(x));
results.AddRange(lines);
}
var pattern = @"^""\d+/\d+/\d+ \d+:\d+:\d+ (AM|PM)""\s+-?\d+\s+\d+.?\d+e-\d+";
var regex = new Regex(pattern, RegexOptions.Compiled);
var filePaths = Directory.GetFiles(@"C:\Temp", "*.txt");
var results = new List<ScanData>();
foreach (var file in filePaths)
{
var lines = File.ReadLines(@"D:\sample.txt")
.Where(x => regex.IsMatch(x))
.Select(x => ScanData.FromString(x));
results.AddRange(lines);
}
示例
var pattern = @"^""\d+/\d+/\d+ \d+:\d+:\d+ (AM|PM)""\s+-?\d+\s+\d+.?\d+e-\d+";
var regex = new Regex(pattern, RegexOptions.Compiled);
var filePaths = Directory.GetFiles(@"C:\Temp", "*.txt");
var results = new List<string>();
foreach (var file in filePaths)
{
var lines = File.ReadLines(@"D:\sample.txt").Where(x => regex.IsMatch(x));
results.AddRange(lines);
}
var pattern = @"^""\d+/\d+/\d+ \d+:\d+:\d+ (AM|PM)""\s+-?\d+\s+\d+.?\d+e-\d+";
var regex = new Regex(pattern, RegexOptions.Compiled);
var filePaths = Directory.GetFiles(@"C:\Temp", "*.txt");
var results = new List<ScanData>();
foreach (var file in filePaths)
{
var lines = File.ReadLines(@"D:\sample.txt")
.Where(x => regex.IsMatch(x))
.Select(x => ScanData.FromString(x));
results.AddRange(lines);
}
var模式=@“^”\d+/\d+/\d+\d+:\d+:\d+(AM | PM)”“\s+-?\d+\s+\d+。?\d+e-\d+”;
var regex=新的regex(模式,RegexOptions.Compiled);
var filepath=Directory.GetFiles(@“C:\Temp”,“*.txt”);
var results=新列表();
foreach(文件路径中的var文件)
{
var lines=File.ReadLines(@“D:\sample.txt”)
.Where(x=>regex.IsMatch(x))
.Select(x=>scanda.FromString(x));
结果:添加范围(行);
}
(A)streamReader.ReadToEnd()的功能是什么?(通过查看StreamReader.ReadToEnd/TextReader.ReadToEnd的文档检查您的假设)(B)。查看System.IO.File
类提供了哪些方法(同样,该类的文档将为您提供有关所提供方法的概述和详细信息)。有些可能有助于简化代码。(C) 对于单个行的处理,请查看如何检测日期时间行,或者何时开始和结束(您可以进行简单的字符串比较/查找,或者尝试利用字符串模式与正则表达式匹配),如果使用(“)字符拆分,则可以在字符串[1]上获取日期格式字符串.try/catch解析为date。如果成功,则存储在temp整行上。我是否需要在读取循环中以字符串形式存储它?我看不到我的任何输出。是因为我将它们附加到列表中,然后循环它。@Rockn'Roll嗨,我不完全确定你在问什么,但是我更新了一个更符合你所做操作的示例。我不知道ried了你的建议代码,但列表返回我System.Collections.Generic.list`1[System.String]。如果我要循环temp,它什么也不返回。我可以给你实际的txt文件吗?文本文件大小是102mb。我只是简化了我的示例内容,以适合我的问题。
var pattern = @"^""\d+/\d+/\d+ \d+:\d+:\d+ (AM|PM)""\s+-?\d+\s+\d+.?\d+e-\d+";
var regex = new Regex(pattern, RegexOptions.Compiled);
var filePaths = Directory.GetFiles(@"C:\Temp", "*.txt");
var results = new List<ScanData>();
foreach (var file in filePaths)
{
var lines = File.ReadLines(@"D:\sample.txt")
.Where(x => regex.IsMatch(x))
.Select(x => ScanData.FromString(x));
results.AddRange(lines);
}