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」のような値が含まれており、アンダースコアで分割して 2 つの別々の (新しい) 列に格納したいと考えています。すべてのエントリがこのような値を持つわけではなく、最初の部分 (UPC) だけを含むエントリもあります。既に UPC および ISRC 列が提供されていることは認識していますが、これらは私にとって有用な方法で入力されていません。

誰でもこれを行う正しい方法を提案できますか? 以下は完全にナンセンスであることはわかっていますが、次のようなことを考えています。

'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

複数の分割や条件は必要ありません。行ごとに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 に答える