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

C#读取CSV文件指定列并取最大值,解决字段含逗号取值错误问题

直接按逗号拆分CSV行无法处理被双引号包裹的含逗号字段,不要自行实现拆分逻辑,使用成熟的CSV解析方案即可解决问题。

方案1:使用.NET内置的TextFieldParser(无需第三方依赖)

该类出自Microsoft.VisualBasic程序集,C#可直接调用,原生支持符合RFC4180标准的CSV格式解析:
首先需要先添加对应引用:

  • .NET Framework项目:直接在项目引用管理器中添加Microsoft.VisualBasic程序集
  • .NET Core/.NET 5+项目:安装NuGet包 Microsoft.VisualBasic.Core
    改造后的代码如下:
using Microsoft.VisualBasic.FileIO;
using System.IO;
using System.Linq;

// 若你直接读取CSV源文件,可将new StringReader(...)替换为文件路径字符串,效率更高
List<int> results = new List<int>();
using (TextFieldParser parser = new TextFieldParser(new StringReader(string.Join(Environment.NewLine, strs))))
{
    parser.TextFieldType = FieldType.Delimited;
    parser.SetDelimiters(",");
    parser.HasFieldsEnclosedInQuotes = true; // 核心配置:自动识别引号包裹的字段,跳过字段内部的逗号
    while (!parser.EndOfData)
    {
        string[] fields = parser.ReadFields();
        // 新增校验避免索引越界、格式转换失败报错
        if (fields.Length > 12 && int.TryParse(fields[12], out int columnVal))
        {
            results.Add(columnVal);
        }
    }
}
int max = results.DefaultIfEmpty(0).Max();

方案2:正则拆分(仅适用于格式简单的CSV)

如果不想引入额外依赖,且确认你的CSV没有嵌套引号、字段内换行等复杂场景,可以用正则匹配仅拆分不在双引号内的逗号:

using System.Text.RegularExpressions;
using System.Linq;

var columnQuery = from line in strs
                  let elements = Regex.Split(line, ",(?=(?:[^\"]*\"[^\"]*\")*[^\"]*$)")
                                      .Select(field => field.Trim('"'))
                  where elements.Length > 12 && int.TryParse(elements[12], out _)
                  select Convert.ToInt32(elements[12]);

int max = columnQuery.DefaultIfEmpty(0).Max();

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 23:09:00