2

我正在使用以下方法成功地从 iTunes 导入销售数据:

FasterCSV.parse(uploaded_io, {:headers => true, :col_sep =>"\t"}).each do |row_data|

        new_record = AppleSale.new(
            'provider' =>  row_data[0],
            'provider_country' => row_data[1],
            'vendor_identifier' => row_data[2],
            'upc' => row_data[3],
            'isrc' => row_data[4],
            'artist_show' => row_data[5],
            'title' => row_data[6],
            'label_studio_network' => row_data[7],
            'product_type_identifier' => row_data[8],
            'units' => row_data[9],
            'royalty_price' => row_data[10],                    
            'download_date' => row_data[11],
            'order_id' => row_data[12],
            'postal_code' => row_data[13],
            'customer_identifier' => row_data[14],
            'report_date' => row_data[15],
            'sale_return' => row_data[16],
            'customer_currency' => row_data[17],
            'country_code' => row_data[18],
            'royalty_currency' => row_data[19],
            'preorder' => row_data[20],
            'isan' => row_data[21],
            'customer_price' => row_data[22],
            'apple_identifier' => row_data[23],
            'cma' => row_data[24],
            'asset_content_flavor' => row_data[25],
            'vendor_order_code' => row_data[26],
            'grid' => row_data[27],
            'promo_code' => row_data[28],
            'parent_identifier' => row_data[29]

        )
        new_record.save
    end

但是,“vendor_order_code”包含像“0711297494143_CADE70900648”这样的值,我想在下划线上拆分并存储在两个单独的(新)列中。并非所有条目都有这样的值,有些只包含第一部分(UPC)。我意识到已经提供了 UPC 和 ISRC 列,但是这些列并没有以对我有用的方式填充,拆分 vendor_order_code 是我可以做我需要做的唯一方法。

谁能建议这样做的正确方法?我知道以下内容完全是胡说八道,但我正在考虑以下内容:

'vendor_order_code' => row_data[26],
'vendor_order_code_UPC' => row_data[26].split("_")...and save just the first half regardless of whether split occurred.
'vendor_order_code_ISRC' => row_data[26].split("_")..and save just the second half if it exists
4

2 回答 2

1

不需要多个拆分和/或条件;match每行只有一次。

FasterCSV.parse(uploaded_io, {:headers => true, :col_sep =>"\t"}).each do |row_data|

    full, upc, _discard, isrc = row_data[26].match(/^([^_]+)(_(.+))?/).to_a

    new_record = AppleSale.new(
        'provider' =>  row_data[0],
        'provider_country' => row_data[1],
        'vendor_identifier' => row_data[2],
        'upc' => row_data[3],
        'isrc' => row_data[4],
        'artist_show' => row_data[5],
        'title' => row_data[6],
        'label_studio_network' => row_data[7],
        'product_type_identifier' => row_data[8],
        'units' => row_data[9],
        'royalty_price' => row_data[10],                    
        'download_date' => row_data[11],
        'order_id' => row_data[12],
        'postal_code' => row_data[13],
        'customer_identifier' => row_data[14],
        'report_date' => row_data[15],
        'sale_return' => row_data[16],
        'customer_currency' => row_data[17],
        'country_code' => row_data[18],
        'royalty_currency' => row_data[19],
        'preorder' => row_data[20],
        'isan' => row_data[21],
        'customer_price' => row_data[22],
        'apple_identifier' => row_data[23],
        'cma' => row_data[24],
        'asset_content_flavor' => row_data[25],
        'vendor_order_code' => full,
        'vendor_order_code_UPC' => upc,
        'vendor_order_code_ISRC' => isrc,
        'grid' => row_data[27],
        'promo_code' => row_data[28],
        'parent_identifier' => row_data[29]

    )
    new_record.save
end
于 2012-07-10T11:09:36.127 回答
0

你可以试试:

'vendor_order_code' => row_data[26],
'vendor_order_code_UPC' => row_data[26].split("_").first
'vendor_order_code_ISRC' => row_data[26].split("_").last if row_data[26].match(/_/)
于 2012-07-10T11:05:49.063 回答