首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >使用c#合并CSV中具有相同单元格的7行

使用c#合并CSV中具有相同单元格的7行
EN

Stack Overflow用户
提问于 2017-06-21 19:29:00
回答 1查看 532关注 0票数 0

我已经根据一个特定的子集将一个xml文件转换为csv文件。这是我获得 csv file example的结果

在文件中我有3个产品,每个产品占7行,我希望合并每个产品的所有细节,因为许多单元格值是相同的。

我希望我的结果是跟随expected result of csv file

我如何在c#中做到这一点?

注意,我的列数保持不变

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-07-20 07:26:22

您可以使用linq根据请求合并相关的行。

假设,您定义了一个对象来表示每个CSV行,如下所示(为了澄清,只提到了几列)

代码语言:javascript
运行
复制
public class Item
{
    public string szItemId { get; set; }
    public string szName { get; set; }
    public string lRetailStoreID { get; set; }
    public string szDesc { get; set; }
}

现在很难使用Linq projection query合并它们,如下所示

代码语言:javascript
运行
复制
var recs =  p.Where(r => !String.IsNullOrEmpty(r.szItemId)).GroupBy(r => r.szItemId)
    .Select(g => new {
    szItemId = g.Key,
    szName = g.Where(i1 => !String.IsNullOrEmpty(i1.szName)).Select(i1 => i1.szName).FirstOrDefault(),
    lRetailStoreID = g.Where(i1 => !String.IsNullOrEmpty(i1.lRetailStoreID)).Select(i1 => i1.lRetailStoreID).FirstOrDefault(),
    szDesc = g.Where(i1 => !String.IsNullOrEmpty(i1.szDesc)).Select(i1 => i1.szDesc).FirstOrDefault()
});

上面的查询给出了来自输入csv文件的合并行。现在您可以迭代并将它们写入CSV。

希望这能有所帮助。

使用Cinchoo ETL -一个开源框架,您只需几行代码即可快速读取和编写CSV文件,如下所示

代码语言:javascript
运行
复制
using (var p = new ChoCSVReader("mergeinput.csv").WithFirstLineHeader())
{
    var recs = p.Where(r => !String.IsNullOrEmpty(r.szItemId)).GroupBy(r => r.szItemId)
        .Select(g => new {
            szItemId = g.Key,
            szName = g.Where(i1 => !String.IsNullOrEmpty(i1.szName)).Select(i1 => i1.szName).FirstOrDefault(),
            lRetailStoreID = g.Where(i1 => !String.IsNullOrEmpty(i1.lRetailStoreID)).Select(i1 => i1.lRetailStoreID).FirstOrDefault(),
            szDesc = g.Where(i1 => !String.IsNullOrEmpty(i1.szDesc)).Select(i1 => i1.szDesc).FirstOrDefault()
        });

    using (var o = new ChoCSVWriter("mergeoutput.csv").WithFirstLineHeader())
    {
        o.Write(recs);
    }
}

披露:我是这个库的作者

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/44674843

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档