Проблема при сохранении полей в базу данных из CSV с использованием QuickSv - PullRequest
0 голосов
/ 24 марта 2011

Я пытаюсь сохранить данные в формате csv в элементах таблицы, связанных с моделью элементов.

Это то, что есть у моего csv:

'name';'number';'sub_category_id';'category_id';'quantity';'sku'; 'description';'cost_price';'selling_price'
'Uploaded Item Number 1';'54';'KRT';'WN';'67';'WNKRT0054';'Some Description here!!';'780';'890'
'Uploaded Item Number 2';'74';'KRT';'WN';'98;'WNKRT0074';'Some Description here!!';'8660';'9790'

В первой строке отображаются поля таблицы элементов.

Здесь я использую quickcsv для обработки моего csv и скрепки для загрузки.

Я могу обработать содержимое файла для чтения и заполнить поле. Вот код обработки:

def proc_csv
    @import = Import.find(params[:id])
    @lines = parse_csv_file(@import.csv.path)
    @lines.shift
        @lines.each do |line , j|
        unless line.nil?
        line_split = line.split(";")
         unless ((line_split[0].nil?) or (line_split[1].nil?) or (line_split[2].nil?) or (line_split[3].nil?) or (line_split[4].nil?) or (line_split[5].nil?))
         # I used puts to get to know about what's going on.
         puts "*"*50+"line_split[0]: #{line_split[0]}"+"*"*50 
         puts "*"*50+"line_split[1]: #{line_split[1]}"+"*"*50 
         puts "*"*50+"line_split[2]: #{line_split[2]}"+"*"*50 
         puts "*"*50+"line_split[3]: #{line_split[3]}"+"*"*50 
         puts "*"*50+"line_split[4]: #{line_split[4]}"+"*"*50 
         puts "*"*50+"line_split[5]: #{line_split[5]}"+"*"*50 
         puts "*"*50+"line_split[6]: #{line_split[6]}"+"*"*50
         puts "*"*50+"line_split[7]: #{line_split[7]}"+"*"*50
         puts "*"*50+"line_split[8]: #{line_split[8]}"+"*"*50

         @item = [:name => line_split[0], :number => line_split[1], :sub_category_id => line_split[2],:category_id => line_split[3],:quantity => line_split[4], :sku => line_split[5], :description => line_split[6], :cost_price => line_split[7], :selling_price => line_split[8]]
         puts "#"*100+"@item is: #{@item.inspect}"+"#"*100

         end
         end
        end
     redirect_to import_path(@import)
  end

но проблема в том, что когда он обрабатывает его и когда я проверяю элемент @ в консоли , он выглядит так:

####################################################################################################@item is: [{:quantity=>"\000'\0006\0007\000'\000", :name=>"\000'\000U\000p\000l\000o\000a\000d\000e\000d\000 \000I\000t\000e\000m\000 \000N\000u\000m\000b\000e\000r\000 \0001\000'\000", :sku=>"\000'\000W\000N\000K\000R\000T\0000\0000\0005\0004\000'\000", :cost_price=>"\000'\0007\0008\0000\000'\000", :number=>"\000'\0005\0004\000'\000", :selling_price=>"\000'\0008\0009\0000\000'\000", :sub_category_id=>"\000'\000K\000R\000T\000'\000", :description=>"\000'\000S\000o\000m\000e\000 \000D\000e\000s\000c\000r\000i\000p\000t\000i\000o\000n\000 \000h\000e\000r\000e\000!\000!\000'\000", :category_id=>"\000'\000W\000N\000'\000"}]####################################################################################################

####################################################################################################@item is: [{:quantity=>"\000'\0009\0008\000", :name=>"\000'\000U\000p\000l\000o\000a\000d\000e\000d\000 \000I\000t\000e\000m\000 \000N\000u\000m\000b\000e\000r\000 \0002\000'\000", :sku=>"\000'\000W\000N\000K\000R\000T\0000\0000\0007\0004\000'\000", :cost_price=>"\000'\0008\0006\0006\0000\000'\000", :number=>"\000'\0007\0004\000'\000", :selling_price=>"\000'\0009\0007\0009\0000\000'\000", :sub_category_id=>"\000'\000K\000R\000T\000'\000", :description=>"\000'\000S\000o\000m\000e\000 \000D\000e\000s\000c\000r\000i\000p\000t\000i\000o\000n\000 \000h\000e\000r\000e\000!\000!\000'\000", :category_id=>"\000'\000W\000N\000'\000"}]####################################################################################################

Может кто-нибудь любезно сказать мне, почему я получаю такую ​​строку вместо простой строки, которую я ввел в свой CSV-файл? И из-за этого он не сохраняется в таблицу items , я перепробовал все возможные форматы, но, похоже, ничего не работает. Я хочу :name => "Uploaded Item Number 1" вместо :name=>"\000'\000U\000p\000l\000o\000a\000d\000e\000d\000 \000I\000t\000e\000m\000 \000N\000u\000m\000b\000e\000r\000 \0001\000'\000". Любая помощь будет оценена. Заранее спасибо:)

1 Ответ

0 голосов
/ 24 марта 2011

После того, как я ударился головой о стену и разочаровался в этой проблеме, я понял, что это был мой CSV-файл, который не был в надлежащем формате (был в UTF16le), и когда я сделал другой CSV-файл в UTF-8кодирование, я получаю прорыв.Хотя у меня осталась еще одна проблема - строка, которая выглядит следующим образом: :name => "'Uploaded Item number 1'" Поэтому, когда она сохраняется в базе данных, столбец содержит данные: «Загруженный элемент № 1».Есть ли у вас какие-либо идеи, как я могу сделать это так: :name => "Uploaded Item number 1"?

...