こんにちは、CSV 形式の食品とレシピのデータベースを読み取り、それをファイルに書き戻す ruby プログラムを作成しています。CSV ファイルに正しく書き込む際に問題が発生しています
オブジェクトの属性を CSV ファイルに書き込みたい
csv_text = CSV.open("FoodDB1.txt","w") do |i|
@@dataList.each do |j|
if j.get_type == "b"
i << [j.name,j.get_type,j.cal]
elsif j.get_type == "r"
i << [j.name,j.get_type,j.print_bFood]
end
end
end
基本的な食べ物とレシピの 2 種類のオブジェクトがあります。どちらも dataList 配列に格納されます。各オブジェクトのタイプをチェックします。基本的な食べ物であれば、3 つの単純なフィールドだけなので簡単に記述できます。レシピであれば、名前、種類、そのレシピを構成する基本的な食材を書きます。
私が抱えている問題はこの行にあります
i << [j.name,j.get_type,j.print_bFood]
そのため、レシピの名前、タイプ (基本的な食品かレシピか)、そして最後にレシピ内の食品のリストを出力します。それが私が問題を抱えているところです。
bFood は、オブジェクトに格納されている基本的な食品の配列であり、CSV 行に追加するのに問題があります。結合した配列の文字列を.join(",")で返すメソッド(print_bFood)を作ってみたのですが、文字列にコンマが入っているため、CSVでファイルに書き込むと引用符で囲まれてしまいます
"PB&J Sandwich,r,"Jelly,Peanut butter,Bread slice, Bread slice""
こんな感じにしたい
"PB&J Sandwich,r,Jelly,Peanut butter,Bread slice, Bread slice"
何が役立つかについてのアイデア。これを行う方法を探しましたが、もう何も考えられません。
行に追加する機能があれば、bFood 配列を繰り返し処理して、それぞれを行に追加できるという考えがありましたが、それを実行できる機能は見つかりませんでした。