これは、以前に尋ねたのと同様の質問ですが、複数のファイルを取得し、それらのファイルの合計を計算しているという点が異なります。特定のディレクトリからすべてのファイルを読み取っているところまで来ていますが、何らかの理由で正しくグループ化されていません。
これが私が持っているコードです:
public void CalculateMonthlyStatistics(string monthlyFiles)
{
string monthlyFileName = monthlyFiles + ".log";
var statistics = File.ReadLines(monthlyFileName)
.GroupBy(items => items[0])
.Select(g =>
new
{
Division = g.Key,
ZipFiles = g.Sum(i => Convert.ToInt32(i[1])),
Conversions = g.Sum(i => Convert.ToInt32(i[2])),
ReturnedFiles = g.Sum(i => Convert.ToInt32(i[3])),
TotalEmails = g.Sum(i => Convert.ToInt32(i[4]))
});
statistics
.ToList()
.ForEach(d => Console.WriteLine("{0}\t{1}\t{2}\t{3}\t{4}",
d.Division,
d.ZipFiles,
d.Conversions,
d.ReturnedFiles,
d.TotalEmails));
Console.Read();
//.ForEach(d => Log.Open(tempFileName.TrimEnd(charsToTrim), d.Division, d.ZipFiles, d.Conversions, d.ReturnedFiles, d.TotalEmails));
}
}
}
私が入れているログファイルは次のようになります。
Division Zip Files Conversions Returned Files Total E-Mails
Corporate 0 5 0 5
Energy 0 1 0 5
Global Operations 0 3 0 3
Oil & Gas 1 5 0 5
Capital 5 18 0 12
だから私がやろうとしているのは、「Corporate」、「Energy」などでグループ化することです。次に、読み取られているすべてのファイルの合計を計算して、月次統計ファイルを作成します。現在、合計を取得していますが、渡したヘッダーと関係があると思います。その行をスキップするように指示する方法がわかりません。
前もって感謝します
編集
これが私のプロセッサで、元々ディレクトリなどを読み取ります。
public void ProcessMonthlyLogFiles()
{
DateTime currentTime = DateTime.Now;
int month = currentTime.Month - 1;
int year = currentTime.Year;
string path = Path.GetDirectoryName(Settings.DailyPath + year + @"\" + month + @"\");
foreach (string monthlyFileNames in Directory.GetFiles(path))
{
string monthlyFiles = path + @"\" + Path.GetFileNameWithoutExtension(monthlyFileNames);
new MonthlyReader().CalculateMonthlyStatistics(monthlyFiles);
}
}
プロセッサは、ファイルを取得するために検索する適切なディレクトリを見つけます。現在の日付を使用して、先月を検索します。