我不小心删除了我的联系人,我没有备份,现在我有了contacts2.db,我正在尝试将.db转换为.vcf。现在我使用Ruby来转换文件,下面是我所做的
gem install sqlite3
gem install vpim
path to contacts2-to-vcard.rb/contacts2-to-vcard.rb > contacts.vcf我总是说“拒绝访问”我将文件夹设置为完全控制,但每当我运行该命令时,它就会更改为只读,顺便说一下,我使用的是windows8。或者,为什么要将.db转换为.vcf,还有其他原因吗?提亚
发布于 2013-10-18 08:32:44
把它从数据库中拉出来(这都是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的Google联系人导入,等等。你可以送我一个水果篮。
如果必须是VCF格式,那么只需更改CSV的输出语法即可。查找一个示例VCF文件,我不会被打扰。
发布于 2013-10-25 08:45:22
我一直在尝试使用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) + '",'发布于 2021-09-07 17:33:44
行动有点晚了抱歉。不管怎么说,我不能给你关于ruby的提示。
但当我为自己的需求寻找解决方案时,我在这里跌跌撞撞。
我最终想出了一个python解决方案:
https://gitlab.com/Arnaudv6/contacts2.db-2-vcard
基于上面页面上记录的以前的工作。
请参考脚本开头的"todo“部分
有关到目前为止尚未实现的内容的详细信息。
https://stackoverflow.com/questions/18955512
复制相似问题