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

文件根据自己的格式去解析,本文只是一个示例,读取方式是按行读取
#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
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值