Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使用数组元素在Ruby中创建文件名?_Ruby - Fatal编程技术网

如何使用数组元素在Ruby中创建文件名?

如何使用数组元素在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

假设我有一个由一些元素组成的数组,我想将与每个元素相关的数据保存在一个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, 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。请查看更新并重试。您忘记在之后写入。每次。删除大括号。是的,我在那里看到了小错误,我以正确的方式进行了尝试没有生成任何文件。