以下是我的CSV状态:http://tinypic.com/r/kuwk6/5
这是我的代码:
File.open("/Users/Katie/Downloads/File_Name.csv", encoding: "ISO-8859-1").each_line do |line|
line.chomp!
CSV.parse(line, col_sep: "\t") do |row|
unless row[4].nil?
puts row[4].split("&Wt.srch=1")[0]
end
end
end
我遇到了特殊字符的问题,这就是我在那里编码的原因,因为我在Mac上,当我在Excel中打开一个CSV时,它对行做了一些奇怪的事情,所以我放入了行.chomp!该文件在技术上是制表符分隔,因此我为选项卡执行了col_sep。
基本上我希望将URL拆分为“& Wt.srch = 1”,但我只希望在拆分后返回字符串的第一部分,这就是我放置[0]的原因。
当我运行没有“除非”行的代码时,它表示block (2 levels) in <main>': undefined method
分裂为nil:NilClass(NoMethodError)
这让我觉得它认为这个专栏是空的,实际上并非如此。但是,当我放入“除非”行时,它运行脚本就好了,但实际上并没有拆分url字符串。
很抱歉,如果这是一个非常基本/简单的问题...请提前感谢您的帮助!
答案 0 :(得分:1)
您不需要CSV.parse
这样做
使用标签:
文件:
c1 c2 c3 c4 c5
Hello Alpha Example More https://www.exampl.com?f1=1&Wt.srch=1&utm=2&utm2=blah
Thanks Bravo Example some https://www.exampl.com?f1=1&Wt.srch=1&utm=2&utm2=blah
Blah Charlie Example stuff https://www.exampl.com?f1=1&Wt.srch=1&utm=2&utm2=blah
脚本:
#returns each_line of the csv file as a string
File.open("/Users/Katie/Downloads/File_Name.csv").each_line do |line|
#splits the line at tab character into row Array
row = line.chomp.split("\t")
unless row[4].nil?
puts row[4].split("&Wt.srch=1")[0]
end
end
输出:
c5
https://www.exampl.com?f1=1&
https://www.exampl.com?f1=1&
https://www.exampl.com?f1=1&
使用逗号:
文件:
c1,c2,c3,c4,c5
Hello,Alpha,Example,More,https://www.exampl.com?f1=1&Wt.srch=1&utm=2&utm2=blah
Thanks,Bravo,Example,some,https://www.exampl.com?f1=1&Wt.srch=1&utm=2&utm2=blah
Blah,Charlie,Example,stuff,https://www.exampl.com?f1=1&Wt.srch=1&utm=2&utm2=blah
脚本:
#returns each_line of the csv file as a string
File.open("/Users/Katie/Downloads/File_Name.csv").each_line do |line|
#splits the line at tab character into row Array
row = line.chomp.split(",")
unless row[4].nil?
puts row[4].split("&Wt.srch=1")[0]
end
end
输出:
c5
https://www.exampl.com?f1=1&
https://www.exampl.com?f1=1&
https://www.exampl.com?f1=1&
使用“ISO-8859-1”处理编码使用的脚本:
File.open("/Users/Katie/Downloads/File_Name.csv", encoding: "ISO-8859-1").each_line do |line|
#splits the line at tab character into row Array
row = line.chomp.split(" ").delete_if{|r| r.strip.empty?}
unless row[4].nil?
puts row[4].split("&Wt.srch=1")[0]
end
end
你设置它的方式是循环遍历线条,然后使用CSV.parse
将线条分成单个字符串,因此行实际上是单个“单元格”而不是单元格数组。