2016-12-15 12 views
0

私は以下のコードを使用してヘッダを含むcsvファイルに自分のハッシュマップを書きます。しかし、私が気づくのは、最初のデータ行がファイルで利用できないということです。私はヘッダーと他のすべての行を正確にすることができますcsvへの書き込みは最初の行を省略しています

def self.execute_auto_pg_debtors pg_debtors_dt_list 

    partition_key = Date.today.prev_day.prev_day.strftime "%Y%m%d" 
    csvfilename = "PG_Debtors_" + partition_key + ".CSV" 

    pg_debtors_dt_batch = Array.new 
    rowid = 0 

    pg_debtors_dt_list.each { |x| 
    pg_debtors_details = Hash.new 
    pg_debtors_details["Store_Order_Id"] = x['Store_Order_Id'] 
    pg_debtors_details["Transaction_Id"] = x['Transaction_Id'] 
    pg_debtors_details["Gateway_Payment_Id"] = x['Gateway_Payment_Id'] 
    pg_debtors_details["PPS_Id"] = x['PPS_Id'] 
    pg_debtors_details["Event_Type"] = x['Event_Type'] 
    pg_debtors_details["Event_Date"] = x['Event_Date'] 
    pg_debtors_details["Gateway_Name"] = x['Gateway_Name'] 
    pg_debtors_details["Open_Amount"] = "%f" % x['Open_Amount'] 
    pg_debtors_details["Invoice_No"] = x['Invoice_No'] 

    pg_debtors_dt_batch << pg_debtors_details 

    rowid += 1 
    if rowid == 1 
     CSV.open(csvfilename, "w") do |csv| 
     csv << pg_debtors_details.keys# adding header row (column labels) 

    end 
    else 
     CSV.open(csvfilename, "a") do |csv| 
     csv << pg_debtors_details.values# of if/else inside hsh 
    end# of hsh's (rows) 
end# of csv open 
} 

    return pg_debtors_dt_batch 
end 

助けてください。

答えて

1

最初の行ではなくヘッダーを作成しています。

私はあなたがファイルを開き、CSV.open do ... end

の内側にあなたのハッシュを反復処理し、あなたのif rowid == 1elseを使用しないことを、お勧めします。ただのためにそれを実行するので、データ行1をスキップしないでください

1

rowidをチェックしても、.eachループはまだそれを認識しません。したがって、rowid == 1の場合、ヘッダーが書き込まれますが、次の反復では、xは、pg_debtors_dt_listの2番目の項目を指します。次の順序であなたのコードを記述し、それを解決するために

  1. は、ファイルを開き、最初のヘッダを書きます。
  2. をループし、pg_debtors_dt_listを返し、後続のデータをファイルに書き込みます。

希望します。

関連する問題