我有这样的文本文件:
11/18/2012 test1
11/19/2012 test2
11/20/2012 test3
11/21/2012 test4
2012年11月22日test5
11/23/2012 test6
2012年11月24日test7
11/25/2012 test8
如何搜索当前日期并返回包含该日期的整行?例如,如果我今天运行程序,它应该返回
11/18/2012 test1
代码:
string searchKeyword = monthCalendar1.SelectionStart.ToShortDateString();
string[] textLines = File.ReadAllLines(@"c:\temp\test.txt");
List<string> results = new List<string>();
foreach (string line in textLines)
{
if (line.Contains(searchKeyword))
{
results.Add(line);
listBox2.Items.Add(line);
}
}
答案 0 :(得分:3)
首先 - 按行分割文字。例如。这样:
// string[] lines = File.ReadAllLines(@"c:\temp\test.txt");
string[] lines = text.Split(new string[] { Environment.NewLine }, StringSplitOptions.None);
第二个 - 查找以指定格式的当前日期字符串开头的行:
string date = DateTime.Now.ToString("MM/dd/yyyy");
IEnumerable<string> results = lines.Where(l => l.StartsWith(date));
如果你完全确定只有一条这样的线,那么使用
string result = lines.SingleOrDefault(l => l.StartsWith(date));
以下是您的代码已修复并重新构建(您应使用自定义日期字符串格式并使用StartsWith
代替Contains
)
string searchKeyword = monthCalendar1.SelectionStart.ToString("MM/dd/yyyy");
string[] textLines = File.ReadAllLines(@"c:\temp\test.txt");
foreach (string line in textLines.Where(l => l.StartsWith(searchKeyword)))
listBox2.Items.Add(line);
答案 1 :(得分:1)
var matches = new List<string>();
var currentDate = DateTime.Now.ToString("dd/MM/yyyy");
using (StreamReader sr = new StreamReader("file.txt"))
{
var line = sr.ReadLine();
if(line.StartsWith(currentDate))
matches.Add(line);
}
将它们添加到列表框中:
foreach (var match in matches)
listBox.Items.Add(match);