从复杂的CSV字段

时间:2017-03-22 17:27:05

标签: c#

真的不想创造" hacky"代码在这里,但我真的不确定最佳方法。

我的公司已经采用了一项新功能,将CSV用作技术较少的客户的数据源,而大多数人非常直接,我们有几个领域可能会倒下......

现在我有一个领域"产品"其标头值为:

  

ID |名称|颜色|大小|数量| RetailPrice |网络|税务|张| ProductImage |品牌| CUSTOM_FIELD_1 | CUSTOM_FIELD_2 | Custom_Field_3 | Custom_Field_4 | Custom_Field_5 | Custom_Field_6 | Custom_Field_7 | Custom_Field_8 | Custom_Field_9 | Custom_Field_10 | Custom_Field_11 | Custom_Field_12 | Custom_Field_13 | Custom_Field_14 | Custom_Field_15 | Custom_Field_16 | Custom_Field_17 | Custom_Field_18 | Custom_Field_19 | Custom_Field_20

在此字段中,它可以包含多个产品,所有产品都通过" |"经过一些初步测试,我创建了一个包含38个值的字符串集合,38个值与标题值中的各个项目相对应。

  

字段值   68977 |拉拉||| 1 | 245.00 | 225 | 20.00 | 245.00 | /uploads/images/products/image_main/lara.jpg |捆绑   麦克拉伦||||||||||||||||||||| 68978 |瞪羚||| 1 | 375.00 | 355 | 20.00 | 375.00 | /uploads/images/products/image_main/gazelle.jpg |卡拉   Meehan London |||||||||||||||||||||

正如您所看到的,某些值可能是空的"但是,通过分裂仍然会有更少的突破。

我真的很难找到创建强大代码块的最佳方法。

示例代码块:

     public static List<Model.DataAPI.Product> ModelToCollection(CSVOrder source,
                                                        string shipment_id)
     {
        var collection = new List<Model.DataAPI.Product>();
        if (!string.IsNullOrWhiteSpace(source.Products))
         {
            //ID|Name|Color|Size|Quantity|RetailPrice|Net|Tax|Total|ProductImage|Brand|Custom_Field_1|Custom_Field_2|Custom_Field_3|Custom_Field_4|Custom_Field_5|Custom_Field_6|Custom_Field_7|Custom_Field_8|Custom_Field_9|Custom_Field_10|Custom_Field_11|Custom_Field_12|Custom_Field_13|Custom_Field_14|Custom_Field_15|Custom_Field_16|Custom_Field_17|Custom_Field_18|Custom_Field_19|Custom_Field_20

             var productStringValues = Strings.SplitString(source.Products, "|".ToCharArray());
              var count = productStringValues.Count;

          } 
     }

唯一想到的是,创造一个38的倍数的集合,但感觉真的&#34; hacky&#34;。

有什么想法吗?

非常赞赏,

1 个答案:

答案 0 :(得分:0)

看起来您正在将“产品”检索为由管道符号分隔的单个数据项字符串。

但是,当您获得“产品”时,您所看到的是“产品”的分隔列表,其中的数据项由管道符号分隔。当您获取所有这些数据(字段中的所有“产品”)并使用管道符号进行拆分时,您将获得所有“产品”的大量数据项 - 而不是每个产品。

注意这里的细微差别;您需要通过其分隔符(可能是回车符,可能是其他东西)检索每个“产品”以获取“产品”列表。然后,对于每个“产品”,您可以使用管道分隔符来获取它拥有的38个数据项中的每一个。

然后,您可以将每个“产品”添加到列表中。