Решение 1:
Один простой способ сделать это - дать пользователю выбрать из выпадающего списка, какой разделитель он использует в своем CSV-файле, а затем просто установить егозначение в вызове CSV.read()
.Но я думаю, вы хотите, чтобы это было автоматически.: -)
Решение 2:
Вы можете прочитать в первой строке CSV-файла обычную File.read()
и проанализировать ее, сопоставив первую строку с/,/
и затем против /\t/
... в зависимости от того, какой RegExp соответствует, вы выбираете разделитель в вызове CSV.read()
соответствующего (одиночного) разделителя.Затем вы читаете в файле с помощью CSV.read(..., :col_sep => single_separator )
соответственно.
Но будьте осторожны:
Сначала выглядит красиво и элегантно, что вы хотите использовать ",\t"
в качестве разделителяв вызове метода, чтобы разрешить и то и другое - но учтите, что это может привести к неприятной ошибке!
Если файл CVS будет содержать и вкладки, и запятые случайно или случайно ... что вы будете делать тогда?Отдельно на обоих?Как ты можешь быть уверен?Я думаю, что это было бы ошибкой, потому что разделители CSV не выглядят «смешанными», как это в обычных файлах CSV - это всегда либо ','
или "\t"
Так что я думаю, что вы не должны использовать1030 * - это может вызывать огромные проблемы, и это, вероятно, причина, по которой они не реализовали / не позволили опции col_sep
принять RegExp.