3

次のようなテキストファイルがあります。

2012 年 11 月 18 日テスト 1

2012 年 11 月 19 日 テスト 2

2012 年 11 月 20 日テスト 3

2012 年 11 月 21 日テスト 4

2012 年 11 月 22 日 テスト5

2012 年 11 月 23 日 テスト6

2012 年 11 月 24 日 テスト7

2012 年 11 月 25 日 テスト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);

2 番目- 指定された形式の現在の日付文字列で始まる行を検索します。

string date = DateTime.Now.ToString("MM/dd/yyyy");    
IEnumerable<string> results = lines.Where(l => l.StartsWith(date));

そのような行が 1 つだけ存在する可能性があることを完全に確信している場合は、次を使用します。

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 に答える