【问题标题】:In C# how do I take a csv and seperate data into two tables depending on if the data is line data or header data在 C# 中,如何根据数据是行数据还是标题数据,将 csv 和数据分成两个表
【发布时间】:2021-02-05 12:11:31
【问题描述】:

我正在尝试执行以下操作,但在想出解决方案时真的很挣扎。请帮忙。

我有一个 CSV 文件,该文件包含与会计系统发票相关的数据。

发票可以包含我定义的标题和行数据。

标题数据是您的字段,例如客户姓名、参考资料、文档日期等。 行数据是重复的,可以是您的商品/服务和价格。

这两种类型的数据在一行中混合在一起。

例如下面的 3 行代表一张发票:

Line1: Customer Name, reference, document date, item1 price1
Line2: Customer Name, reference, document date, item2 price2
Line3: Customer Name, reference, document date, item3 price3

我想将行数据放入 1 个数据表中,将表头放入另一个数据表中。但是,由于上面的示例有 3 行,因此标题数据将重复 3 次。如何将数据添加到表头并防止重复。


编辑

大家好。对不起,我的解释很糟糕。这是一个例子:

一些数据:

Customer1, INV-184691035,Item1, 10.00
Customer1, INV-184691035,Item2, 20.00
Customer1, INV-184691035,Item3, 30.00
Customer2, INV-184691034,Item1, 10.00
Customer2, INV-184691034,Item2, 20.00
Customer2, INV-184691034,Item3, 30.00

我想将这样的数据分摊到 2 个表中:

标题

Customer1|INV-184691035
Customer2|INV-184691034

线条

INV-184691035 |Item1 |10.00
INV-184691035 |Item2 |20.00
INV-184691035 |Item3 |30.00
INV-184691034 |Item1 |10.00
INV-184691034 |Item2 |20.00
INV-184691034 |Item3 |30.00

这有意义吗?

【问题讨论】:

  • 请用随机数据在这个示例文件中添加更多行,最好发布一些您已经尝试过的代码。
  • 会建议您从 csv 和预期输出中发布更多数据。
  • 您要读取的 CSV 文件是否已排序?您可以安全地假设它将首先包含客户 1 的所有项目,然后是客户 2 等吗?如果是这样,只需在处理线路时跟踪客户何时发生变化。

标签: c# csv datatable


【解决方案1】:

所以您正在寻找一种方法来将此 csv 解析为表格,一个包含标题信息,一个包含行数据,对吧?

首先逐行读取csv,如下所示:

using(StreamReader SR = new StreamReader(path2file)){
line = SR.ReadLine();
var entries = line.Split(',');
//now move the elements of entries to the table where they belong, entries should be an array
}

读完之后,循环遍历包含标题的表并删除重复的条目。 这就是你要找的东西吗?

【讨论】:

    【解决方案2】:

    我想通了。我猜只是需要大声思考一下:)

    下面根据特定字段选择不同的值

    DataTable dt2 = dt.DefaultView.ToTable(true, "Test");
    
            foreach (DataRow r in dt2.Rows)
            {
               Console.WriteLine( r["Test"].ToString());
    
               
            }
    

    【讨论】:

      猜你喜欢
      • 2023-02-21
      • 2019-10-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-10-24
      • 2014-02-21
      • 2011-12-17
      相关资源
      最近更新 更多