关闭

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

47人阅读 评论(0) 收藏 举报
分类:
文件根据自己的格式去解析,本文只是一个示例,读取方式是按行读取
#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;
}

0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:643次
    • 积分:55
    • 等级:
    • 排名:千里之外
    • 原创:2篇
    • 转载:0篇
    • 译文:0篇
    • 评论:0条
    文章分类
    文章存档