我正在使用StreamReader逐行读取文本文件并将其显示到控制台。它读入并显示就好了。每行包含从左到右,日期,时间,数字,条目。文本文件有数百行文本。我想允许用户输入特定的日期和时间,并仅返回该时间范围内的文本行。因此,在数百行文本中,只能返回输入日期和时间的文本行。
到目前为止我的代码是读入并显示文本文件。
public override void ReadFile(string strFileName)
{
try
{
using (StreamReader sr = new StreamReader(@"C:\MyFolder\TextFile.txt"))
{
String line = sr.ReadLine();
Console.WriteLine(line);
}
}
catch (Exception e)
{
Console.WriteLine("The file could not be read:");
Console.WriteLine(e.Message);
}
}
这可以在控制台上显示文本,如下所示:
01-01-2015 10:10:10 Line of text blah blah blah
01-01-2015 10:10:10 Line of text blah blah blah
01-01-2015 10:10:10 Line of text blah blah blah
我现在正在尝试将这些行分开来获取日期和时间等各个部分。这是我到目前为止所做的,但我不确定最好的方法是什么。
public override void ReadLiFile(string strFileName)
{
try
{
using (StreamReader sr = new StreamReader(@"C:\MyFolder\TextFile.txt"))
{
string line;
while ((line = sr.ReadLine()) != null)
{
string[] fields = line.Split("\t".ToCharArray());
int theInt = Convert.ToInt32(fields[0]);//to get first field e.g Date
}
Console.WriteLine(line);
}
}
}
catch (Exception e)
{
Console.WriteLine("The file could not be read:");
Console.WriteLine(e.Message);
}
}
我想根据给定的日期和时间缩小输出到屏幕的范围。我不希望所有的线条只显示与特定日期和时间相关的线条,例如之间的线条 01-01-2015 10:10:10和 01-01-2015 10:15:15
我猜我需要隔离每一行中的日期和时间字段并存储该值。我试图拆分该行并存储第一个值,即Date。 我的问题是分割线中字段的最佳方式是什么?我的尝试无效。我现在收到一条错误消息,指出无法读取'文件'并且输入字符串格式不正确' 谢谢你的帮助。
答案 0 :(得分:1)
这将提取日期部分并将其解析为DateTime
,然后您可以过滤它。
var startDate = new DateTime(2015, 1, 1, 10, 10, 10);
var endDate = new DateTime(2015, 1, 1, 10, 15, 15);
var result = (from line in File.ReadLines(@"C:\MyFolder\TextFile.txt")
let pieces = line.Split('\t')
let date = DateTime.ParseExact(pieces[0] + pieces[1], "MM-dd-yyyyHH:mm:ss", CultureInfo.InvariantCulture)
where date >= startDate && date <= endDate
select line).ToList();
这是LINQ,以防您以前没见过。一旦你习惯它,它就很适合查询。
let
关键字允许您存储数据,以便(例如)您可以在整个查询中多次使用它,而无需多次执行ParseExact
或Split
。
File.ReadLines
从文件中读取尽可能少的行,足以满足您的查询。虽然在这种情况下,它必须解析每一行以检查日期,但无论如何它都会读取它们。
答案 1 :(得分:0)
DateTime dt;
if (DateTime.TryParse(fields[0] + " " + fields[1], out dt))
if (dt >= minDate && dt <= maxDate)
答案 2 :(得分:0)
这应该会在startDate
和endDate
之间打印 Dates 的所有行。
我省略了时间部分,但你应该知道如何去做。
DateTime startDate = new DateTime(2015, 1, 1);
DateTime endDate = new DateTime(2015, 1, 3);
var query = File.ReadLines(@"e:\1.txt").Select(line => new { Line = line, Date = Convert.ToDateTime(line.Split(' ').First()) })
.Where(x => x.Date >= startDate && x.Date <= endDate);