读文件选取部分字段写入excel

来源:互联网 发布:仿58同城源码带手机版 编辑:程序博客网 时间:2024/06/06 04:32
文件根据自己的格式去解析,本文只是一个示例,读取方式是按行读取
#include "stdafx.h"#include <string>#include <vector>#include <map>#include <fstream>#include <iostream>#include <streambuf>void trim(std::string& s){std::vector<char> v;for (const auto& c : s){if (isalnum(c) || c=='.'){v.push_back(c);}}s.replace(s.begin(), s.end(), v.begin(), v.end());}int main(){std::vector<std::map <std::string, std::string>> logs;auto fp = fopen("ELC_2017-09-22_19-05-44.log","r");if (fp){std::map<std::string, std::string> m;for (char buf[1024] = { 0 }; fgets(buf, 1024, fp) != nullptr; ){std::string line(buf);if (line.find("{") != std::string::npos){m.clear();}else if (line.find('}') != std::string::npos){logs.push_back(std::move(m));}else{auto pos = line.find(":");if (pos != std::string::npos){auto k = line.substr(0, pos);trim(k);auto v = line.substr(pos + 1);trim(v);m[k] = v;}}memset(buf, 0, 1024);}fclose(fp);}std::ofstream ofs;ofs.open("elc.csv", std::ios::out | std::ios::trunc);for (const auto& m : logs){std::string addr, recv, send;auto it = m.find("address");addr = (it != m.end()) ? it->second : "";it = m.find("Received");recv = (it != m.end()) ? it->second : "";it = m.find("Sented");send = (it != m.end()) ? it->second : "";ofs << addr << "," << recv << "," << send << std::endl;}ofs.close();    return 0;}

原创粉丝点击