如何使用数组元素在Ruby中创建文件名?
假设我有一个由一些元素组成的数组,我想将与每个元素相关的数据保存在一个CSV文件中。这是我的代码:如何使用数组元素在Ruby中创建文件名?,ruby,Ruby,假设我有一个由一些元素组成的数组,我想将与每个元素相关的数据保存在一个CSV文件中。这是我的代码: require 'rubygems' require 'csv' category_ID = [-1, 0, 1, 2, 3, 4, 5, 6, 8, 9, 10, 11, 12, 15, 17, 18, 19, 20, 21, 91, 92, 93, 94, 101, 102, 103, 104, 105, 106, 107, 111, 112, 113, 114, 115, 116, 117
require 'rubygems'
require 'csv'
category_ID = [-1, 0, 1, 2, 3, 4, 5, 6, 8, 9, 10, 11, 12, 15, 17, 18, 19, 20, 21, 91, 92, 93, 94, 101, 102, 103, 104, 105, 106, 107, 111, 112, 113, 114, 115, 116, 117, 118, 119]
CSV.foreach('C:\Users\username\Desktop\Original.csv', :headers=>true) do |row,i|
category_ID.each {|x|}
CSV.open('C:\Users\username\Desktop\#{x}.csv', "wb") do |csv|
if row[4].gsub(/^[^:]+:\s*/,"") == x
csv << row[28].gsub(/^[^:]+:\s*/,"")
end
end
end
end
这一行是一个noop:
category_ID.each {|x|}
我猜你想:
category_ID.each do |x|
CSV.open("C:\Users\Desktop\#{x}.csv", "wb") do |csv|
if row[4].gsub(/^[^:]+:\s*/,"") == x
csv << row[28].gsub(/^[^:]+:\s*/,"")
end
end
end
这一行是一个noop:
category_ID.each {|x|}
我猜你想:
category_ID.each do |x|
CSV.open("C:\Users\Desktop\#{x}.csv", "wb") do |csv|
if row[4].gsub(/^[^:]+:\s*/,"") == x
csv << row[28].gsub(/^[^:]+:\s*/,"")
end
end
end
换行
CSV.open('C:\Users\Desktop\#{x}.csv', "wb") do |csv|
到
更新
换行
CSV.open('C:\Users\Desktop\#{x}.csv', "wb") do |csv|
到
更新
关于单引号中的插值问题,请参见mudasobwa和Santosh的答案 我想你仍然没有得到任何输出,因为你使用了奇怪的CSV。 要测试这个问题,请以最简单的方式打开一个CSV,这样就不会有其他问题干扰了。我添加了处理格式错误的CSV的选项。 你应该只看到你的数据文件,没有其他,否则过滤掉其他东西。 一旦确定正确读取了原始CSV,请尝试编写部分 注意:CSV.foreach不提供索引
CSV.foreach('C:\Users\username\Desktop\Original.csv', :headers=>true, force_quotes: false, :quote_char => "\x00") do |row|
p row
end
关于单引号中的插值问题,请参见mudasobwa和Santosh的答案 我想你仍然没有得到任何输出,因为你使用了奇怪的CSV。 要测试这个问题,请以最简单的方式打开一个CSV,这样就不会有其他问题干扰了。我添加了处理格式错误的CSV的选项。 你应该只看到你的数据文件,没有其他,否则过滤掉其他东西。 一旦确定正确读取了原始CSV,请尝试编写部分 注意:CSV.foreach不提供索引
CSV.foreach('C:\Users\username\Desktop\Original.csv', :headers=>true, force_quotes: false, :quote_char => "\x00") do |row|
p row
end
我懂了。但是,即使使用这段代码,它也会给出以下错误:无效参数@rb_sysopen-C:\Users\Desktop\|x |.csv Errno::EINVAL.Ah,插入的字符串应该用双引号括起来,请查看更新。啊,我明白了。我不知道!谢谢分享这些知识。令人困惑和古怪的小语言,鲁比。但是现在,即使代码运行没有错误,它也不会生成任何输出文件。为什么会这样?是“C:\Users\Desktop”真的存在,还是用户名不见了?@EricDuminil是的,修复了。我明白了。但是,即使使用这段代码,它也会给出以下错误:无效参数@rb_sysopen-C:\Users\Desktop\|x |.csv Errno::EINVAL.Ah,插入的字符串应该用双引号括起来,请查看更新。啊,我明白了。我不知道!谢谢分享这些知识。令人困惑和古怪的小语言,鲁比。但是现在,即使代码运行没有错误,它也不会生成任何输出文件。为什么会这样?是否确实存在“C:\Users\Desktop”,或者用户名是否丢失了?@EricDuminil是的,修复了它。这不应该是C:\Users\username\Desktop吗?其中用户名是您的。。用户名是的,没错。我修改了实际路径,这样做时我忘记了用户名部分。始终使用双精度插值quotes@ShaileshPrajapati好的,明白了。但即使在修复后,它也不会生成任何输出文件。请您显示几行原始CSV文件好吗?您的代码有点混乱。应该是c:\users\username\desktop吗?其中用户名是您的。。用户名是的,没错。我修改了实际路径,这样做时我忘记了用户名部分。始终使用双精度插值quotes@ShaileshPrajapati好的,明白了。但即使在修复后,它也不会生成任何输出文件。请您显示几行原始CSV文件好吗?您的代码有点混乱。好的,代码现在运行时没有错误,但它不会生成任何输出文件。@Kristada673请尝试这个CSV.openC:\Users\Desktop\{x}.CSV,a+不,它也不会工作,因为文件甚至没有被创建。甚至不是一个空白文件。@Kristada673。请查看更新并重试。您忘记在之后写入。每次。删除大括号。是的,我在那里看到了小错误,我以正确的方式进行了尝试没有生成任何文件。好的,代码现在运行时没有错误,但它不会生成任何输出文件。@Kristada673请尝试此CSV.openC:\Users\Desktop\{x}.CSV,a+不,它也不会工作,因为甚至没有创建文件。甚至不是一个空白文件。@Kristada673。请查看更新并重试。您忘记在之后写入。每次。删除大括号。是的,我在那里看到了小错误,我以正确的方式进行了尝试没有生成任何文件。