これは私が以前に尋ねたのと同じ質問ですが、複数のファイルをとり、それらのファイルの合計を計算している点が異なります。私は特定のディレクトリからすべてのファイルを読み込んでいますが、なんらかの理由で正しくグループ化していません。複数のファイルから合計統計を計算する
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"などで指定します。次に、読み込まれているすべてのファイルの合計を計算し、Monthly Statisticsファイルを作成します。私は現在合計を得ていますが、私はそれが私が渡しているヘッダーと関係があると思うし、その行をスキップするように指示する方法がわかりません。事前に
おかげで
EDIT
はここ
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);
}
}
など、もともとディレクトリを読み、私のプロセッサであり、プロセッサがためにを検索するための適切なディレクトリを検索しますファイルを取得します。現在の日付を使用し、先月に検索します。ヘッダをスキップ
。 –
母、私を今ストーカーしないでください! ;-) – yamen
おかげさまで助けてくれてありがとうございました。しかし、C#の初心者ですから、これがコード内のどこにあるのか不思議です。 –