注意:复制excel的内容到txt中时,删除空行,删除excel列名(如’告警ip’,‘告警次数’),只留需要计算的数据
示例 excel中含有告警ip和告警次数两列,需要统计某个ip的告警之和
复制出ip列表excel去重后,复制到iplist.txt里保存(懒得写去重的代码了,_),
把原始数据 ip+告警次数两列一起复制到rawattacklist.txt中保存
运行代码
其它用途如个人总分统计等,是否会报错就随缘吧
iplist.txt
rawattacklist.txt
运行代码
源代码
需要在运行目录下创建iplist.txt存储去重后的ip,rawattacklist.txt存储原始告警情况(ip与告警次数之间,从excel复制出来默认是以tab键分隔的)
#include#include #include #include using namespace std; struct Ipstruct { string _ipaddress; int _total; Ipstruct(string ipaddress = "", int total = 0) { _ipaddress = ipaddress; _total = total; } }; void combine(Ipstruct *iplist,const long long int ipnum,string ip, long long int times);//把次数times计数到ip相同的结构体里 void showAndSaveresult(const Ipstruct *iplist, const long long ipnum);//输出结构体数组的结果 int main() { ifstream ipcount; ipcount.open("iplist.txt"); if (!ipcount.is_open()) { cout << "iplist.txt打开失败" << endl; return 0; } string line=""; long long int ipnum = 0; while (getline(ipcount,line)) { ipnum++; } ipcount.close(); //cout << "有" << ipnum << "个ip" << endl; //第二部分读取已去重ip ifstream ipcount1; ipcount1.open("iplist.txt"); Ipstruct *iplist = new Ipstruct[ipnum];//已经delete了 for (int i = 0; i < ipnum; i++) { getline(ipcount1, iplist[i]._ipaddress); } ipcount1.close(); //第三部分 读取原始ip+次数 的数据,存到结构体数组里 ifstream rawattacklist; rawattacklist.open("rawattacklist.txt"); string rawline; //cout << "原始列表读取情况" << endl; while (getline(rawattacklist, rawline))//读取一行 ip+次数 { int Tabindex = 65534; string nowip = ""; long long int nowtimes; for (int i = 0; i < rawline.size(); i++) { if (int(rawline[i]) == 9)//9是tab键的ascii码值,是excel复制出来的两行之间的分隔符 { Tabindex = i;//空格开始的位置 break; } } //cout << "tab键的位置是" << Tabindex< for (int i = 0; i < ipnum; i++) { if (ip == iplist[i]._ipaddress) { iplist[i]._total = iplist[i]._total + times; //cout << iplist[i]._ipaddress << "当前计数结果为" << iplist[i]._total << endl; } } } void showAndSaveresult(const Ipstruct *iplist, const long long ipnum)//输出结构体数组的结果 { ofstream resulttxt; resulttxt.open("latestResult.txt"); cout << "统计结果"<< endl; for (int i = 0; i < ipnum; i++) { cout << iplist[i]._ipaddress << 't' << iplist[i]._total << endl; resulttxt << iplist[i]._ipaddress << 't' << iplist[i]._total << endl; } resulttxt.close(); }



