2015-06-20 20 views
2

因此,我購買了一個txt文件中的電子郵件列表,當然還有一堆電子郵件地址,儘管它們與其他我不太在意的文本混雜在一起。最終,我只想提取電子郵件地址並將它們保存到一個新文件中。我該如何使用Ruby來完成此操作?使用ruby從逗號分隔的文件中提取電子郵件

我是路要走,但我已經試過:

VALID_EMAIL_REGEX = /\A([\w+\-].?)[email protected][a-z\d\-]+(\.[a-z]+)*\.[a-z]+\z/i 

emails = "id,pwsid,pid,age,sex,domain,orderamount,first_order_amount,cobrand_id,show_lang,profile_type,handle,email 
374380696,310579607_70200,g1067409-pct.subregmem,27,1,gmail.com,0,0,0,english,0,parineeti,[email protected] 
374380707,310579618_50472,g1067409-pct.subregmem,27,1,gmail.com,0,0,0,english,0,rajuhalchal,[email protected] 
374380708,310579619_86273,g1227112-pct.subposhgay,45,1,mail.com,0,0,21194,english,0,hertsmale2012,[email protected] 
374380712,310579622_52452,p1911455.sub213,46,1,gmail.com,0,0,31384,english,0,anchezchris0360,[email protected]" 

emails_split = emails.split(/,/) 

def keep_only_email(email) 
    email =~ VALID_EMAIL_REGEX 
end 

keep_only_email(emails_split) 

請幫幫忙,

乾杯! AP

回答

2

看起來這是一個CSV文件,你可以像這樣解析它。

require 'csv'  

csv_text = File.read('input.csv') 
csv = CSV.parse(csv_text, headers: true) 
file = File.open("output.csv", "w") 
csv.each do |row| 
    file.write("#{row['email']}\n") 
end 
+0

輸入文件是否必須是.csv?或者它可以是一個.txt文件? – Apane101

+1

'.txt'也應該可以工作。你爲什麼不試試。 – Ojash

+0

這裏不需要'File.read','CSV.parse'或'File.open/write'。這可以通過'CSV.open/read'完成。看看我的答案。 –

1

這可以通過使用CSV這是紅寶石標準庫的一部分來完成。你基本上在文件中讀取,獲取你正在尋找的列中的值,並寫出到一個新的csv。

require 'csv' 

CSV.open('output.csv', 'w', headers: ['email'], write_headers: true) do |csv| 
    CSV.read('input.csv', headers: true).values_at('email').each do |row| 
    csv << row 
    end 
end 
0

我會使用的東西喜歡這一點,所提供的數據(線)總是在相同的格式:

VALID_EMAIL_REGEX = /\A([\w+\-].?)[email protected][a-z\d\-]+(\.[a-z]+)*\.[a-z]+\z/i 

    lines = "id,pwsid,pid,age,sex,domain,orderamount,first_order_amount,cobrand_id,show_lang,profile_type,handle,email 
    374380696,310579607_70200,g1067409-pct.subregmem,27,1,gmail.com,0,0,0,english,0,parineeti,[email protected] 
    374380707,310579618_50472,g1067409-pct.subregmem,27,1,gmail.com,0,0,0,english,0,rajuhalchal,[email protected] 
    374380708,310579619_86273,g1227112-pct.subposhgay,45,1,mail.com,0,0,21194,english,0,hertsmale2012,[email protected] 
    374380712,310579622_52452,p1911455.sub213,46,1,gmail.com,0,0,31384,english,0,anchezchris0360,[email protected]" 

    emails = [] 
    lines.split("\n").each do |line| 
     data = line.split(',') 
     emails << data[12] if data[12].match(VALID_EMAIL_REGEX) 
    end 

的電子郵件數組將包含所有的電子郵件。

相關問題