You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
58 lines
1.3 KiB
58 lines
1.3 KiB
#include "CSVReader.h"
|
|
|
|
// 构造函数
|
|
CSVReader::CSVReader(const string& filename) : filename(filename) {
|
|
file.open(filename);
|
|
if (!file.is_open()) {
|
|
cerr << "Error: Could not open file " << filename << endl;
|
|
exit(1);
|
|
}
|
|
}
|
|
|
|
// 析构函数
|
|
CSVReader::~CSVReader() {
|
|
if (file.is_open()) {
|
|
file.close();
|
|
}
|
|
}
|
|
|
|
// 按行读取CSV文件
|
|
vector<CSVRow> CSVReader::readByLine() {
|
|
vector<CSVRow> rows;
|
|
string line;
|
|
while (getline(file, line)) {
|
|
CSVRow row;
|
|
stringstream ss(line);
|
|
string cell;
|
|
while (getline(ss, cell, ',')) {
|
|
row.data.push_back(cell);
|
|
}
|
|
rows.push_back(row);
|
|
}
|
|
return rows;
|
|
}
|
|
|
|
// 按块读取CSV文件
|
|
vector<CSVRow> CSVReader::readByBlock(int blockSize) {
|
|
vector<CSVRow> rows;
|
|
string line;
|
|
int count = 0;
|
|
while (getline(file, line) && count < blockSize) {
|
|
CSVRow row;
|
|
stringstream ss(line);
|
|
string cell;
|
|
while (getline(ss, cell, ',')) {
|
|
row.data.push_back(cell);
|
|
}
|
|
rows.push_back(row);
|
|
count++;
|
|
}
|
|
return rows;
|
|
}
|
|
|
|
// 按字节读取CSV文件
|
|
string CSVReader::readByByte(int byteSize) {
|
|
vector<char> buffer(byteSize);
|
|
file.read(buffer.data(), byteSize);
|
|
return string(buffer.data(), byteSize);
|
|
} |