【问题标题】:Converting .db to .vcf将 .db 转换为 .vcf
【发布时间】:2013-09-28 03:05:19
【问题描述】:

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

【问题讨论】:

  • 你能提供铁道部的信息吗? gem 安装的结果是什么? contacts2-to-vcard.rb 中有什么内容?为什么要通过重定向而不是File.open 来构建contacts.vcf? ...
  • 我有 contacts2.db,我将其更改为 contacts2-to-vcard.rb 然后我需要将 .vcf 更改为 .rb

标签: android ruby sqlite type-conversion


【解决方案1】:

将它从数据库中拉出来(这都是在 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 文件,我无暇顾及。

【讨论】:

    【解决方案2】:

    我一直在尝试使用 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) + '",'
    

    【讨论】:

      【解决方案3】:

      抱歉,OP 有点晚了。无论如何,我无法提供有关 ruby​​ 的提示。

      但在为自己的需求寻找解决方案时,我偶然发现了这里。
      我终于想出了一个python解决方案:
      https://gitlab.com/Arnaudv6/contacts2.db-2-vcard
      基于上页记录的以前的工作。

      请参阅脚本开头的“待办事项”部分
      有关迄今为止尚未实施的详细信息。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-01-13
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-11-13
        相关资源
        最近更新 更多