我需要按 IP 对 Web 日志文件进行排序,所以我需要在下一个连接相同的 IP。我很懒,但我想学习 C++ 中的方法,所以我不想在 excel 中对其进行排序。我在日志中做了一些更改,例如在每行中的 IP 为 (8 q [symbols] { qqqqqqqq }) 之后,再转到另一个地址 - 所以我可以按每个字符串的数字对字符串进行排序,因为 IP 没有相同的长度 - 所以我只需要将 16 个字符排成一行并进行比较 - 至少我认为这是个好主意。
日志示例:
85.xx.xx.58 qqqqqqqq 85.xx.xx.58.xxxxxxxxx bla,bla,bla,bla,
105.216.xx.xx qqqqqqqq - bla,bla,bla,bla,bla,bla,bla,
85.xx.xx.58 qqqqqqqq 85.xx.xx.58.xxxxxxxxx bla,bla,bla,bla,
日志有超过 60 000 行,我使用 C++ 擦除了 robots.txt、.js、.gif、.jpg 等行,所以我有点想回收旧代码。“robot.txt”删除行的示例。
#include <iostream>
#include <string>
#include <fstream>
using namespace std;
int main()
{
ifstream infile("C:\\ips.txt");
ofstream myfile;
string line;
while (getline(infile, line)) {
myfile.open("C:\\ipout.txt");
for (string line; getline(infile, line); ) {
if (line.find("robots.txt") != string::npos)
myfile << line << "\n";
}
}
infile.close();
myfile.close();
cout << " \n";
cin.get();
return 0;
}
我知道这段代码看起来很糟糕,但它完成了它的工作,我还在学习,当然我想要旧文件和另一个文件(新文件)。
我找到了有关此主题的帮助,但对我来说这有点离题...
我正在考虑将“if”语句更改为仅读取 16 个字符,比较它们并将它们连接(在彼此下方,到行)当然整行应该是完整的 - 如果可能的话。