Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/322.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#_Readfile - Fatal编程技术网

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);
}