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

C#处理CSV转XML时如何在读取指定行数后终止foreach循环

实现方案

方法1:使用LINQ的Take()方法(推荐)

  • 代码改动最小,仅需调整遍历的集合对象,使用前需要先引入LINQ命名空间:using System.Linq;
  • 自动截取集合前N个元素遍历,无需额外写判断逻辑
    修改后的循环代码如下,原有循环内的XML写入逻辑不需要做任何改动:
// 括号内的数字替换为你需要停止的行数即可,这里示例取前10行处理
foreach (var line in lines.Take(10)){
    var csvItem = line.Split(';');
           
    writer.WriteStartElement("DC8_Recipe");
    writer.WriteAttributeString("PlantNo", "01");
    writer.WriteAttributeString("FactoryNo", "01");
    writer.WriteAttributeString("No", csvItem[0].Replace('"', ' '));
    writer.WriteAttributeString("Name", csvItem[2]);
    writer.WriteAttributeString("ShortName", csvItem[3]);
    writer.WriteEndElement();
    writer.WriteStartElement("RecipeSetValueRow");
    writer.WriteAttributeString("SetValue", csvItem[12]);
    writer.WriteStartElement("Material");
    writer.WriteAttributeString("No", csvItem[10]);
    writer.WriteEndElement();
    writer.WriteEndElement();
}

方法2:新增计数器手动终止循环

如果不想引入LINQ依赖,可以在循环内新增计数变量,达到指定行数后调用break直接退出循环:

int count = 0;
// 定义停止的行数阈值
int stopLine = 10;
foreach (var line in lines){
    if(count >= stopLine)
    {
        // 达到行数上限,直接终止循环
        break;
    }
    count++;
    // 原有循环内的XML写入逻辑保持不变
    var csvItem = line.Split(';');
           
    writer.WriteStartElement("DC8_Recipe");
    writer.WriteAttributeString("PlantNo", "01");
    writer.WriteAttributeString("FactoryNo", "01");
    writer.WriteAttributeString("No", csvItem[0].Replace('"', ' '));
    writer.WriteAttributeString("Name", csvItem[2]);
    writer.WriteAttributeString("ShortName", csvItem[3]);
    writer.WriteEndElement();
    writer.WriteStartElement("RecipeSetValueRow");
    writer.WriteAttributeString("SetValue", csvItem[12]);
    writer.WriteStartElement("Material");
    writer.WriteAttributeString("No", csvItem[10]);
    writer.WriteEndElement();
    writer.WriteEndElement();
}

补充说明

你原有代码已经通过lines.RemoveAt(0)删除了CSV的表头行,上述两种方法取到的10行都是表头后的有效业务数据,和需求匹配。另外建议把XmlTextWriter用using语句包裹,会自动释放资源、关闭文件流,不需要手动调用Close(),可以避免资源泄漏问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 07:36:04