首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用数组元素在Ruby中创建文件名?

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

Stack Overflow用户
提问于 2016-12-23 11:37:13
回答 3查看 121关注 0票数 1

假设我有一个由一些元素组成的数组,我希望将与每个元素相关的数据保存在一个CSV文件中。这是我的密码:

代码语言:javascript
复制
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

所以我希望我的文件名是-1.csv0.csv1.csv,.,119.csv。但是,由于#{x}作为文件名,它会产生一个错误。如何纠正这个问题?谢谢。

编辑:--这是Original.csv文件中的一行:

代码语言:javascript
复制
"{""timestamp"""," ""2015-05-10 15",59,"59"""," ""article_category_id"""," ""106"""," ""app_name"""," ""Apple Daily TW"""," ""ip"""," ""111.80.37.218"""," ""app_id"""," ""51ee0d904055aa1539d32523"""," ""datetime"""," ""1431273612198"""," ""edition"""," """""," ""action"""," ""page_view"""," ""article_title"""," ""【溫星母親節】潘若迪竟讓老婆一個人過"""," ""user_id"""," """""," ""menu"""," ""即時新聞"""," ""lon"""," """""," ""platform"""," ""Android"""," ""country_residence"""," """""," ""version"""," ""2.5.2"""," ""page_name"""," ""【溫星母親節】潘若迪竟讓老婆一個人過"""," ""location"""," """""," ""is_registered"""," ""False"""," ""provider"""," """""," ""page_id"""," ""607814"""," ""menu_id"""," ""10002""","  ""article_category"""," ""娛樂"""," ""lat"""," """""," ""article_id"""," ""607814"""," ""country_origin"""," """""," ""udid"""," ""d0155049772de9"""," ""gender"""," """""," ""age"""," """""," ""device"""," ""C6902"""," ""session_id"""," """""," ""push"""," ""N"""," ""os"""," ""4.4.2"""," ""browser"""," """"}",,
EN

回答 3

Stack Overflow用户

发布于 2016-12-23 11:42:40

这一行是一个小标题:

代码语言:javascript
复制
category_ID.each {|x|}

我想你是想:

代码语言:javascript
复制
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
票数 5
EN

Stack Overflow用户

发布于 2016-12-23 11:54:54

改变跟随线

代码语言:javascript
复制
CSV.open('C:\Users\Desktop\#{x}.csv', "wb") do |csv|  

代码语言:javascript
复制
CSV.open("C:\Users\Desktop\#{x}.csv", "wb") do |csv|  

更新

代码语言:javascript
复制
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 do |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
票数 2
EN

Stack Overflow用户

发布于 2016-12-23 17:12:22

关于单引号中的插值问题,请参见mudasobwa和Santosh的答案。

我想你还没有得到输出,因为你用的是奇怪的CSV。要以最简单的方式测试这个打开的CSV之一,就不会有其他问题干扰。我添加了一些选项来处理格式错误的CSV。你应该只看到你的数据文件,没有其他,否则过滤掉其他东西。一旦您确定您的原始CSV是正确的,然后尝试写作部分。

注: CSV.foreach不提供索引。

代码语言:javascript
复制
CSV.foreach('C:\Users\username\Desktop\Original.csv', :headers=>true, force_quotes: false, :quote_char => "\x00") do |row|
  p row
end
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41300766

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档