这是我之前问过的一个类似问题,不同之处在于我正在获取多个文件并计算这些文件的总和。我已经到了从特定目录读取所有文件的地步,但由于某种原因,它没有正确分组。
这是我拥有的代码:
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
所以我想做的是按“公司”、“能源”等分组。然后计算所有正在读取的文件的总数,以创建一个月度统计文件。我目前正在获取总数,但是我认为它与我传入的标题有关,我不知道如何告诉它跳过该行。
提前致谢
编辑
这是我的处理器,它最初读取目录等。
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);
}
}
处理器找到适当的目录进行搜索,以便从中获取文件。它使用当前日期,并找到上个月。