Ruby on rails 写入csv忽略了第一行
我正在使用下面的代码将Hashmap写入一个带有标题的csv文件。但是,我注意到第一个数据行在文件中不可用。我可以准确地显示标题和所有其他行Ruby on rails 写入csv忽略了第一行,ruby-on-rails,ruby,Ruby On Rails,Ruby,我正在使用下面的代码将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_
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
def self.execute\u auto\u pg\u债务人pg\u债务人dt\u列表
partition\u key=Date.today.prev\u day.prev\u day.strftime“%Y%m%d”
csvfilename=“PG_债务人”+分区_键+”.CSV”
pg_债务人_dt_批次=Array.new
rowid=0
pg|U债务人名单。每个{124; x|
pg_债务人_详情=Hash.new
pg\U债务人详细信息[“门店订单Id”]=x[“门店订单Id”]
pg债务人详细信息[“交易Id”]=x[“交易Id”]
pg债务人详细信息[“网关支付Id”]=x[“网关支付Id”]
pg_债务人详细信息[“PPS_Id”]=x[“PPS_Id”]
pg债务人详细信息[“事件类型”]=x[“事件类型”]
pg_债务人详细信息[“事件日期”]=x[“事件日期”]
pg_债务人详细信息[“网关名称”]=x[“网关名称”]
pg_债务人详细信息[“未清金额”]=“f”%x[“未清金额”]
pg_债务人详细信息[“发票编号”]=x[“发票编号”]
pg_debtors_dt_batch您正在写入标题,而不是第一行
我建议您打开该文件并在CSV.open do…end
如果rowid==1,则不要在之后使用else
。只需对每个值执行该操作,这样就不会跳过数据行1您正在写入标题,而不是第一行
我建议您打开该文件并在CSV.open do…end
如果rowid==1,则不要在之后使用else
。只需对每个值执行该操作,这样就不会跳过数据行1,即使检查rowid
,。每个循环仍然不知道它。因此,对于rowid==1
,它将写入头,但在下一次迭代中, x
将指向pg\u债务人列表中的第二项
要解决此问题,请按以下顺序编写代码:
打开文件,首先写入标题
循环浏览pg_债务人列表
,并将后续数据写入文件
希望有帮助。即使您检查rowid
,。每个循环仍然没有意识到它。因此,对于rowid==1
,它将写入标题,但在下一次迭代中,x
将指向pg\u deborts\u dtu列表中的第二项
要解决此问题,请按以下顺序编写代码:
打开文件,首先写入标题
循环浏览pg_债务人列表
,并将后续数据写入文件
希望能有帮助