1

以下の更新

いくつかのJSONをループし、データを使用して複数の.CSVファイルを作成するRubyスクリプトがあります。現在、script/JSONと同じフォルダーにそれらを作成するだけです。ただし、タイムスタンプが付けられた新しく作成されたサブディレクトリにファイルを作成する必要があります。

私は私が必要であることを知っていますrequire 'fileutils.rb'そして私は作成time = Time.now.strftime("%Y%m%d%H%M%S%")しそしてoutdir = FileUtils.mkdir(time)

これらをスクリプトに追加すると、ディレクトリは正常に作成されますが、壊れます。

ファイルを作成するスクリプトの終わりは次のようになります。問題は、ディレクトリに移動する方法/新しいディレクトリにファイルを作成する方法にあると思います。

...
    outdir = FileUtils.mkdir(time)
    FileUtils.cd(outdir) do #I think this is wrong
      filename = k+".csv"
      out = CSV.open(filename, "w")
      csv.each{|item| out << item}
      out.close()
    end
  }

- -アップデート - -

問題は、dirパスとCSVモジュールを指定するときに発生するようです。Invalid argument - ["20130312113853"]/regions.csv (Errono::EINVAL) CSVモジュールのドキュメントを見ると、エラーが発生します。CSVを読み取るためのパスを宣言できますが、別のディレクトリでCSVを作成/書き込むことについては何も宣言できません。このモジュールを使用するのはこれが初めてです。誰かがこれにアプローチする方法を知っていますか?

前にcsvのdirパスを宣言する必要があると思いますcsv = []か?

全文:

#!/usr/bin/env ruby

require 'json' 
require 'csv'  
require 'fileutils.rb' 

file = "parse_me.json"

ff = JSON.parse(File.open(file).read)
time = Time.now.strftime("%Y%m%d%H%M%S")
outdir = FileUtils.mkdir(time)
begin
  ff.each{|k,h|
    csv = []
    csv << h[0].keys
    h.each{|arr|
      holder = []
      arr.each_value{|v|
        holder << v
      }
    csv << holder
    }
      out = CSV.open("#{outdir}/#{k}.csv", "w")
      csv.each{|item| out << item}
      out.close()
  }
end
4

1 に答える 1

2

これFileUtils.mkdirは、1つ以上のディレクトリを同時に作成できるため、作成されたディレクトリのを返すためArrayですArray

単にtime直接作業する場合は、コードが機能するはずです

...
FileUtils.mkdir(time)
FileUtils.cd(time) do
  filename = k+".csv"
  out = CSV.open(filename, "w")
  csv.each{|item| out << item}
  out.close()
end
于 2013-03-12T19:21:08.540 に答える