C++ 读取CSV文件测试

测试csv文件读写100次

结果: 93ms - 110 ms csv大小4110000字符。3.92Mb。
结论:可以更快。
在这里插入图片描述


//测试文件读写 100次
	std::filebuf buf;
	CString time = _T("");
	if (buf.open("X:/Users/user/Desktop/000008.csv", std::ios::binary | std::ios::in))
	{
		std::istream is(&buf);
		for (int i = 0; i < 100; i++)
		{
			time += ReadCsv(is) + _T("  ");
		}
		
	}	

CString CReqMonitorTabHQ::ReadCsv(std::istream& pStream)
{
	pStream.seekg(0, std::ios::end);
	std::streamsize fileLength = pStream.tellg();
	pStream.seekg(0, std::ios::beg);
	const std::streamsize bufLength = 64 * 1024;
	std::vector<char> buffer(bufLength);
	std::vector<std::string> row;
	std::vector<std::vector<std::string>> allRow;
	std::string cell;
	bool quoted = false;
	int cr = 0;
	int lf = 0;
	

	DWORD time_start, time_end;
	time_start = GetTickCount64();
	while (fileLength > 0)
	{
		std::streamsize readLength = min(fileLength, bufLength); 
		pStream.read(buffer.data(), readLength);

		for (int i = 0; i < readLength; ++i)
		{
			if (buffer[i] == ',')
			{
				row.push_back(cell);
				cell.clear();
			}
			else if (buffer[i] == '\r')
			{
				++lf;
				row.push_back(cell);
				cell.clear();
				allRow.push_back(row);
				row.clear();				
			}
			else
			{
				cell += buffer[i];
			}			
		}

		fileLength -= readLength;

	}
	time_end = GetTickCount64();
	CString time;
	time.Format(_T("%dms"), time_end - time_start);
	
	return time;

}

代码参考链接:https://blog.csdn.net/qq_30094523/article/details/101674635
https://www.zhihu.com/tardis/zm/art/365268763?source_id=1005

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值