作者热门文章
- xml - AJAX/Jquery XML 解析
- 具有多重继承的 XML 模式
- .net - 枚举序列化 Json 与 XML
- XML 简单类型、简单内容、复杂类型、复杂内容
我需要能够确定我的 Ruby 项目中的 csv 文件中使用了哪个分隔符(逗号、空格或分号)。我知道,csv 模块中的 Python 中有一个 Sniffer 类,可用于猜测给定文件的分隔符。 Ruby 中有类似的东西吗?非常感谢任何形式的帮助或想法。
最佳答案
看起来 py 实现只检查几种方言:excel 或 excel_tab。因此,仅检查 ","
或 "\t"
的简单实现是:
COMMON_DELIMITERS = ['","',"\"\t\""].freeze
def sniff(path)
first_line = File.open(path).first
return unless first_line
snif = {}
COMMON_DELIMITERS.each do |delim|
snif[delim] = first_line.count(delim)
end
snif = snif.sort { |a,b| b[1]<=>a[1] }
snif[0][0] if snif.size > 0
end
注意:这将返回它找到的完整分隔符,例如","
,所以要获得 ,
,您可以将 snif[0][0]
更改为 snif[0][0 ][1]
.
此外,我正在使用 count(delim)
因为它更快一些,但是如果您添加了一个由两个(或更多)相同类型的字符组成的分隔符,例如 --
,那么在权衡类型时它可能每次出现两次(或更多次),所以在这种情况下,使用 scan(delim).length
可能会更好。
关于 ruby : How can I detect/intelligently guess the delimiter used in a CSV file?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14693929/
我是一名优秀的程序员,十分优秀!