while 循环中的 Ruby CSV.each 未第二次执行

2024-01-11

我正在研究事件报告者 http://tutorials.jumpstartlab.com/projects/event_reporter.html帮助学习 Ruby 的项目。

这是我到目前为止所得到的:

require 'CSV'

puts 'Welcome to Event Reporter!'
print 'Enter command: '
command = gets.chomp

def clean(attribute, type)
    if (type == 'regdate')
    elsif (type == 'first_name')
    elsif (type == 'last_name')
    elsif (type == 'email_address')
    elsif (type == 'homephone')
        homephone = attribute
        homephone = homephone.to_s.gsub(/\D/, '')
        if (homephone.length < 10)
            homephone = '0000000000'
        elsif (homephone.length == 11)
            if (homephone[0] == '1')
                homephone[0] = ''
            else
                homephone = '0000000000'
            end
        elsif (homephone.length > 11)
            homephone = '0000000000'
        end
        return homephone
    elsif (type == 'street')
    elsif (type == 'city')
    elsif (type == 'state')
    elsif (type == 'zipcode')
        zipcode = attribute.to_s.rjust(5, "0")[0..4]
        return zipcode
    end
    return attribute
end

queue = []
while (command != 'q') do
    command = command.split
    if (command[0] == 'load')
        command[1] ? filename = command[1] : filename = 'event_attendees.csv'
        attendees = CSV.open filename, headers: true, header_converters: :symbol
        puts "Loaded #{filename}"
    elsif (command[0] == 'find')
        attribute = command[1]
        criteria = command[2]

        # REACHES HERE SECOND TIME AROUND
        puts "#{command[0]} #{command[1]} #{command[2]}"

        attendees.each do |attendee|
            # ISNT REACHING HERE SECOND TIME AROUND
            puts 'TEST'

            # get cleaned attendee attribute
            attendee_attribute = clean(attendee[attribute.to_sym], attribute)
            # see if it matches the criteria input
            if criteria.to_s.downcase.strip == attendee_attribute.to_s.downcase.strip
                # if it does, add the attendee to the queue
                puts 'Match!'
                queue << attendee
            end
        end
    end
    print 'Enter command: '
    command = gets.chomp
end

看来attendees.each不会通过 while 循环第二次执行。为什么是这样?

~/practice/event_manager >>  ruby 'lib/event_reporter.rb'
Welcome to Event Reporter!
Enter command: load
Loaded event_attendees.csv
Enter command: find zipcode 11111
find zipcode 11111
TEST
TEST
TEST
TEST
TEST
TEST
TEST
TEST
TEST
TEST
TEST
TEST
TEST
TEST
TEST
TEST
TEST
TEST
TEST
Enter command: find zipcode 11111
find zipcode 11111
Enter command: q
~/practice/event_manager >>  

根据the docs http://ruby-doc.org/stdlib-2.1.1/libdoc/csv/rdoc/CSV.html,CSV 对象的行为基本上类似于常规 IO 对象。他们通过通读文件(通常是逐行)来跟踪文件中的当前位置。所以在你的第一个attendees.each,您通读了整个文件。随后调用.each将尝试读取下一行,但没有任何一行,因为我们已经位于文件末尾,因此您的循环不再执行。

您可以通过将底层 IO 实例倒回到文件的开头来修复此问题,使用#rewind http://ruby-doc.org/stdlib-2.1.1/libdoc/csv/rdoc/CSV.html#method-i-rewind。在您的具体情况下,请将其放在迭代参加者之后。

attendees.each do |attendee|
  # ...
end
attendees.rewind
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

while 循环中的 Ruby CSV.each 未第二次执行 的相关文章

  • 通过推送通知唤醒

    Suppose 有一些对象 例如 一个数组a 和依赖于对象的条件 例如 a empty 当前线程以外的某些线程可以操作该对象 a 因此条件评估值的真实性会随着时间的推移而变化 如何让当前线程在代码中的某个时刻休眠 并在条件满足时通过推送通知
  • 如何计算带有偏移量的异或?

    我想用不同的偏移量进行异或计算以在计算中列出 例子 key 0 1 0 text 0 1 0 1 0 1 0 1 1 1 异或计算 key 0 text 0 key 1 text 1 key 2 text 2 key 0 text 3 ke
  • 如何从 Rails 中的 date_select 或 select_date 获取日期?

    Using select date给我回一个params my date with year month and day属性 如何轻松获取 Date 对象 我希望有类似的事情params my date to date 我很高兴使用date
  • 如何使用本地安装的gems执行Ruby程序?

    我已经使用安装了我的依赖项 bundle package 然后将它们传输到离线服务器并运行 gt bundle install local Using mime types 1 19 Using rest client 1 6 7 Usin
  • Rails 3 在 Ruby 1.9.2 上初始化非常慢

    我使用 RVM 来管理环境 安装了 Ruby 1 9 2 p136 我认为是最新版本 和 Rails 3 创建了 gemset 并运行捆绑器 到目前为止一切正常 但 Rails 在运行命令 即生成 销毁 rake 等 时初始化速度非常慢 完
  • 使用 attr_accessor 动态创建类属性

    在Ruby中 有没有办法动态地将实例变量添加到类中 例如 class MyClass def initialize create attribute name end def create attribute name attr acces
  • 如何从 ruby​​ 中的字符串中删除所有非数字?

    用户输入数字的形式如下 1 800 432 4567 800 432 4567 800 432 4566 800 432 4567 1 800 432 4567 800 432 4567 我希望所有这些都变成没有特殊字符的剥离版本 例如18
  • Nokogiri 保持 HTML 实体不变

    我希望 Nokogiri 保持 HTML 实体不变 但它似乎正在将实体转换为实际的符号 例如 Nokogiri HTML fragment p reg p to s 结果是 p p 似乎没有什么可以将原始 HTML 返回给我 inner h
  • Ruby require 'file' 不起作用,但 require './file' 可以。为什么?

    我有一个充满 ruby 文件的文件夹 当我尝试使用位于同一目录中的另一个文件中的一个文件时require file 我得到一个LoadError但是当我使用require file 一切正常 有人可以向我解释为什么会发生这种情况吗 如果有什
  • 如何在 Linux 中编写文本模式 GUI? [关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 当我编写脚本 程序时 我经常想弹出一个简单的文本 gui 来提示输入 我该怎么做 例如 来自 Shel
  • ruby 正则表达式匹配模式的多次出现

    我正在寻找构建一个 ruby 正则表达式来匹配模式的多次出现并将它们返回到数组中 模式很简单 即 两个左括号 一个或多个字符 后跟两个右括号 这就是我所做的 str Some random text lead first name and
  • Ruby/Rails 集合到集合

    我有两个表与一个连接表连接 这只是伪代码 Library Book LibraryBooks 我需要做的是 如果我有一个图书馆的 id 我想获取该图书馆拥有的所有书籍所在的所有图书馆 因此 如果我有图书馆 1 图书馆 1 中有书籍 A 和
  • 存根和 rspec 旧语法的问题

    我正在编写一些代码并使用 rspec 但收到警告 提示语法已过时 我不太清楚应该如何编写它 it should calculate the value correctly do mock cards Card new clubs 5 Car
  • 如何使用 net/http 验证 ruby​​ 中的 SSL 证书链

    我如何验证网站的证书 例如https processing ukash com https processing ukash com 在 ruby 中使用 net http https Net HTTP new processing uka
  • 使用rSpec 测试delayed_job 链的最佳方法是什么?

    目前 当我的代码中有一个延迟方法时 如下所示 CommentMailer delay deliver comments comment true 我在规范中写了这样的内容 dj mock DelayProxy CommentMailer s
  • 在 Sinatra 中运行后台进程

    我有 Sinatra Rails 应用程序和一个启动一些漫长过程的操作 通常我会为后台作业排队 但这种情况太简单了 后台进程很少启动 所以队列是一个开销 那么如何在没有队列的情况下运行后台进程呢 get build logs project
  • 从logstash中的文件名获取事件的时间戳

    我们有一个将事件写入文件的进程 没有时间戳 文件名本身带有时间戳后缀 该时间戳应用于文件中的所有事件 现在 我尝试使用logstash的输入文件插件来解析该文件 有没有一种方法可以将文件名获取到字段 以便我可以使用 gsub 过滤器提取时间
  • Ruby ActiveRecord 和 sql 元组支持

    ActiveRecord 是否支持 where 子句中的元组 假设底层数据库支持 结果 where 子句看起来像这样 where name address in John 123 Main St I tried Person where n
  • 使用正则表达式搜索 Ruby 数组

    你好 我有一个小的 ruby 函数 它可以分割出一个 Ruby 数组 如下所示 def rearrange arr from to sidx arr index from eidx arr index to arr sidx arr sid
  • sqlite3-ruby gem:无法构建 gem 本机扩展

    Update 看看这个后续问题 Windows 上的 Gem 更新 它坏了吗 https stackoverflow com questions 134581 gem update on windows is it broken 在 Win

随机推荐

  • SAP GUI 脚本 - 按钮按下失败

    我在运行 SAP GUI 的 Excel 文件中使用宏 有一个步骤 当我单击 SAP 中的按钮时 会弹出另一个窗口 为此 我编写了这样的代码 session findbyid wnd 0 XX btnXX press session fin
  • 使用模块在 Eclipse 中创建 Google App Engine 项目

    我一直在按照 cloud google com 上的建议使用 Eclipse 和 Maven 编写 GAE 应用程序 最近 我需要使用 后端 或一组不同的实例来处理特定任务 我发现 后端 已被弃用 取而代之的是 模块 在过去的几天里 我一直
  • C - for 循环的缩写,仅执行一次

    我在 Mac 上用 ANSI C 编写了命令行实用程序 其中包含为单链表创建冒泡排序数组的函数 我声明了循环变量 int a 0 int b 0 我以缩写风格编写了循环的冒泡排序 即 将变量初始化留空 for a lt size a for
  • 使用 Google 地图轨迹 API

    我必须开发一个车辆跟踪系统 我已经完成了 Google Map API 和 Google Map Tracks API 教程 IE Google 地图 API 网络 https developers google com maps docu
  • 在 Java 中如何将一个数组的值设置为另一个数组的值?

    假设您有两个数组 int a 2 3 4 int b 4 5 6 如何将数组 a 设置为数组 b 并使它们保持不同的不同对象 就像我想到这样做 a b 但这不起作用 因为它只是创建 a 引用数组b 那么 将两个数组设置为相等 同时保持它们独
  • 从序列图创建代码

    有没有办法从序列图生成代码 我能找到的只是逆向工程 即 从生成的代码中您可以获得序列图 有没有办法做其他事情 从图表到源代码生成 UML 类图已经实现了这一点 相同的链接http msdn microsoft com en us libra
  • 创建 App Engine 后端时找不到 gcm.jar 错误 => 建议安装已弃用的库

    使用 Android Developer Studio 我尝试从菜单中为现有 Android 项目创建 App Engine 后端 工具 gt Google Cloud 工具 gt 生成 App Engine 后端 错误消息是 找不到 gc
  • 如何将一些文件从一个 git 存储库移动到另一个(不是克隆),保留历史记录

    我们的 Git 存储库最初是一个庞大的 SVN 存储库的一部分 其中每个项目都有自己的树 如下所示 project1 branches tags trunk project2 branches tags trunk 显然 使用以下命令将文件
  • 在 PHP 中从序列化数组中获取一个值

    您认为从数组中获取单个值的最有效方法是什么 我知道它是什么 我知道它在哪里 目前我正在这样做 array unserialize storedArray var array keyOne 想知道是否有更好的方法 你做得很好 我想不出比你所做
  • 使用 UNION INSERT INTO SELECT 奇怪的顺序

    我有一个典型的非标准化表 tempTable 具有多个编号的列 rep1 rep2 所以我编写了一个脚本将非标准化数据插入到标准化表中 myTable insert into myTable select idRep rep FROM se
  • VBA 中的文本文件:打开/查找替换/另存为/关闭文件

    这是我希望做的伪代码 Open text File Find XXXXX and Replace with YYYY Save text File As Close text file 这就是我到目前为止所拥有的 Private Sub C
  • 在姓氏搜索中添加撇号

    我创建了一个过程 它将按姓氏返回申请人列表 我在搜索姓氏中带有撇号的申请人时遇到问题 例如 O Connor 您能帮忙找到这些申请人吗 以下是我的搜索代码 if Rtrim FirstName lt gt begin If Len Firs
  • 如何更改 R 中栅格图层的分辨率

    我正在使用 R 中的几个高分辨率栅格图层 对于我正在运行的某些分析来说 详细程度过高 因此我想通过降低分辨率来加快速度 坐标系为 UTM 因此单位为米 分辨率显示为 30 30 x y 所以看来这里的分辨率是30m 有人可以告诉我如何将分辨
  • 使用 Antlr 获取标识符和函数名称

    我正在尝试使用和理解 AntLR 这对我来说是新的 我的目的是读取用 C 编写的源代码文件并从中提取标识符 变量和函数名称 在我的 C 语法中 文件C g4 考虑 identifierList Identifier identifierLi
  • CSS 媒体查询横向 Android 软键盘

    我正在开发一个平板电脑网络应用程序 适用于 android 和 ios 我面临的问题是 已经给我带来了2天的麻烦了 问题是 在 Android 上 当您处于纵向模式时 例如 您将焦点放在输入字段上 因此软键盘会弹出 CSS 媒体查询方向更改
  • TextWatcher afterTextChanged 导致 android 中的 stackoverflow

    我有一个方法drawItems 每次都会创建一个新布局并将其设置为contentView 而且我也有一个控制EditText当内容更改时 它应该删除其他元素 edit addTextChangedListener new TextWatch
  • TSLint:未使用的 var 关键字

    我已经为我的 TypeScript 项目配置了 TSLint 但我不知道警告是什么意思forbidden var keyword意思是 这是一个最小的示例 它会导致 TSLint 警告 var x number 1 谢谢 Edit 我正在使
  • 如何在不使用 Visual Studio 2010 的情况下为 Visual Studio 2010 解决方案创建 msi 文件?

    我们有一个旧的 Visual Studio 2010 Windows 窗体应用程序 其中有一个用于创建 msi 文件的安装项目 这是我们在 Jenkins 中调用的命令 C Program Files x86 Microsoft Visua
  • 带参数的方法过程

    是否可以在 Crystal 中使用带参数的方法 proc 就像是 def foo baz puts baz foo end proc gt foo proc call Hi 是的 如果方法有参数 则必须指定它们的类型 proc gt foo
  • while 循环中的 Ruby CSV.each 未第二次执行

    我正在研究事件报告者 http tutorials jumpstartlab com projects event reporter html帮助学习 Ruby 的项目 这是我到目前为止所得到的 require CSV puts Welco