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
为了解决这个问题,我不仅将空格声明为每个字符串的默认参数,而且在脚本的另一部分,我循环遍历每个字符串 - 如果它为空,我附加一个空格。仍然没有运气。
我有一个与上面的函数几乎相同的函数,但它对一组略有不同的数据进行操作——一个没有任何空字符串的数据——而且效果很好。我还测试了附加空格的代码,它也可以正常工作。
那么,我做错了什么?