Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/336.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 从复杂的CSV字段创建对象列表_C# - Fatal编程技术网

C# 从复杂的CSV字段创建对象列表

C# 从复杂的CSV字段创建对象列表,c#,C#,我真的不想在这里创建“黑客”代码,但我真的不确定最好的方法 我的公司采用了一项新功能,将CSV用作我们技术含量较低的客户的数据源,虽然大多数都是直截了当的,但我们有几个领域可能会失败 现在,我有一个字段“products”,其标题值为: 1.名称(1244)名称(名称)名称(名称)颜色(名称)颜色(颜色)颜色(颜色)尺寸(规模)数量(数量)零售价(零售价)净税(税务)总量(中文)营业税(名称)名称(名称)名称(名称)名称(名称)名称(名称)名称(名称)名称(名称)名称(名称)名称(名称)名称)名

我真的不想在这里创建“黑客”代码,但我真的不确定最好的方法

我的公司采用了一项新功能,将CSV用作我们技术含量较低的客户的数据源,虽然大多数都是直截了当的,但我们有几个领域可能会失败

现在,我有一个字段“products”,其标题值为:

1.名称(1244)名称(名称)名称(名称)颜色(名称)颜色(颜色)颜色(颜色)尺寸(规模)数量(数量)零售价(零售价)净税(税务)总量(中文)营业税(名称)名称(名称)名称(名称)名称(名称)名称(名称)名称(名称)名称(名称)名称(名称)名称(名称)名称)名称(名称)名称)名称(名称)名称)名称(名称)名称(名称)名称)名称)名称(名称)名称(名称)名称:定制(名称)习俗场场域(1)习俗(1)1)习俗(1)习俗场(1)习俗场(1)习俗场(2)习俗场(场(2)习俗场(习俗场(2)习俗场(2)习俗)习俗场(2)习俗场(2)海关)习俗场(2)习俗场(2)海关)习俗场(2)习俗场)海关)习俗场(2)习俗场(习俗场)海关)海关)习俗场(2)习俗场(海关)海关|u字段|u字段|u 14 | Custom|u字段|u 15 | Custom|u字段|u 16 | Custom|u字段|u 17 | Custom|u Field|U 18 |自定义|U字段| 19 |自定义|U字段| 20

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

字段值: 68977 | Lara | | | | 1 | 245.00 | 225 | 20.00 | 245.00 |/uploads/images/products/image|u main/Lara.jpg | Bundle 麦克拉伦| |||||||||||| | 68978 |瞪羚| 1 | 375.00 | 355 | 20.00 | 375.00 |/上传/图片/产品/图片|主/瞪羚羊.jpg | 米汉伦敦酒店|||||||||||||||||||||

正如您所看到的,一些值可以是“空”的,但via Spliting的中断却从未减少过

我真的很难找到创建健壮代码块的最佳方法

代码示例块:

     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;

          } 
     }
publicstaticlist ModelToCollection(CSVOrder源代码,
字符串(U id)
{
var collection=新列表();
if(!string.IsNullOrWhiteSpace(source.Products))
{
//1.名称(1244)名称(名称)名称(名称)颜色(名称)颜色(颜色)颜色(颜色)尺寸(规模)数量(数量)零售价(零售价)净税(税务)总量(中文)营业税(名称)名称(名称)名称(名称)名称(名称)名称(名称)名称(名称)名称(名称)名称(名称)名称(名称)名称)名称(名称)名称)名称(名称)名称)名称(名称)名称(名称)名称)名称)名称(名称)名称(名称)名称:定制(名称)习俗场场域(1)习俗(1)1)习俗(1)习俗场(1)习俗场(1)习俗场(2)习俗场(场(2)习俗场(习俗场(2)习俗场(2)习俗)习俗场(2)习俗场(2)海关)习俗场(2)习俗场(2)海关)习俗场(2)习俗场)海关)习俗场(2)习俗场(习俗场)海关)海关)习俗场(2)习俗场(海关)海关|u场ぱu场ぱu 14ぱ自定义ぱu场ぱu 15ぱ自定义ぱu场ぱu 16ぱ自定义ぱu场ぱu 17ぱ自定义ぱ场d|U 18 |自定义字段| 19 |自定义字段| 20
var productStringValues=Strings.SplitString(source.Products,“|”。.ToCharArray());
var count=productStringValues.count;
} 
}
我唯一想到的是创建一个38倍的集合,但感觉真的很“黑”

有什么想法吗


非常感谢,

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

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

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


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

不要滚动您自己的CSV解析代码。有许多图书馆已经克服了许多陷阱。我完全同意,我昨天开始使用CSVHelper。最终的结果是我创建了一个CSVOrder的平面对象,现在由于字段的性质,它为产品返回一个长字符串。因为它没有被分割成字段,所以我无法创建复杂的对象。。。它实际上是一个字段中的一个“巨大”字符串…是的,我在想类似的东西。。。但随后,我突然想到了“分块”。即“分块”到多个列表中,以38的多个。。。。无论哪种方式似乎都是非常“臭”的代码,我曾经采用过这种方法。。。。我会再打给你的。