将.db转换为.vcf

时间:2013-09-23 09:08:55

标签: android ruby sqlite type-conversion

我不小心删除了我的联系人,我没有备份,现在我收到了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

2 个答案:

答案 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) + '",'
相关问题