gpt4 book ai didi

C# - 从多个文件计算总统计

转载 作者:行者123 更新时间:2023-12-02 22:44:03 25 4
gpt4 key购买 nike

这是我之前提出的一个类似问题,不同之处在于我正在获取多个文件并计算这些文件的总和。我已经到了从特定目录读取所有文件的地步,但由于某种原因它没有正确分组。

这是我的代码:

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

处理器找到合适的目录进行搜索,以便从中获取文件。它使用当前日期,并找到上个月。

最佳答案

跳过标题很简单:

File.ReadLines(monthlyFileName).Skip(1).<rest of your chain>

但是,当您想要读取所有文件然后计算统计信息时,好像您一次读取一个文件?

首先怎么样:

public IEnumerable<String> ReadLinesInDirectory(string path)
{
return Directory.EnumerateFiles(path)
.SelectMany(f =>
File.ReadLines(f)
.AsEnumerable()
.Skip(1));
}

并替换ReadLines这样(确保您指向正确的路径等)。


好的,这是完整的解释,但我认为您可能需要进一步学习 C#。首先,定义 ReadLinesInDirectory我上面写的函数。

然后替换ProcessMonthlyLogFiles用这个代替:

public void ProcessMonthlyLogFiles()
{
DateTime currentTime = DateTime.Now;

int month = currentTime.Month - 1;
int year = currentTime.Year;

string path = Path.GetDirectoryName(Settings.DailyPath + year + @"\" + month + @"\");

CalculateMonthlyStatistics(path);
}

并且在 CalculateMonthlyStatistics前三行(在 GroupBy 之前)如下:

    public void CalculateMonthlyStatistics(string path)
{
var statistics = ReadLinesInDirectory(path)
// .GroupBy etc...

关于C# - 从多个文件计算总统计,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10323623/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com