3

我有这样的文本文件:

2012 年 11 月 18 日测试1

2012 年 11 月 19 日测试2

11/20/2012 测试3

11/21/2012 测试4

11/22/2012 测试5

11/23/2012 测试6

2012 年 11 月 24 日测试7

11/25/2012 测试8

如何搜索当前日期并返回包含该日期的整行?例如,如果我今天运行程序,它应该返回

2012 年 11 月 18 日测试1

代码:

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

2 回答 2

8

首先- 按行拆分文本。例如这样:

// 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);
于 2012-11-18T20:10:18.570 回答
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);
于 2012-11-18T20:14:38.440 回答