用空格替换某些数组元素

时间:2014-10-06 23:59:31

标签: ruby parsing

您好我正在创建一个解析器来尝试从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"。

2 个答案:

答案 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

删除" -sale"

我们可能最好在将任何行写入新文件之前删除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