2014-09-28 121 views
0

好吧......對Ruby來說這麼新,但是到目前爲止還是很喜歡它。我的問題是我無法獲取數據進入CSV文件。現在把json數據轉換成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文件,只是一個放輸出它,所有的數據顯示。但我不想進入終端並創建一個csv文件...我寧願運行.rb程序並創建它。另外,希望我正在製作正確的列...

想到我可以在輸出之上添加另一個輸入。 或者,更好的是,在我輸出之前插入一行到陣列中......

真的不知道這裏和標準的最佳做法是什麼。

這就是我所做的和嘗試的。我怎樣才能得到它乾淨地輸出到一個CSV文件,因爲我的企圖不工作

此外,爲了澄清它在哪裏打破,它確實添加列名稱而不是解析的JSON信息。我也可以完全按照錯誤的方式或者不可能的方式來做這件事。我只是不知道。

回答

1

你會得到什麼樣的錯誤?它是這一個:

<<': undefined method圖 '的 「東西」:字符串(NoMethodError)

我想,你應該刪除。加入('「) CSV的< <方法接受一個數組,但不是一個String

http://ruby-doc.org/stdlib-1.9.2/libdoc/csv/rdoc/CSV.html#method-i-3C-3C

所以不是:

cor_md['lastName'] 
].join(', ')) 

寧:

cor_md['lastName'] 
]) 
  • 與迴路(爲什麼只寫1行數據)
  • 在你的循環體的問題,你總是重新打開該文件,並且總是重寫之前添加的內容。你想要做的,可能是這樣的:

    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 
    
    +0

    啊!這工作,但現在的問題是,我只得到1行數據,所以看起來像我需要更多的工作來做所有的數據輸出...可能的循環..不知道... – 2014-09-29 16:31:57