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

如何将CSV文件按第6列拆分为两个List集合?

提取CSV每行第6列存入List的解决方案

你的问题回顾

你当前的代码能把CSV文件的所有行读取到lines列表,但误用了Take(6)/Skip()(这两个是用来操作行数量的),真正想要实现的是提取每行的第6列内容,存入第二个List。

你的原始代码片段:

//new List
List<string> lines = new List<string>();
List<string> lines2 = new List<string>();
// read and write data to list
for (int i = 0; i < fileName.Length; i++)
{
    string file = @"read\" + Path.GetFileName(fileName[i]);
    // load rows to list.
    lines = File.ReadLines(file).ToList();
    foreach (string line in lines)
    {
        // Variablen für lines
        string[] entries = line.Split(';');
        int length = entries.Length;
    }
}

正确实现方式

核心思路是:对每行拆分后的数组,取索引为5的元素(C#数组从0开始计数,第6列对应索引5),然后添加到lines2中。同时一定要加长度判断,避免索引越界报错。

方式1:在foreach循环中逐行添加

修改你的foreach部分即可:

foreach (string line in lines)
{
    string[] entries = line.Split(';');
    // 先检查数组长度,避免索引越界
    if (entries.Length >= 6)
    {
        // 第6列是索引5,添加到lines2
        lines2.Add(entries[5]);
    }
    else
    {
        // 可选:处理列数不足的情况,比如添加空字符串或者跳过
        lines2.Add(string.Empty);
        // 或者直接 continue; 跳过该行
    }
}

方式2:用LINQ一次性生成(更简洁)

如果喜欢LINQ风格,可以直接在读取行的时候就完成提取,不需要先存lines:

// 替换原有的lines赋值和foreach部分
lines2.AddRange(
    File.ReadLines(file)
        .Select(line => 
        {
            var entries = line.Split(';');
            return entries.Length >= 6 ? entries[5] : string.Empty;
        })
);

关键说明

  • Take(6)是取前6行,Skip(6)是跳过前6行,它们都是针对行集合的操作,和列无关,这是你之前误解的点。
  • 一定要加entries.Length >=6的判断,不然如果某行数据列数不足,会抛出IndexOutOfRangeException异常。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 06:28:23