我正在做Windows项目,其中我有两个DateTimePicker控件,一个用于StartDate,另一个用于EndDate。
在运行时,当用户从该控件中选择StartDate和EndDate时,它应该读取文本文件(即)log.txt&逐行搜索获得这些日期的匹配以及日期之间的匹配,并将数据写入文本框或标签控件
例如在日志文件中,数据如下:
3/12/2013 2:51:47 PM - ASDASDASD.D20131203145019 4/12/2013 2:52:23 PM - ASDDFSDSA.C20131203145019 2013年5月12日下午2:52:37 - SDASAFAS_20131203182101.D 2013年6月12日下午3:17:11 - RRRTWEWA_20131203184602.D00 2013年7月7日下午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月7日下午3:35:32 - XBCNXCXCXC.D0120131203153408
但到目前为止我得到了:
2013年5月12日下午2:52:37 - SDASAFAS_20131203182101.D 2013年7月7日下午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);
}
我不知道做循环。
答案 0 :(得分:2)
答案 1 :(得分:0)
尝试并在此处理DateTime数据类型,而不是将所有内容转换为字符串。从文件中读取该行后,解析出日期。假设它始终是文件中的第一个元素,后跟一个空格,您可以使用DateTime lineDate = DateTime.Parse(line.Split(" ")[0]);
一旦您以该格式获得文件中的日期,并且从日期选择器中获得了DateTime fromDate
和DateTime toDate
,就可以撰写if(lineDate >= fromDate && lineDate <= toDate) sb.AppendLine(line);