![](/img/trans.png)
[英]NoMethodError (undefined method `last' for true:TrueClass):
[英]NoMethodError: undefined method `map' for true:TrueClass for mapping headers/creating CSVs
我正在下載一堆CSV,以便將它們轉儲為一個大CSV以便導出。 我正在使用Selenium / Ruby / Ruby-on-rails(?)來實現此目的。
我目前遇到的問題是我得到了
NoMethodError: undefined method `map' for true:TrueClass Did you mean? tap
對於以下代碼:
def csv_creation(source)
l_source = {'lead_source' => source.to_s}
input_file = Dir.glob("path_to_file/name_of_files*.csv").last
rows = CSV.open(input_file, headers: true).map(&:to_h)
rows.each { |h| h.merge!(l_source) }
headers = rows.first.keys
rows.first.keys.each { |k| puts k }
csv_response = CSV.generate do |csv|
csv << headers
rows.each do |row|
csv << row.values_at(*headers)
end
end
File.open("#{source}.csv", "w") { |file| file.write(csv_response) }
input_files = Dir.glob("#{source}*.csv")
all_headers = input_files.reduce([]) do |all_header, file|
header_line = File.open(file, &:gets)
all_headers | CSV.parse_line(header_line)
end
CSV.open("out.csv", "a+") do |out|
out << all_headers
input_files.each do |file|
CSV.foreach(file, headers: true) do |row|
out << all_headers.map{ |header| row[header] }
end
end
end
end
在被告知我必須在rails c上運行並放入模塊之前,這段代碼已經奏效。 我沒有Ruby或RoR的經驗,但是很明顯,這種轉變破壞了我的代碼。
隨機花絮:
“源”保存從下拉菜單中收集的文本
有問題的模塊是由我的托管公司構建的,因此我不完全確定它包含的內容-抱歉。
Rails c並沒有真正提供發生此錯誤的行號,但我認為它是在第二個“地圖”中發生的,因此我打印了一些行以查看是否關閉了任何內容,但什么也沒有。 它從某個地方獲得了“真實”的價值,老實說我不知道在哪里。 一切都應該是一個字符串。
一些見識將不勝感激。
我想我現在看到了該錯誤:正如我所評論的,
all_headers = input_files.reduce([]) do |all_header, file|
header_line = File.open(file, &:gets)
all_headers | CSV.parse_line(header_line)
end
是無意義的:請注意,在第一次執行do ...結束塊時,all_headers為nil
,因為已定義但未分配變量。 當您計算all_headers | CSV.parse_line(header_line)
all_headers | CSV.parse_line(header_line)
,等效於nil | [ ... something ...]
nil | [ ... something ...]
,並且計算結果為true。 每次迭代都會重復一次,最后, all_headers
接收到值true
。
我認為您的意思是all_header | CSV.parse_line(header_line)
all_header | CSV.parse_line(header_line)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.