我不小心删除了我的联系人,我没有备份,现在我收到了contacts2.db,我试图将.db转换为.vcf。现在我使用Ruby来转换文件,这就是我所做的
gem install sqlite3
gem install vpim
path to contacts2-to-vcard.rb/contacts2-to-vcard.rb > contacts.vcf
我总是说'拒绝访问'。我将文件夹设置为完全控制,但每当我运行该命令时,它改为只读,顺便说一句,我使用的是Windows 8.任何帮助?或者是否存在将.db转换为.vcf的替代方法? TIA
答案 0 :(得分:2)
将它从数据库中删除(这完全在Ruby中):
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 :(得分:1)
我一直在尝试使用Dustin van Schouwen的代码来完成这项任务。首先,我想感谢他,然后提一些我需要添加/更改的细节,以使其适用于我:
这一行:
db = SQLite3::Database.new path_to_contactsdb_file
我改为:
db = SQLite3::Database.new ("contacts2.db")
当使用前一个时,即使它没有给出错误,它似乎并没有实际连接到数据库(我认为它创建一个空的)。
我需要做的另一项改变是在另一条线上:
csv += '"' + k + '",
如果“k”为nil,代码将失败,所以我引入了if(三元语法)来解决它,并且它工作正常:
csv += '"' + (k == nil ? "" : k) + '",'