You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

CSV文件行标记实现方案咨询:确保数据仅单次API提交

需求与问题
  • 学校作业场景:需逐行读取CSV文件(不全部加载至内存),解析后将数据提交至API
  • 核心约束:每条数据仅允许提交一次,需要在发送前标记待处理数据、提交后标记已完成数据
  • 当前困境:未找到可行的标记实现方案,曾考虑将已完成数据写入独立文件,通过对比跳过已处理行,现有核心代码如下:
if (File.Exists(@"C:\Users\Desktop\Book1.csv"))
{
using (StreamReader sr = new StreamReader(@"C:\Users\Desktop\Book1.csv"))
{
    string line;
    while (!sr.EndOfStream)
    {
        //split the line by comma
        line = sr.ReadLine();
        string[] split = line.Split(',');

        Field f1 = new Field();
        Field f2 = new Field();

        Payload payload = new Payload(new List<Field>() { f1, f2 }, DateTime.UtcNow, DateTime.UtcNow);

        //Prepare the payload
        string json = JsonSerializer.Serialize(payload);

        var response = Request.Post(json);
        if (response.Result != true)
        {
            tsError.TraceEvent(TraceEventType.Error, 3, "Error Occured");
        }
        else
        {
            ts.TraceInformation("completed");
        }
        
        ts.Flush();
        tsError.Flush();
    }
}}
可行实现思路

方案1:独立标记文件记录已处理标识

  • 为CSV每行生成唯一标识(比如行号+数据哈希值,避免重复数据误判)
  • 用文本文件或轻量数据库(如SQLite)存储已成功提交的行标识
  • 读取CSV前,先将已完成标识加载到内存集合(内存占用极低)
  • 逐行读取CSV时,先计算当前行标识,若已在集合中则跳过;提交成功后将标识写入标记存储

方案2:修改原CSV添加状态列

  • 在CSV末尾新增status列,值设为pending(初始)、completed(提交成功)、failed(提交失败)
  • 读取时直接跳过status为completed的行
  • 提交成功后,通过记录行偏移量,用FileStream定位当前行并更新status为completed;失败则标记为failed
  • 注意:需避免覆盖整个文件,采用随机访问方式修改指定行

方案3:临时文件分阶段处理

  • 初始将原CSV复制为「待处理文件」,同时创建「已完成文件」和「错误文件」
  • 每次读取待处理文件的一行,提交成功后将该行追加写入已完成文件,并从待处理文件删除该行;失败则写入错误文件
  • 待处理文件为空时任务完成,后续重启直接从待处理文件继续执行

内容的提问来源于stack exchange,提问作者zzzz

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.08 01:20:37