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