Skip to content

J356365/csv_cleaner

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

10 Commits
 
 
 
 
 
 
 
 

Repository files navigation

CSV 数据清洗命令行工具

项目简介

本项目是一款基于 C++ 标准库开发的轻量级 CSV 数据清洗命令行工具,全程通过 Kilo Code 智能体辅助完成开发。工具支持 CSV 文件空行过滤、字段空格清理、整行去重等核心清洗能力,同时具备完善的参数校验、异常处理与清洗统计功能,可快速完成结构化 CSV 数据的基础清洗工作。

一、选题说明

选题背景

CSV 是数据分析、数据处理场景中最通用的结构化数据格式。实际工作中,原始导出的 CSV 数据常存在空行冗余、字段前后空格不规范、数据行重复等脏数据问题,手动清理效率低且易出错。

选择 CSV 清洗工具作为开发主题,具备清晰的实用价值与明确的功能迭代路径,非常适合通过 AI 协同模式进行分轮次渐进式开发,能够完整体现需求拆解、指令编写、代码验证的全流程能力。

功能亮点

  • 纯 C++ 标准库实现,无第三方依赖,可跨平台编译
  • 三级清洗能力:空行过滤 → 字段粒度空格清理 → 整行去重
  • 完善的异常处理:参数缺失校验、文件打开失败处理、空文件识别
  • 清洗结果可视化统计:输出总行数、空行数、去重行数、最终保留行数
  • 输出文件自动命名:原文件名_cleaned.csv,不覆盖原始数据

二、开发环境与工具

  • 开发语言:C++(C++11 标准)
  • 辅助开发工具:Kilo Code 智能体
  • 编译环境:MinGW GCC 4.9.2(命令行调用,工具链来自 Dev-C++ 安装目录),编译时指定 -std=c++11 标准
  • 版本管理:Git + 公开远程仓库(GitHub)
  • 开发模式:7 轮渐进式迭代,每轮聚焦单一核心功能

三、功能迭代总览

项目共分为 7 轮功能迭代,遵循「基础能力 → 核心清洗 → 细节优化 → 健壮性提升」的开发节奏:

轮次 核心功能 提交类型
第1轮 实现 CSV 文件基础读取与控制台逐行打印 feat
第2轮 新增空行清洗功能,自动输出清洗后结果文件 feat
第3轮 新增整行去重功能,表头行不参与去重逻辑 feat
第4轮 新增字段粒度首尾空格清理,统一单元格格式 feat
第5轮 完善参数校验与异常处理,覆盖多类异常场景 fix
第6轮 新增清洗统计输出,展示清洗过程各项数据 feat
第7轮 代码结构优化与注释完善,提升可读性 refactor

四、提示词设计方法

本项目采用「渐进式迭代、单轮单一职责」的提示词设计思路,核心设计原则如下:

  1. 需求分层,逐步迭代 按照「基础读取 → 清洗功能 → 格式规整 → 健壮性补全」的顺序拆分需求,每轮仅聚焦一个核心功能点,避免单次需求过于复杂导致智能体输出偏差,同时便于单轮独立验证。

  2. 明确约束,规避偏差 每轮指令中都明确指定边界与约束条件,包括:

    • 必须仅使用 C++ 标准库,不得引入第三方依赖
    • 不得改动已有功能逻辑,保证迭代向下兼容
    • 明确定义规则(如空行定义为 trim 后长度为 0、表头不参与去重等)
  3. 输入输出定义清晰 每轮指令都明确指定输入格式、输出规则、命名规范,例如输出文件命名规则、控制台提示信息格式、错误信息统一前缀,保证智能体输出符合预期。

  4. 先功能后健壮 优先完成核心业务功能,再补充异常处理、边界场景兼容、统计信息等辅助能力,符合正常项目开发节奏,也便于每轮单独验证。

五、JSONL 文件生成方法

项目严格遵循自定义 JSONL 标准格式,完整记录 7 轮交互过程,生成流程如下:

  1. 单轮验证通过后提交代码 每轮功能开发、本地编译验证通过后,执行 Git 提交,确保一次提交对应一轮功能迭代,提交语义清晰。中间的工程配置类提交(如添加 .gitignore)单独处理,不计入功能轮次。

  2. 提取对应代码差异 diff 使用 git diff 命令提取相邻两轮功能提交之间的代码变更,确保 diff 内容与本轮指令严格对应,不混入其他无关修改。工程配置类提交(如 .gitignore)在生成 diff 时跳过,仅保留功能提交之间的变更。

    示例命令:

    git diff 上一轮功能提交哈希 本轮功能提交哈希
  3. 智能体辅助格式化生成 将每轮的提示词原文、对应 diff 文本、提交哈希与时间逐轮提交给智能体,由智能体按规范格式组装为单行 JSON 并逐条追加至 JSONL 文件。智能体仅负责格式化和归档,实际数据由开发者从开发过程真实提取。

  4. 校验脚本最终验证 全部记录完成后,通过自校验脚本逐行解析验证,确认以下内容:

    • 每行 JSON 格式合法
    • 所有字段完整无缺失
    • 提交哈希与 Git 日志一一对应
    • 时间顺序与提交历史一致
    • 轮次编号连续不重复

六、开发过程中的问题与解决方案

1. 编译器环境识别问题

问题描述:系统终端无法识别 g++ 命令,Git Bash 自带的 MinGW 编译器未配置系统环境变量。 解决方案:开发阶段直接使用 Git Bash 终端执行编译(Git Bash 自动包含 MinGW 路径),不阻塞开发进度。

2. 旧版编译器 C++ 标准兼容问题

问题描述:默认采用的 C++98 标准不支持 std::ifstream 直接接收 std::string 参数、std::unordered_set 等 C++11 特性,编译报错。 解决方案:编译时添加 -std=c++11 参数指定编译标准,无需修改代码逻辑即可正常编译通过。

3. 终端中文乱码问题

问题描述:源码文件为 UTF-8 编码,Windows 控制台默认 GBK 编码,直接运行时控制台中文提示乱码。 当前状态:编译时尝试添加 -finput-charset=UTF-8 -fexec-charset=UTF-8 参数并切换控制台编码(chcp 65001),但因工具链限制未能完全解决。当前版本控制台中文提示仍存在乱码,程序核心清洗功能不受影响,输出文件内容正常。

4. 字段级空格清洗的去重效果问题

问题描述:第 3 轮去重基于整行 trim 后的结果判断,但字段内部的空格(如 李四 李四)未被清理,导致实为重复的行因字段内空格差异无法被正确去重。 解决方案:第 4 轮新增字段级空格清理功能(trimCsvFields),按逗号分割后逐个字段去空格再重新拼接,解决了因字段内首尾空格导致的去重遗漏问题。

5. Git 提交与轮次 diff 对应问题

问题描述:开发中途添加 .gitignore 配置提交,插入在两轮功能迭代之间,若直接跨提交生成 diff,会混入配置文件变更,与本轮功能指令不匹配。 解决方案:严格按照「功能轮次」生成 diff,每轮 diff 仅对比相邻两次功能提交,排除中间的工程配置类提交,确保 diff 内容与当轮指令一一对应。

七、使用说明

编译

g++ -std=c++11 -finput-charset=UTF-8 -fexec-charset=UTF-8 main.cpp -o csv-cleaner.exe

运行

./csv-cleaner.exe 待清洗文件.csv

输出

  • 同目录下生成 待清洗文件_cleaned.csv 清洗结果
  • 控制台输出清洗统计信息

八、项目总结

本项目通过 7 轮 AI 协同迭代,完整实现了 CSV 清洗工具从 0 到 1 的开发。开发过程中遵循渐进式迭代思路,合理拆分需求,通过明确的提示词约束保证智能体输出质量,同时在实际环境中解决了编译兼容、编码、版本管理等工程问题,最终交付了功能完整、过程可追溯、符合考核规范的项目成果。

About

clean csv data

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages