You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

60 lines
1.2 KiB
C++

#include "stdafx.h"
#include "FileMgr.h"
CFileMgr::CFileMgr()
{
}
CFileMgr::~CFileMgr()
{
}
void CFileMgr::ReadFileToStrVec(const std::string& filePath, std::vector<std::vector<std::string>>& data) {
std::ifstream file(filePath, std::ios::in | std::ios::binary);
if (!file.is_open()) {
return;
}
// <20><>ȡ<EFBFBD>ļ<EFBFBD><C4BC>Ĵ<EFBFBD>С
file.seekg(0, std::ios::end);
size_t fileSize = file.tellg();
file.seekg(0, std::ios::beg);
// <20><><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD>ӳ<EFBFBD><EFBFBD>ڴ<EFBFBD>
char* fileBuffer = new char[fileSize];
file.read(fileBuffer, fileSize);
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
char* lineStart = fileBuffer;
char* lineEnd = nullptr;
size_t rowIndex = 0;
while ((lineEnd = std::find(lineStart, fileBuffer + fileSize, '\n')) != fileBuffer + fileSize) {
std::vector<std::string> row;
char* valueStart = lineStart;
char* valueEnd = nullptr;
// <20>ָǰ<EEB5B1><C7B0>
while ((valueEnd = std::find(valueStart, lineEnd, ',')) != lineEnd) {
5 days ago
row.emplace_back(std::string(valueStart, valueEnd));
valueStart = valueEnd + 1;
}
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD>ֶ<EFBFBD>
5 days ago
row.emplace_back(std::string(valueStart, lineEnd));
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ӵ<EFBFBD><D3B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
data.push_back(row);
// <20>ƶ<EFBFBD><C6B6><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><D2BB>
lineStart = lineEnd + 1;
++rowIndex;
}
// <20><><EFBFBD><EFBFBD>
delete[] fileBuffer;
file.close();
}