您好我正在创建一个解析器来尝试从csv文件中提取数据。我试图检查多个不受欢迎的元素并摆脱它们,但我不确定如何。
以下是该文件的示例:
#Saturday Logs
#Item #NumberofItems #Price
Glue 2 bottles $1.99
Pencil & Eraser pack 1 $2.45
Sharpener (M) 2 $3.99
OmitThisLine
Markers 2 packs $4.44 -sale
以下是我要找的输出:
Glue,2 bottles,$1.99
Pencil & Eraser pack,1$2.45
Sharpener (M),2,$3.99
Markers,2 packs,$4.44
目前我的代码摆脱了一些元素并产生:
Glue,2 bottles,$1.99
Pencil & Eraser pack,1,$2.45
Sharpener (M),2,$3.99
OmitThisLine
Markers,2 packs,$4.44-sale
根据我的研究,我发现我可以像这样替换一行:
row.select {|s| s.include? "OmitThisLine"}.each{ |s| s.replace("")}
然而,我留下了一个空白,我仍然不知道如何摆脱" -sale"而不是整行。在我的情况下,我想检查文件中任何以" Omit"开头的行。或"#"并摆脱" -sale"。
答案 0 :(得分:0)
您可以使用gsub替换“-sale”字符。如果“-sale”不存在,则不会引发任何错误。
s.replace s.gsub("-sale", "")
如果你想用“-sale”去除整行,你可以做类似的事情。
s.replace("") if !!s["-sale"]
要删除符合条件的行,您可以执行以下操作:
rows.delete_if {|row| !!row["OmitThisLine"] }
答案 1 :(得分:0)
OmitThisLine
如果您正在使用CSV库(它是Ruby标准库的一部分),并且您将输出写入新的CSV文件,则只需跳过包含{{ {1}}。
OmitThisLine
我们可能最好在将任何行写入新文件之前删除require 'csv'
# Open a new file
output = CSV.open("/path/to/output.csv", "w")
CSV.foreach("/path/to/input.csv") do |row|
# Add all lines to new file EXCEPT those with OmitThisLine
output << row unless row.include? "OmitThisLine"
end
# Close the new file
output.close
,并且有很多方法可以执行此操作,但我会在上面的代码中添加以下行:
-sale
总而言之,它看起来像这样:
row = row.map { |column| column.gsub(" -sale", "") }
您输出的文件应如下所示:
require 'csv'
# Open a new file
output = CSV.open("/path/to/output.csv", "w")
CSV.foreach("/path/to/input.csv") do |row|
row = row.map { |column| column.gsub(" -sale", "") }
# Add all lines to new file EXCEPT those with OmitThisLine
output << row unless row.include? "OmitThisLine"
end
# Close the new file
output.close