0

改行で区切られた複数のデータ エントリを含むファイルがあり、各エントリには日付が含まれています。この日付を知っているので、これらのエントリを同等の日数に基づいてリストに入れたいと思いますが、現在の日付から 7 日以内の日付だけを気にします。次に、これらの 7 つのリストを含む最上位のリストを作成します。これらのリストには、その特定の日付を含むエントリが含まれています。

これが私がこれまでに持っているものです:

    static void Main(string[] args)
    {
        List<List<string>> week = new List<List<string>>(7);

        List<string> day = new List<string>();
        FileInfo fi = new FileInfo("TestCases.txt"); 
        StreamReader reader = fi.OpenText();
        string line;
        DateTime current = DateTime.Now;
        int currentday = current.DayOfYear;
        while ((line = reader.ReadLine()) != null)
        {
            string[] data = line.Split(',');
            DateTime date = DateTime.Parse(data[0]);
            int dateday = date.DayOfYear;
            int diff = dateday - currentday;
            if (diff < 0) diff += 365;
            if (diff >= 0 && diff < 7)
            {
                day.Add(line);
            }
            week.Add(day);
        }
        Display(week);
        Console.ReadKey();

     }

そして私の表示機能:

    static void Display(List<List<string>> list)
    {
        foreach (var sublist in list)
        {
            foreach (var value in sublist)
            {
                Console.Write(value);
                Console.Write('\n');
            }
            Console.WriteLine();
        }

    }

これにより、適切なすべてのエントリ (次の 7 日以内に発生するエントリ) が出力されますが、最終的にすべてのエントリが 1 つのリストに追加され、同じリストが最上位のリストに 7 回連続して配置されます。

ここからどこに進むべきかについて大まかな考えはありますが、C# にはあまり詳しくなく、エラーが発生し続けており、Google はあまり役に立ちませんでした。

御時間ありがとうございます

4

1 に答える 1

1

初め:

List<List<string>> week = new List<List<string>>(7);
for (int i = 0; i < 7; i++)
    week[i] = new List<string>();

それで:

if (diff >= 0 && diff < 7)
{
    week[diff].Add(line);
}

まだテストしていませんが、必要なもののようです。必要な曜日に日付を追加する必要があります。現在行っていることは、すべての日付を同じリストに追加することであり、日付を再作成したり、グループ化したりすることはありません。

上記を考えると、これはおそらくいくつかのlinqでより適切に解決できます-より良いとは、よりクリーンで読みやすいことを意味します。

編集:

すべての日付をリストに入れる場合は、次のようにすることができます。

var dates = new List<DateTime>
{
    DateTime.Now.AddDays(-1),
    DateTime.Now.AddDays(-2),
    DateTime.Now.AddDays(-3),
    DateTime.Now.AddDays(-4),
    DateTime.Now.AddDays(-5),
    DateTime.Now.AddDays(-6),
    DateTime.Now.AddDays(-7),
    DateTime.Now.AddDays(-8)
};

var list = from date in dates
           where (DateTime.Now - date).Days < 7
           group date by date.Day;

foreach (var dateGroup in list)
{
    Console.WriteLine("Date group: " + dateGroup.Key);
    foreach (var date in dateGroup)
    {
        Console.WriteLine(date);
    }
}

同じ出力が得られます。リスト内のリストではなく、グループ化のコレクションです。コードが何をすべきかをより簡単に取得できます。

于 2013-05-29T17:46:30.330 に答える