原创:QQ群发言统计
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Text.RegularExpressions;
using System.IO;
namespace QQGroupCount
{
public partial class QQGroupCounter : Form
{
public QQGroupCounter()
{
InitializeComponent();
}
private void btnBroswer_Click(object sender, EventArgs e)
{
openFileDialog1.ShowDialog();
}
private void openFileDialog1_FileOk(object sender, CancelEventArgs e)
{
txtFilePath.Text = openFileDialog1.FileName;
btnCount.Focus();
}
private void btnCount_Click(object sender, EventArgs e)
{
StreamReader sr = new StreamReader(txtFilePath.Text);
CountingContent(sr.ReadToEnd());
sr.Dispose();
}
void CountingContent(string content)
{
string pattern = @"\d{4}[\-|/]\d{1,2}[\-|/]\d{1,2} \d{1,2}:\d{1,2}:\d{1,2} (.[^\(\)\<\>]*)(\(\d+\)|\<.[^\<\>]*\>)";
MatchCollection mc = Regex.Matches(content, pattern, RegexOptions.Multiline);
List<QQUser> list = new List<QQUser>();
string qq, name;
foreach (Match m in mc)
{
qq = m.Groups[2].Value.Replace('(', '\0').Replace(')', '\0').Replace('<', '\0').Replace('>', '\0');
name = m.Groups[1].Value;
QQUser user = list.Find(u => u.QQ == qq);
if(user==null)
user = list.Find(u => u.NickName == name);
if (user == null)
{
user = new QQUser();
user.QQ = qq;
user.NickName = name;
user.Count = 1;
list.Add(user);
}
else
{
user.Count++;
user.NickName = name;
}
}
list=list.OrderByDescending(u=>u.Count).ToList();
int i=0;
foreach(QQUser user in list)
{
i++;
user.Rank = i;
}
dataGridView1.DataSource = list;
}
}
public class QQUser
{
public int Rank { get; set; }
public string NickName { get; set; }
public string QQ { get; set; }
public int Count { get; set; }
}
}