【发布时间】:2016-08-26 01:42:30
【问题描述】:
我写了以下代码:
dataexc = data.select do |element|
element[:cz_name] || element[:tor_other_cz_name]
false if [0] == “A” || [0] == “B” || [0] == “C”
end
end
这会返回 NameError: undefined local variable or method `“A”' for main:Object
我正在尝试排除存在于我的电子表格的两列中的任何一列中以 A、B 或 C 开头的所有位置。我已经将 CSV 文件放入“data”中的数组中,现在我正在使用“dataexc”来尝试缩小标准以排除具有这些位置的行。有人可以帮我写这个吗?
我还试图弄清楚如何解决导致我的一个 CSV 在 irb 中打开错误数量的值的编码错误 (?)。如果您认为您可以帮助我(感谢任何和所有帮助!),还有更多关于我在做什么的信息here。
更新:
如果其他人试图找到初学者可以真正理解的解决方案,-ABC 代码的当前工作状态是:
cleaned_data = data.reject do |e|
letters = ["A", "B", "C"]
if e[:cz_name]
letters.include?(e[:cz_name][0])
end
end
cleaned_data = cleaned_data.reject do |e|
letters = ["A", "B", "C"]
if e[:tor_other_cz_name]
letters.include?(e[:tor_other_cz_name][0])
end
end
如果您要居高临下,请不要在这里发帖。
也就是说,如果其他人想帮助这个项目,我将非常感激,我会在 Github 上感谢你。
【问题讨论】:
-
请格式化您的代码以提高可读性。
-
“还有一个问题”:不是 Stack Overflow 的工作原理。每个问题应该是一个单元。如果你想澄清这个问题,那很好;但一个不相关的问题应该是一个不相关的问题。此外,“回归基础”并不是我居高临下,而是提供了我所拥有的最佳建议。
-
好的,删除了另一个问题。谢谢你。我认为 tadman 对 CSI 的评论是居高临下的,这就是我所指的。你的评论确实假设我有一些东西可以“回去”,但在这种情况下这是不正确的;我刚开始学习。我看到其他初学者因为更有经验的程序员的恶作剧而非常气馁,这很糟糕。无论如何,感谢您提供的信息丰富的回答。我想了解您的代码,但最后一行让我感到困惑。其他人告诉我它使用正则表达式,我不应该深入研究。
-
我答案的最后一行确实包含正则表达式。您可以将
val =~ /^[ABC]/替换为%w(A B C).include?(val[0])。 (%w(A B C)只是编写["A", "B", "C"]的一种更简洁的方式。)但就目前而言,它是一个非常了解 Ruby 的人可能编写它的示例。
标签: ruby string csv boolean data-analysis