def export_no_sdesc(item_no = " ", make = " ", model = " ", list_price = " ", long_desc = " ", global_image_path = " ")
final_image_path = global_image_path + item_no + ".jpg"
final_thumbs_path = global_image_path + "thumbs/" + item_no + ".jpg"
Dir.glob("body.tmp") do |filename|
body = file_as_string(filename)
body = body.gsub("item_no", item_no).gsub("image_path", final_image_path).gsub("image_thumb", final_thumbs_path)
body = body.gsub("part_make", make).gsub("part_model", model).gsub("long_desc", long_desc).gsub("list_price", list_price)
File.open('page_export.html', 'a') do |x|
x.puts body
x.close
end
end
end
Приведенная выше функция дает мне припадки.Во-первых, он читает некоторые строки из текстового файла.Затем он читает текстовый файл, который является шаблоном для части таблицы HTML.Затем он заменяет определенные ключевые слова в файле шаблона содержимым строк и, наконец, помещает их в новый текстовый файл (page_export.html).
Проблема заключается в том, что некоторые поляимпортируемые в текстовый файл пустые или, по крайней мере, я думаю, что это проблема.В любом случае, я получаю эту ошибку:
john@starfire:~/code/ruby/idealm_db_parser$ ruby html_export.rb
html_export.rb:34:in `gsub': can't convert nil into String (TypeError)
from html_export.rb:34:in `export_no_sdesc'
from html_export.rb:31:in `glob'
from html_export.rb:31:in `export_no_sdesc'
from html_export.rb:82
from html_export.rb:63:in `each'
from html_export.rb:63
from html_export.rb:56:in `glob'
from html_export.rb:56
Чтобы исправить это, я не только объявил пробел в качестве аргумента по умолчанию для каждой строки, но и в другой части скрипта я перебираю каждую строку -и если он пуст, я добавляю пробел.Все еще не повезло.
У меня есть функция, которая почти идентична приведенной выше, но она работает с немного другим набором данных - той, у которой нет пустых строк - и она прекрасно работает.Я также протестировал код, который добавляет пробелы, и он тоже работает нормально.
Итак, что я делаю не так?