2017-03-22 14 views
0

ここで「ハッキー」コードを作成しようとはしませんが、実際には最良のアプローチについては確信がありません。複雑なCSVフィールドのオブジェクトリストを作成

私の会社では、技術的ではないクライアントのデータソースとしてCSVを使用する新機能を採用していますが、大多数は非常に単純ですが、潜在的に落ちる可能性のあるいくつかのフィールドがあります。

名前| |色|サイズ|数量| RetailPrice |ネット|税務| |総ProductImage |ブランド| Custom_Field_1

ID:

は、今の時点で私はのヘッダ値を持つフィールド "製品" を持っています| 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 | Custo m_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 |バンドル MACLAREN |||||| |||||||||| 68978 |ガゼル||| 1 | 375.00 | 355 | 20.00 | 375.00 | /uploads/images/products/image_main/gazelle.jpg | Cara ミーハンロンドン|| |||||||||||||

ご覧のとおり、いくつかの値は「空」でもかまいませんが、ビアスプリットのブレークは少なくありません。

堅牢なコードブロックを作成するための最良の方法を見つけるのは本当に苦労しています。コードの

サンプルブロック:心にスプリング

 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の倍数でコレクションを作成しているが、それは本当に「ハック」と感じています。

アイデア?感謝

、あなたはパイプ記号で区切られたデータ項目の1つの文字列として「製品」を取得しているように見えます

+2

独自のCSV解析コードをロールしないでください。すでに多くの落とし穴を克服してきた多くの図書館があります。それらの1つを使用してください。 – hatchet

+0

@hatchet私は完全に同意する、私は昨日CSVHelperを使い始めた。最終的には、CSVOrderのフラットオブジェクトを作成しました。これは、フィールドの性質上、製品の長い文字列を返します。フィールドに分割されていないので、複雑なオブジェクトを作成することはできません...文字通りフィールド内に「巨大な」文字列が1つあります。 –

答えて

0

しかし、「製品」を取得したときに見ているのは、データ項目がパイプ記号で区切られた「製品」の区切られたリストです。このすべてのデータ(フィールド内のすべての「製品」)を取り、パイプシンボルを使用して分割すると、それぞれの製品ではなく、すべての「製品」のデータ項目が大量に表示されます。

ここでの微妙な違いに注意してください。 '製品'のリストを取得するには、それぞれの '製品'を区切り記号(おそらく復帰、多分何か他のもの)で取り出す必要があります。次に、それぞれの「製品」に対して、パイプ区切り記号を使用して、それが持つ38のデータ項目のそれぞれを取得することができます。

次に、それぞれの「製品」をリストに追加できます。

+0

はい、私は何か似たようなことを考えていましたが、 I.Eは38の倍数で複数のリストに「チャンク」しています....どちらの方法も本当に「臭いのある」コードであると思われますが、それは私が取るアプローチです....私はあなたに連絡します。 –

関連する問題