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

#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);
}