好的......这里对Ruby很新,但到目前为止还很喜欢它。我的问题是我无法将数据输入CSV文件。
#!/usr/bin/env ruby
require 'date'
require_relative 'amf'
require 'json'
require 'csv'
amf = Amf.new
#This makes it go out 3 days
apps = amf.post( 'Appointments.getBetweenDates',
{ 'startDate' => Date.today, 'endDate' => Date.today + 4 }
)
apps.each do |app|
cor_md_params = { 'appId' => app['appID'], 'relId' => 7 }
cor_md = amf.post( 'Clinicians.getByAppIdAndRelId', cor_md_params ).first
#this is where it breaks ----->
CSV.open("ile.csv", "wb") do |csv|
csv << ["column1", "column2", "etc.", "etc.."]
csv << ([
# if added puts ([ I can display the info and then make a csv...
app['patFirstName'],
app['patMiddleName'],
app['patLastName'],
app['patBirthdate'],
app['patHin'],
app['patPhone'],
app['patCellPhone'],
app['patBusinessPhone'],
app['appTime'],
app['appID'],
app['patPostalCode'],
app['patProvince'],
app['locName'],
# note that this is not exactly accurate for follow-ups,
# where you have to replace the "1" with the actual value
# in weeks, days, months, etc
#app[ 'bookName' ], => not sure this is needed
cor_md['id'],
cor_md['providerCode'],
cor_md['firstName'],
cor_md['lastName']
].join(', '))
end
end
现在,如果我删除了制作ile.cvs文件的尝试并只输出了一个put,则显示所有数据。但我不想进入终端并创建一个csv文件...我宁愿只运行.rb程序并创建它。此外,希望我也能正确制作列...
我想到我可以在输出之上添加另一个put。 或者,更好的是,在输出之前在数组中插入一行......
真的不确定这里的最佳做法和标准。
这就是我所做的和尝试过的。我怎样才能将它干净地输出到CSV文件,因为我的尝试不起作用
此外,为了澄清它中断的位置,它确实添加了列名而不是解析的JSON信息。我也可以完全以错误的方式或不可能的方式做到这一点。我只是不知道。
答案 0 :(得分:1)
你得到什么样的错误?是这个:
<<': undefined method
map'for“something”:String(NoMethodError)
我想,你应该删除.join(',') &lt;&lt;&lt; CSV的方法接受数组,但不接受字符串
http://ruby-doc.org/stdlib-1.9.2/libdoc/csv/rdoc/CSV.html#method-i-3C-3C
所以而不是:
cor_md['lastName']
].join(', '))
,而:
cor_md['lastName']
])
在循环体中,您始终重新打开文件,并始终重写之前添加的内容。你想做什么,可能就是这样:
CSV.open("ile3.csv", "wb") do |csv|
csv << ["column1", "column2", "etc.", "etc.."]
apps.each do |app|
cor_md_params = { 'appId' => app['appID'], 'relId' => 7 }
cor_md = amf.post( 'Clinicians.getByAppIdAndRelId', cor_md_params ).first
#csv << your long array
end
end