158 lines
5.8 KiB
C++
158 lines
5.8 KiB
C++
#ifndef __CSV_EXPORTER__
|
|
#define __CSV_EXPORTER__
|
|
|
|
extern "C"
|
|
{
|
|
#include "stdint.h"
|
|
}
|
|
|
|
namespace CSV_Type
|
|
{
|
|
// 错误类型
|
|
typedef enum
|
|
{
|
|
CSV_ERROR_NONE, // None Error
|
|
CSV_ERROR_MEM_ALLOCATE_FAILED, // 内存分配失败
|
|
CSV_ERROR_COLUMN_NOT_FOUND, // 未查找到指定列
|
|
CSV_ERROR_ILLEGAL_COLUMN_POSITION, // 非法列位置
|
|
CSV_ERROR_ILLEGAL_CELL_POSITION, // 非法单元格位置
|
|
CSV_ERROR_FILE_CREATE_FAILED, // 文件创建失败
|
|
CSV_ERROR_FILE_WRITE_FAILED, // 文件写入失败
|
|
} CSV_Err;
|
|
|
|
}
|
|
|
|
class CSV_Table
|
|
{
|
|
protected:
|
|
size_t mem_use; // 存储占用
|
|
size_t column_count; // 列计数
|
|
size_t max_element_depth; // 最大元素深度
|
|
|
|
struct Column_List_Node_Struct
|
|
{
|
|
char *column_title_str; // 列标题
|
|
size_t element_count; // 下属内容长度
|
|
|
|
struct Cell_List_Node // 单元格节点
|
|
{
|
|
char *content_str; // 内容字符串
|
|
Cell_List_Node *p_next_cell; // 列表索引
|
|
} *Cell_List_Head, *Cell_List_End; // 表头、表尾
|
|
|
|
Column_List_Node_Struct *p_next_column; // 下一列
|
|
} *Column_List_Head, *Column_List_End; // 列表横向表头、表尾
|
|
|
|
public:
|
|
// 构造函数
|
|
CSV_Table();
|
|
// 析构函数
|
|
~CSV_Table();
|
|
|
|
/**
|
|
* @brief 清理缓存数据并回到空白状态
|
|
* @param null
|
|
* @return null
|
|
*/
|
|
void reset();
|
|
|
|
/**
|
|
* @brief 在末尾新增列
|
|
* @param title_name_str 列标题
|
|
* @return CSV_Err 错误类型
|
|
*/
|
|
CSV_Type::CSV_Err append_column(const char *title_name_str);
|
|
|
|
/**
|
|
* @brief 在指定标题的列表后新增列
|
|
* @param target_column_title_str 目标列标题
|
|
* @param title_name_str 插入的列标题
|
|
* @return CSV_Err 错误类型
|
|
*/
|
|
CSV_Type::CSV_Err insert_column_after(const char *target_column_title_str, const char *title_name_str);
|
|
|
|
/**
|
|
* @brief 在指定标题的列表后新增列
|
|
* @param target_column_position 目标列位置
|
|
* @param title_name_str 插入的列标题
|
|
* @return CSV_Err 错误类型
|
|
*/
|
|
CSV_Type::CSV_Err insert_column_after(size_t target_column_position, const char *title_name_str);
|
|
|
|
/**
|
|
* @brief 在指定标题的列表前新增列
|
|
* @param target_column_title_str 目标列标题
|
|
* @param title_name_str 插入的列标题
|
|
* @return CSV_Err 错误类型
|
|
*/
|
|
CSV_Type::CSV_Err insert_column_before(const char *target_column_title_str, const char *title_name_str);
|
|
|
|
/**
|
|
* @brief 在指定标题的列表前新增列
|
|
* @param target_column_position 目标列位置
|
|
* @param title_name_str 插入的列标题
|
|
* @return CSV_Err 错误类型
|
|
*/
|
|
CSV_Type::CSV_Err insert_column_before(size_t target_column_position, const char *title_name_str);
|
|
|
|
/**
|
|
* @brief 指定列末尾新增单元格
|
|
* @param target_column_title_str 列标题
|
|
* @param cell_content_str 单元格内容串
|
|
* @return CSV_Err 错误类型
|
|
*/
|
|
CSV_Type::CSV_Err append_cell(const char *target_column_title_str, const char *cell_content_str);
|
|
|
|
/**
|
|
* @brief 指定列末尾新增单元格
|
|
* @param target_column_position 列位置计数
|
|
* @param cell_content_str 单元格内容串
|
|
* @return CSV_Err 错误类型
|
|
*/
|
|
CSV_Type::CSV_Err append_cell(size_t target_column_position, const char *cell_content_str);
|
|
|
|
/**
|
|
* @brief 在指定标题的列中指定单元格后插入
|
|
* @param target_column_title_str 目标列标题
|
|
* @param target_cell_position 目标单元格位置
|
|
* @param cell_content_str 单元格内容串
|
|
* @return CSV_Err 错误类型
|
|
*/
|
|
CSV_Type::CSV_Err insert_cell_after(const char *target_column_title_str, size_t target_cell_position, const char *cell_content_str);
|
|
|
|
/**
|
|
* @brief 在指定标题的列中指定单元格后插入
|
|
* @param target_column_title_str 目标列标题
|
|
* @param target_cell_position 目标单元格位置
|
|
* @param cell_content_str 单元格内容串
|
|
* @return CSV_Err 错误类型
|
|
*/
|
|
CSV_Type::CSV_Err insert_cell_after(size_t target_column_position, size_t target_cell_position, const char *cell_content_str);
|
|
|
|
/**
|
|
* @brief 在指定标题的列中指定单元格前插入
|
|
* @param target_column_title_str 目标列标题
|
|
* @param target_cell_position 目标单元格位置
|
|
* @param cell_content_str 单元格内容串
|
|
* @return CSV_Err 错误类型
|
|
*/
|
|
CSV_Type::CSV_Err insert_cell_before(const char *target_column_title_str, size_t target_cell_position, const char *cell_content_str);
|
|
|
|
/**
|
|
* @brief 在指定标题的列中指定单元格前插入
|
|
* @param target_column_title_str 目标列标题
|
|
* @param target_cell_position 目标单元格位置
|
|
* @param cell_content_str 单元格内容串
|
|
* @return CSV_Err 错误类型
|
|
*/
|
|
CSV_Type::CSV_Err insert_cell_before(size_t target_column_position, size_t target_cell_position, const char *cell_content_str);
|
|
|
|
/**
|
|
* @brief 导出到指定文件
|
|
* @param file_name_str 目标文件名
|
|
* @return CSV_Err 错误类型
|
|
*/
|
|
CSV_Type::CSV_Err export_to_file(const char *file_name_str);
|
|
};
|
|
|
|
#endif |