Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在ruby中从csv文件中删除分隔符_Ruby_Csv - Fatal编程技术网

如何在ruby中从csv文件中删除分隔符

如何在ruby中从csv文件中删除分隔符,ruby,csv,Ruby,Csv,我正在读取一个文件,该文件由下面的“制表符空间”或“分号(;)”或“逗号(,)”分隔。代码仅分隔制表符空间,但我希望所有3个都被选中。比如,如果一个文件是逗号分隔的,那么它也应该适用于该文件。请帮忙 #!/usr/bin/ruby require 'csv' test = CSV.read('test.csv', headers:true, :col_sep => "\t") x = test.headers puts x 看起来好像:col_sep不能是Regexp,这可能解决了

我正在读取一个文件,该文件由下面的“制表符空间”或“分号(;)”或“逗号(,)”分隔。代码仅分隔制表符空间,但我希望所有3个都被选中。比如,如果一个文件是逗号分隔的,那么它也应该适用于该文件。请帮忙

#!/usr/bin/ruby

require 'csv'

test = CSV.read('test.csv', headers:true, :col_sep => "\t") 
x = test.headers
puts x

看起来好像
:col_sep
不能是Regexp,这可能解决了您的问题

一种可能的解决方案是分析CSV文件的头并计算可能出现的分隔符:

require 'csv'

possible_separators = ["\t", ';', ',']
lines_to_analyze = 1

File.open('test.csv') do |csv|
  head = csv.first(lines_to_analyze).join
  @col_sep = possible_separators.max_by { |sep| head.count(sep) }
end

@col_sep
#=> ";"
然后,您可以使用:

test = CSV.read('test.csv', headers:true, :col_sep => @col_sep) 
x = test.headers
puts x
# a
# b
# c

x
中的值不包含任何分隔符。

看起来
:col_sep
不能是Regexp,这可能解决了您的问题

一种可能的解决方案是分析CSV文件的头并计算可能出现的分隔符:

require 'csv'

possible_separators = ["\t", ';', ',']
lines_to_analyze = 1

File.open('test.csv') do |csv|
  head = csv.first(lines_to_analyze).join
  @col_sep = possible_separators.max_by { |sep| head.count(sep) }
end

@col_sep
#=> ";"
然后,您可以使用:

test = CSV.read('test.csv', headers:true, :col_sep => @col_sep) 
x = test.headers
puts x
# a
# b
# c

x
中的值不包含任何分隔符。

但是我需要从标题中删除制表符空格/分号/逗号,因为我需要标题名称来创建表。怎么做@Eric Duminilbut我需要从标题中删除制表符空格/分号/逗号,因为我需要标题名来创建表。怎么做@埃里克·杜米尼尔