2016-11-13 140 views
0

我有了這樣的數據的CSV:如何刪除CSV中的重複行?

A.A.B. Direct http://www.aabdirect.com 348 Willis Ave Mineola NY 11501 (800) 382-1002 no email 
Abeam Consulting Inc http://abeam.com 245 Park Ave New York NY 10167 (212) 372-8783 no email 
Abeam Consulting Inc http://abeam.com 245 Park Ave New York NY 10167 (212) 372-8783 no email 
Alvarez & Marsal http://www.alvarezandmarsal.com 600 Madison Ave New York NY 10022 (212) 759-4433 no email 
Alvarez & Marsal http://www.alvarezandmarsal.com 600 Lexington Ave Ste 6 New York NY 10022 (212) 759-4433 no email 

這裏的關鍵是,有時在兩行匹配所有的列(如Abeam Consulting Inc),但有時事實並非如此。有時只是網站匹配,或電話號碼或名稱匹配。

關鍵是網站。如果兩個值具有相同的網站,我只需要一個。

如何以非N + 1方式重新制作此列表?

最好用一些本地ruby方法,如.uniq或類似的東西。

+0

使用CSV#foreach。 –

回答

2

剛看完這些字符串(我「已經簡化,以避免水平滾動的需要)到一個數組:

arr = [ 
    "A.A.B. Direct http://www.aabdirect.com (800) 382-1002", 
    "Abeam Consulting Inc http://abeam.com (212) 372-8783", 
    "Abeam Consulting Inc http://abeam.com (212) 372-8783", 
    "Alvarez & Marsal http://www.alvarezandmarsal.com (212) 759-4433", 
    "Alvarez & Marsal http://www.alvarezandmarsal.com 10022 (212) 759-4433" 
] 

,正如你建議,使用Array#uniq,但有一個塊:

arr.uniq { |line| line[/\shttp:\S+/] } 
    #=> ["A.A.B. Direct http://www.aabdirect.com (800) 382-1002", 
    # "Abeam Consulting Inc http://abeam.com (212) 372-8783", 
    # "Alvarez & Marsal http://www.alvarezandmarsal.com (212) 759-4433"] 

參見Array#uniq。正則表達式/\shttp:\S+/讀,「匹配空白後跟字符串"http:",隨後通過除空白字符(貪婪地)其他一個或多個字符」。

+0

雖然這是問題。注意你的'uniq'd數組,在它應該有的時候沒有移除第二個'Alvarez&Marsal'條目? :|這似乎只能刪除相同的行 - 我需要刪除以前看到網站的任何行。 – marcamillion

+0

對不起,我沒有仔細閱讀這個問題。我相信我的答案現在可以,但請告訴我,如果不是。 –

+0

無論如何要在'CSV'類中做到這一點?例如像Alireza建議的那樣使用CSV#foreach。 – marcamillion