原创: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; }
}
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· Ollama——大语言模型本地部署的极速利器
· DeepSeek如何颠覆传统软件测试?测试工程师会被淘汰吗?