foreach
テキスト ファイルからいくつかの行を調べて、必要な行を切り詰めて整理したステートメントがあります。私がやりたいのは、同じ文字列が何回存在するかを数えることです。どうすればいいですか?
これが私のコードです。それif
は私が立ち往生している2番目のステートメントです:
foreach (string line in lines.Where(l => l.Length >= 5))
{
string a = line.Remove(0, 11);
if ((a.Contains(mobName) && a.Contains("dies")))
{
mobDeathCount++;
}
if (a.Contains(mobName) && a.Contains("drops"))
{
string lastpart = a.Substring(a.LastIndexOf("drops"));
string modifiedLastpart = lastpart.Remove(0, 6);
}
いくつかの行は次のようになります。
コインの袋
シオグブランデー
コインの袋
コインの袋
キャスシールド
ぼろぼろの巻物
だから私がやろうとしているのは、コインの袋で3行あるカウントアップです。しかし、私はそれがすべてになるようにする必要があります。巨大なドロップリストがあります。そのため、em のすべてを追加することはできません。時間がかかりすぎます
編集
private static void Main()
{
int mobDeathCount = 1;
int lootCheckCount = 1;
string[] lines =
System.IO.File.ReadAllLines(@"C:\Users\Michael\Documents\Electronic Arts\Dark Age of Camelot\chat.log");
Console.WriteLine(
"Enter which mob you want to see, remember to include the, for an example; The siog seeker, remember to start with a capital T");
string mobName = Console.ReadLine();
foreach (string line in lines.Where(l => l.Length >= 5))
{
string a = line.Remove(0, 11);
if ((a.Contains(mobName) && a.Contains("dies")))
{
mobDeathCount++;
}
if (a.Contains(mobName) && a.Contains("drops"))
{
string lastpart = a.Substring(a.LastIndexOf("drops"));
string modifiedLastpart = lastpart.Remove(0, 6);
var lineCountDict = modifiedLastpart.GroupBy(x => x).Where(x => x.Count() > 1).ToDictionary(x => x.Key, x => x.Count());
foreach (var val in lineCountDict)
{
Console.WriteLine(val.Key + " - " + val.Value);
}
改行;
[01:09:55] シオグシーカーはコインの入った袋を落とします。
[01:09:55] シオグシーカーはシオグブランデーを落とします。
[01:09:55] シオグシーカーが死んだ!
[01:09:55] 3,687,564 の経験値を獲得します (1,638,917 キャンプ ボーナス)。
[01:10:31] レッサー ディスエンチャンティング イラプション スペルを唱えました!
[01:10:31] siog seeker に 424 (+18) のダメージを与えました!
[01:10:31] シオグシーカーはコインの入った袋を落とします。
[01:10:31] 銀18個と銅88個を拾います。
[01:10:31] シオグシーカーが死ぬ