我正在使用下面的代码将我的Hashmap编写成带有标题的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
请帮忙。
答案 0 :(得分:1)
您正在编写标题而不是第一行!
我建议您打开文件并遍历CSV.open do ... end
并且不要在else
之后使用if rowid == 1
。只需为每个values
执行该操作,因此不要跳过数据行1
答案 1 :(得分:1)
即使您检查rowid
,.each
循环仍然不知道它。因此,对于rowid == 1
,它会写入标题,但在下一次迭代中,x
将指向pg_debtors_dt_list
中的第二项。
要解决此问题,请按以下顺序编写代码:
pg_debtors_dt_list
,并将后续数据写入文件。希望它有所帮助。