我的 Rails3 应用程序解析用户上传的 CSV 文件。
正如预期的那样,用户上传制表符分隔和逗号分隔的文件。
我想两者都支持。
My code:
input = CSV.read(uploaded_io.tempfile, { encoding: "UTF-8", :col_sep => "\t"})
问题:如何更改它以支持逗号?
FasterCSV 的文档将 col_sep 描述为The String placed between each field.
so :col_sep => ",\t"
行不通的。
注意:里面的所有数据都是整数或标识符,所以有人使用的概率\t
or ,
内容(不是分隔符)内的值为零。因此,我不想明确阻止在同一文件中使用两个不同的分隔符。
解决方案一:
一种简单的方法是让用户通过下拉菜单选择他们在 CSV 文件中使用的分隔符,然后只需在CSV.read()
称呼。但我猜你想要它自动。 :-)
解决方案2:
您可以使用常规读入 CSV 文件的第一行File.read()
并通过将第一行与/,/
然后反对/\t/
...根据正则表达式匹配,您可以选择分隔符CSV.read()
调用相应的(单个)分隔符。然后你读入文件CSV.read(..., :col_sep => single_separator )
因此。
但要注意:
乍一看,它看起来漂亮又优雅,想要使用",\t"
作为方法调用中的分隔符以允许两者 - 但请注意,这可能会引入一个可能令人讨厌的错误!
如果 CVS 文件偶然或偶然同时包含制表符和逗号...那么您会怎么做?
两者分开?你怎么能确定?我认为这是一个错误,因为 CSV 分隔符在常规 CSV 文件中不会像这样出现“混合”——它总是要么','
or "\t"
所以我认为你不应该使用",\t"
——这可能会导致巨大的问题,这可能就是他们没有实施/允许的原因col_sep
接受正则表达式的选项。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)