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
これを改善するために、各文字列のデフォルト引数として空白を宣言しただけでなく、スクリプトの別の部分で各文字列をループ処理し、空の場合は空白を追加しました。まだ運がありません。
上記の関数とほぼ同じ関数がありますが、わずかに異なるデータセット (空の文字列を含まないもの) で動作し、うまく機能します。空白を追加するコードもテストしましたが、問題なく動作します。
それで、私は何を間違っていますか?