len*_*hok 1 ruby csv string boolean data-analysis
我写了以下代码:
dataexc = data.select do |element|
element[:cz_name] || element[:tor_other_cz_name]
false if [0] == “A” || [0] == “B” || [0] == “C”
end
end
Run Code Online (Sandbox Code Playgroud)
这将返回NameError:undefined局部变量或main:Object的方法"A"
我试图排除所有以A,B或C开头的位置,这些位置存在于我的电子表格中的两列中.我已经将CSV文件放入"数据"中的数组中,现在我正在使用"dataexc"来尝试缩小条件以排除具有这些位置的行.任何人都可以帮我写这个有效吗?
我也试图弄清楚如何解决一个编码错误(?)导致我的一个CSV用irb中的错误数量的值打开.如果您认为您可以帮助我(任何和所有帮助都表示赞赏!),有更多关于我在这里做什么的信息.
更新:
如果其他人试图找到初学者可以理解的解决方案,-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
Run Code Online (Sandbox Code Playgroud)
如果你要居高临下,请不要在这里发帖.
也就是说,如果有其他人想要帮助这个项目,我会非常感激,我会在Github上为你提供的.
我是这样写的:
data.reject { |row|
row.values_at(:cz_name, :tor_other_cz_name).any? { |val|
val =~ /^[ABC]/
}
}
Run Code Online (Sandbox Code Playgroud)
"拒绝列中任何值:cz_name
并:tor_other_cz_name
匹配模式的行'以A,B或C'开头."
至于你的代码,那里有很多错误.
def
定义方法,而不是变量.如果您尝试定义方法,请不要使用=
.
for
几乎没有在Ruby中使用过,你不能在这种语法中使用它
element[:cz_name] || element[:tor_other_cz_name]
只要element[:cz_name]
它存在,或者如果不存在则另一个存在.它不会检查两者.
[0]
不是字符串的第一个字符,它是一个内部为零的数组.element[:cz_name][0]
将是该字符串的第一个字符.
if condition; bool = true; else; bool = false; end
相当于 bool = condition
“A”
是不一样的"A"
.不要在Word或任何其他文字处理器中编写代码,使用文本编辑器:智能引号是编程中的死亡.
如果您的最后一个值是false if condition
,如果为condition
真,则返回值为nil
.这两个nil
和false
是falsey,所以你最终不能辨别什么.
我建议重新学习Ruby语法.在某个地方查找书籍或教程,并按顺序完成所有练习.你有太多的基本错误.