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

如何正确拆分内容含分隔符的CSV文件,避免引号内逗号被错误分割

CSV行正确拆分方案

推荐方案:使用官方内置解析类

直接调用.NET 原生提供的TextFieldParser类即可完美适配CSV的引号转义规则,无需自己处理边界逻辑,支持所有标准CSV格式场景,代码如下:

// 需引入命名空间,.NET Core、.NET 5+及所有.NET Framework版本均原生支持,无需额外安装依赖
using Microsoft.VisualBasic.FileIO;
using System.IO;

// 你的CSV行数据
string line = "1111,\"Company Name\",\"Street 70\",\"Building Nr.1, 1st Floor, Room 34\",City,2213";

using var stringReader = new StringReader(line);
using var csvParser = new TextFieldParser(stringReader);
// 配置分隔符为逗号
csvParser.SetDelimiters(",");
// 核心配置:开启引号包裹字段识别,会自动忽略引号内部的分隔符
csvParser.HasFieldsEnclosedInQuotes = true;

// 读取得到的就是拆分完成的正确结果
string[] values = csvParser.ReadFields();

手动实现拆分逻辑(仅适用自定义轻量场景)

如果不想引入Microsoft.VisualBasic命名空间,可以自己实现拆分逻辑,核心是遍历字符时标记当前是否处于引号内部,仅拆分非引号区间的逗号:

using System.Text;
using System.Collections.Generic;

public static List<string> SplitCsvLine(string csvLine)
{
    List<string> result = new List<string>();
    StringBuilder currentField = new StringBuilder();
    bool isInQuotes = false;

    foreach (char c in csvLine)
    {
        if (c == '"')
        {
            isInQuotes = !isInQuotes;
            currentField.Append(c);
        }
        else if (c == ',' && !isInQuotes)
        {
            result.Add(currentField.ToString());
            currentField.Clear();
        }
        else
        {
            currentField.Append(c);
        }
    }
    // 加入最后一个字段
    result.Add(currentField.ToString());
    return result;
}

调用该方法传入CSV行字符串,即可得到符合预期的拆分结果。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 04:57:05