【发布时间】:2017-02-10 21:46:47
【问题描述】:
我正在做 Windows 项目,其中我有两个 DateTimePicker 控件,一个用于 StartDate,另一个用于 EndDate。
在运行时,当用户从该控件中选择 StartDate 和 EndDate 时,它应该读取文本文件(即 log.txt)并逐行搜索以获取这两个日期以及日期之间的匹配并写入数据到文本框或标签控件
例如在日志文件中,数据如下:
2013 年 3 月 12 日下午 2:51:47 - ASDASDASD.D20131203145019 2013 年 4 月 12 日下午 2:52:23 - ASDDFSDSA.C20131203145019 2013 年 5 月 12 日下午 2:52:37 - SDASAFAS_20131203182101.D 2013 年 6 月 12 日下午 3:17:11 - RRRTWEWA_20131203184602.D00 2013 年 7 月 12 日下午 3:35:32 - XBCNXCXCXC.D0120131203153408
如果我从 2013 年 12 月 5 日到 2013 年 12 月 7 日进行搜索,它应该检索到:
2013 年 5 月 12 日下午 2:52:37 - SDASAFAS_20131203182101.D 2013 年 6 月 12 日下午 3:17:11 - RRRTWEWA_20131203184602.D00 2013 年 7 月 12 日下午 3:35:32 - XBCNXCXCXC.D0120131203153408
但到目前为止我得到:
2013 年 5 月 12 日下午 2:52:37 - SDASAFAS_20131203182101.D 2013 年 7 月 12 日下午 3:35:32 - XBCNXCXCXC.D0120131203153408
我只检索 StartDate 和 EndDate 匹配数据,而不是日期数据之间的数据。
以下是我尝试过的一些编码:
try
{
// ...
string FDDate = FD.Date.ToString("M/d/yyyy");
string TDDate = TD.Date.ToString("M/d/yyyy");
string searchstring = EnterFileNameTextbox.Text.ToString();
string searchfromdate = FromDateTimePicker.Value.ToShortDateString();
string searchtodate = ToDateTimePicker.Value.ToShortDateString();
string line;
StringBuilder sb = new StringBuilder();
int counter = 0;
using (StreamReader file = new StreamReader(@"D:\log.txt"))
{
while ((line = file.ReadLine()) != null)
{
if (line.Contains(searchstring) && line.Contains(FDDate))
{
sb.AppendLine(line.ToString());
counter++;
}
else if (line.Contains(searchstring) && !line.Contains(FDDate))
{
if (FD.Date < TD.Date)
{
sb.AppendLine(line.ToString());
counter++;
FDDate = FD.Date.AddDays(1).ToShortDateString();
}
else if (FD.Date == TD.Date)
{
FDDate = FD.Date.ToShortDateString();
sb.AppendLine(line.ToString());
counter++;
}
}
}
}
ResultTextBox.Text = sb.ToString();
CountLabel.Text = counter.ToString();
}
catch (Exception ex)
{
MessageBox.Show("The file could not be read");
MessageBox.Show(ex.Message);
}
我不知道做循环。
【问题讨论】:
-
要么将时间设置为相同,要么将日期提取为字符串以获得一些想法。