2013-09-23 51 views
2

我不小心刪除了我的聯繫人,並且我沒有備份,現在我得到了contacts2.db,並且我試圖將.db轉換爲.vcf。現在我用Ruby來轉換文件,這裏是我所做的將.db轉換爲.vcf

gem install sqlite3 
gem install vpim 
path to contacts2-to-vcard.rb/contacts2-to-vcard.rb > contacts.vcf 

我總是說'訪問被拒絕'。我設置文件夾完全控制,但每當我運行該命令它改變爲只讀,順便我使用Windows 8的。任何幫助?或者是否有替代的原因將.db轉換爲.vcf? TIA

+0

你能提供莫爾信息嗎?寶石安裝的結果是什麼? 'contacts2-vcard.rb'中有什麼?你爲什麼要通過重定向來構建'contacts.vcf'而不是'File.open'? ... – knut

+0

我有contacts2.db,我將其更改爲contacts2-vcard.rb然後我需要將.vcf更改爲.rb – vnpnlz

回答

2

猛拉出來的DB(這是所有在紅寶石):

require 'sqlite3' 

path_to_contactsdb_file = "/SAMPLE/PATH/TO/contacts2.db" 

db = SQLite3::Database.new path_to_contactsdb_file 

raw_contacts = db.execute("select _id,display_name from raw_contacts") 
contacts = {} 
raw_contacts.each do |x| 
    contacts[x[1]] = {} 
    contacts[x[1]]['rcid'] = x[0] 
    contacts[x[1]]['nums'] = db.execute("select normalized_number from phone_lookup where raw_contact_id=" + x[0].to_s) 
end 

拉它到CSV:

output_filepath = "/SAMPLE/EXAMPLE/FILEPATH"  

csv = "" 
contacts.each do |k,v| 
csv += '"' + k + '",' 
    v['nums'].each do |num| 
    csv += '"' + num[0] + '",' 
    end 
    csv += "\n" 
end 

File.open(output_filepath,"w") {|file| file.write(csv) } 

然後你可以使用CSV導入應用程序,做到這一點通過谷歌聯繫人通過CSV等進口。你可以給我一個水果籃。

如果它必須是VCF格式,那麼只需更改CSV的輸出語法。查找一個VCF文件樣本,我不會被打擾。

1

我一直在嘗試使用Dustin van Schouwen的代碼來完成這項任務。我要感謝他,首先,再一提,我需要補充一些細節/更改,以使其爲我工作:

這條線:

db = SQLite3::Database.new path_to_contactsdb_file 

我改成:

db = SQLite3::Database.new ("contacts2.db") 

當使用前一個,即使它沒有給出錯誤,它似乎並沒有實際連接到數據庫(我認爲它創建一個空的)。

我需要做的另一變化是在該另一行:

csv += '"' + k + '", 

如果「k」是零,則代碼將失敗,所以我介紹一個if(三元語法)來解決這個問題,並它工作得很好:

csv += '"' + (k == nil ? "" : k) + '",'