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

GenericParserAdapter解析eBay交易CSV文件字段错误拆分问题求解

问题根因

你遇到的字段拆分错误由两个核心原因导致:

  1. 你的CSV数值字段使用逗号作为小数分隔符(如-1,29、4,43151),解析器默认将逗号识别为字段分隔符,未正确识别引号包裹的字段边界
  2. 该CSV采用标准CSV双引号转义规则:字段内的双引号用两个连续双引号""表示,同时整行额外包裹了一层双引号,默认配置的解析器无法适配这种格式

方案1:正确配置GenericParserAdapter

直接调整解析器参数即可适配当前CSV格式,参考配置代码:

using GenericParsing;

// 初始化解析器,支持传文件路径或文本流
using var parser = new GenericParserAdapter("目标文件路径.csv")
{
    // 字段分隔符设为逗号
    ColumnDelimiter = ',',
    // 字段包裹符号为双引号
    QuoteCharacter = '"',
    // 核心配置:双引号的转义字符为双引号本身,适配""转义规则
    QuoteEscapeCharacter = '"',
    // 若CSV首行是表头设为true,否则设为false
    FirstRowHasHeader = false,
    // 自动修剪字段前后的空白字符
    TrimWhitespace = true
};

// 添加行预处理逻辑,去掉整行外层包裹的多余双引号
parser.PreprocessLine += (sender, e) =>
{
    if (e.Line.StartsWith('"') && e.Line.EndsWith('"'))
    {
        e.Line = e.Line.Substring(1, e.Line.Length - 2);
    }
};

// 读取解析结果
while (parser.Read())
{
    // itemArray即为正确拆分的字段数组
    object[] itemArray = parser.GetValues();
}

方案2:正则拆分替代方案

如果调整解析器配置仍不生效,可以用正则表达式手动拆分,完全兼容当前格式:

using System.Text.RegularExpressions;

// 原始CSV行内容
string rawLine = "\"31 lip 2021,\"\"Inna opłata\"\",\"\"--\"\",\"\"--\"\",\"\"--\"\",\"\"--\"\",\"\"--\"\",\"\"--\"\",\"\"--\"\",\"\"--\"\",\"\"-1,29\"\",\"\"EUR\"\",\"\"2 sie 2021\"\",\"\"111\"\",\"\"mBank *7981\"\",\"\"Środki zostały wysłane\"\",\"\"--\"\",\"\"111\"\",\"\"--\"\",--,\"\"--\"\",\"\"--\"\",\"\"--\"\",\"\"--\"\",\"\"--\"\",\"\"--\"\",\"\"0%\"\",\"\"--\"\",\"\"--\"\",\"\"--\"\",\"\"--\"\",\"\"--\"\",\"\"-5,7\"\",\"\"PLN\"\",\"\"4,43151\"\",\"\"FEE-111\"\",\"\"Opłata za nazwę pomocniczą przedmiotu \"\"\"";

// 先去掉整行外层的双引号
string processedLine = rawLine.Trim('"');
// 匹配CSV字段的正则,适配双引号转义和字段内逗号
Regex csvRegex = new Regex(@"(?<=^|,)(?:""([^""]*(?:""""[^""]*)*)""|([^,]*))");
MatchCollection matches = csvRegex.Matches(processedLine);

List<string> fields = new List<string>();
foreach (Match match in matches)
{
    // 提取字段值,将转义的双引号""替换为单个"
    string fieldValue = match.Groups[1].Success 
        ? match.Groups[1].Value.Replace("\"\"", "\"") 
        : match.Groups[2].Value;
    fields.Add(fieldValue);
}

执行后fields列表即为正确拆分的字段,原本被误拆的-1,29、4,43151等字段会完整保留为单个元素。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 07:24:03