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

使用C#实现CSV转XML时分号分隔的CSV文件无法读取如何解决

解决方案

方案1:直接配置CsvReader的分隔符(推荐)

你使用的CsvReader默认分隔符为逗号,只需显式指定分隔符为分号即可适配分号分隔的CSV文件,不需要修改原文件内容。
如果你使用的是常用的LumenWorks.Framework.IO.Csv库的CsvReader,修改后的核心代码如下:

writer.WriteStartDocument();
writer.WriteStartElement("DC8_Recipes");

using (CsvReader reader = new CsvReader(path))
{
    // 新增这行指定分隔符为分号
    reader.Delimiter = ";";
    reader.ReadHeaders();

    while (reader.ReadRecord())
    {
        writer.WriteStartElement("DC8_Recipes");

        writer.WriteAttributeString("PlantNo", reader["id_imp"]);
        writer.WriteAttributeString("No", reader["nome_frm"]);
        writer.WriteAttributeString("Name", reader["desc_frm"]);

        writer.WriteEndElement();
    }
    reader.Close();
}

writer.WriteEndElement();
writer.WriteEndDocument();
writer.Close();


logText.Text += DateTime.Now + " Convertion Completed\n";
logText.Text += DateTime.Now + " Saving file to: " + savepath + "\n";
try
{
    logText.Text += DateTime.Now + " File save completed!\n";
    logText.Text += DateTime.Now + " process END\n";
}
catch
{

}

方案2:兼容逗号、分号两种分隔符

如果需要程序自动适配两种分隔符的CSV文件,可以读取首行后判断哪种分隔符出现次数更多,动态设置分隔符:

using (CsvReader reader = new CsvReader(path))
{
    // 读取首行判断分隔符
    string firstLine = File.ReadLines(path).First();
    int commaCount = firstLine.Count(c => c == ',');
    int semicolonCount = firstLine.Count(c => c == ';');
    reader.Delimiter = semicolonCount > commaCount ? ";" : ",";
    
    reader.ReadHeaders();
    // 后续逻辑和原有代码一致
}

注意事项

不建议直接全局替换分号为逗号:如果CSV字段内容被引号包裹,内部本身就含有分号,全局替换会破坏原有字段结构,导致字段读取错位、数据错乱,使用CsvReader自带的分隔符配置是最稳妥的方案。

内容的提问来源于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.30 05:39:05