我有一个CSV文件,其结构如下:
"customer_id";"customer_name";"quantity";
"id1234";"Henry";"15";
Run Code Online (Sandbox Code Playgroud)
使用Ruby的标准CSV库解析:
csv_data = CSV.read(pathtofile,{
:headers => :first_row,
:col_sep => ";",
:quote_char => '"'
:row_sep => "\r\n" #setting it to "\r" or "\n" results in MalformedCSVError
})
puts csv_data.headers.count #4
Run Code Online (Sandbox Code Playgroud)
我不明白为什么解析似乎导致四列,尽管文件只包含三列.这不是解析文件的正确方法吗?
我写了一个自定义的 rubocop cop,摘录如下:
def_node_matcher :is_foo_bar?, <<-PATTERN
(send (const nil :Foo) :bar)
PATTERN
def on_send(node)
puts "Match" if is_foo_bar?(node)
end
Run Code Online (Sandbox Code Playgroud)
我正在尝试使用以下代码:
Foo.bar
Run Code Online (Sandbox Code Playgroud)
有趣的是,node.to_s下面的内容与我的模式完全匹配:
"(send
(const nil :Foo) :bar)"
Run Code Online (Sandbox Code Playgroud)
但节点不匹配。如果我将模式更改为以下内容,它仍然有效:
(send (...) :bar)
Run Code Online (Sandbox Code Playgroud)
为什么我原来的匹配不起作用?
我的版本: