自己编写程序批量合并多个“规范定义电子名片(vCard)”文件
2010-08-03 18:59
525 查看
上个周末遇到一个小问题,我希望把手机上的通讯录/联系人名单,从运行Windows CE 6.0系统的M8手机,转移到运行Google Android 2.2系统的M8手机上。对比了几套方法,感觉这个比较简单而且靠谱:先在PC上把通讯录导入Google Accounts,然后再同步到Android系统手机中。
在运行Windows CE 6.0系统的M8手机中生成的是许多个vCard文件(*.vcf)(具体生成方法见文末),每个联系人单独一个文件。而Google Accounts只允许一次导入一个vCard文件,完全手工操作的话,几百个vCard文件要累死人不偿命的。嗨嗨,很明确的需求来了:把指定目录下的所有vCard文件(*.vcf),合并成一个vCard文件。
先看看单个联系人的vCard(.vcf)内容:
再看看多个联系人共用一个vCard(.vcf)的情况:
可见,多个联系人共用一个vCard(.vcf),其文件内容是单人vCard(.vcf)文件内容的叠加(间隔以空行)。用程序实现起来非常之简单:枚举指定目录下的所有vCard(.vcf)文件,读取其内容,转换为文本叠加到一起,最后把合并后的内容写出到一个vCard(.vcf)文件即可。太简单了,我(liigo)用易语言,没两分钟就写完了:
运行以上代码,就会在D盘根目录下生成合并后的vCard(.vcf)文件,将其往Google Accounts里面导入,很顺利地完成了,检查导入后的数据无误,证明vCard合并结果是正确的。
程序源代码中,为什么把文件路径(“C:/Documents ...”,“d:/myVCards.vcf”)硬编码进去?呵呵,这可不是一个通用的程序,这是运行一次完成任务之后就要丢弃的代码。这种生存周期不足三分钟的程序源代码,弃之毫不足惜;如果将来又遇到类似的功能,随手再写一遍,也要快于从Windows文件管理器中翻出以前写好的旧代码。
一个插曲,代码中用到了我多年前开发的一个易语言支持库,辅助调试支持库,想起来该库还不支持易语言5.x静态编译,于是升级之,支持静态编译,并更名为“枚举文件子目录支持库”(已开源)。
小程序,也能帮大忙。
附:运行Windows CE 6.0系统的M8手机中生成vCard文件的方法:进入通讯录,点击任意联系人,用蓝牙发送,确定后即可在设备根目录(非Disk根目录)下tmpvcard子目录中看到临时自动生成的vCard文件(.vcf),每个联系人各自对应一个vCard文件。我(liigo)建议操作前清空tmpvcard目录,因为先前生成的vCard文件不会被自动删除。另参见此帖:http://bbs.meizu.com/viewthread.php?tid=1978771
在运行Windows CE 6.0系统的M8手机中生成的是许多个vCard文件(*.vcf)(具体生成方法见文末),每个联系人单独一个文件。而Google Accounts只允许一次导入一个vCard文件,完全手工操作的话,几百个vCard文件要累死人不偿命的。嗨嗨,很明确的需求来了:把指定目录下的所有vCard文件(*.vcf),合并成一个vCard文件。
先看看单个联系人的vCard(.vcf)内容:
BEGIN:VCARD VERSION:2.1 N:张三; TEL;CELL:13800008888 END:VCARD
再看看多个联系人共用一个vCard(.vcf)的情况:
BEGIN:VCARD VERSION:2.1 N:张三; TEL;CELL:13800006666 END:VCARD BEGIN:VCARD VERSION:2.1 N:李四; TEL;CELL:13800008888 END:VCARD BEGIN:VCARD VERSION:2.1 N:王五; TEL;CELL:13800009999 END:VCARD ……………………
可见,多个联系人共用一个vCard(.vcf),其文件内容是单人vCard(.vcf)文件内容的叠加(间隔以空行)。用程序实现起来非常之简单:枚举指定目录下的所有vCard(.vcf)文件,读取其内容,转换为文本叠加到一起,最后把合并后的内容写出到一个vCard(.vcf)文件即可。太简单了,我(liigo)用易语言,没两分钟就写完了:
运行以上代码,就会在D盘根目录下生成合并后的vCard(.vcf)文件,将其往Google Accounts里面导入,很顺利地完成了,检查导入后的数据无误,证明vCard合并结果是正确的。
程序源代码中,为什么把文件路径(“C:/Documents ...”,“d:/myVCards.vcf”)硬编码进去?呵呵,这可不是一个通用的程序,这是运行一次完成任务之后就要丢弃的代码。这种生存周期不足三分钟的程序源代码,弃之毫不足惜;如果将来又遇到类似的功能,随手再写一遍,也要快于从Windows文件管理器中翻出以前写好的旧代码。
一个插曲,代码中用到了我多年前开发的一个易语言支持库,辅助调试支持库,想起来该库还不支持易语言5.x静态编译,于是升级之,支持静态编译,并更名为“枚举文件子目录支持库”(已开源)。
小程序,也能帮大忙。
附:运行Windows CE 6.0系统的M8手机中生成vCard文件的方法:进入通讯录,点击任意联系人,用蓝牙发送,确定后即可在设备根目录(非Disk根目录)下tmpvcard子目录中看到临时自动生成的vCard文件(.vcf),每个联系人各自对应一个vCard文件。我(liigo)建议操作前清空tmpvcard目录,因为先前生成的vCard文件不会被自动删除。另参见此帖:http://bbs.meizu.com/viewthread.php?tid=1978771
相关文章推荐
- 自己编写程序批量合并多个“规范定义电子名片(vCard)”文件
- 编写一个程序,将 a.txt 文件中的单词与 b.txt 文件中的单词交替合并到 c.txt 文件中
- 编写一个程序,将a.txt文件中的单词与b.txt文件中的单词交替合并到c.txt文件中,a.txt文件中的单词用回车符分隔,b.txt文件中用回车或空格进行分隔
- Qt+FFMPEG编写适合自己的批量视频转换程序
- 编写一个程序,将a.txt文件中的单词与b.txt文件中的单词交替合并到c.txt文件中,a.txt文件中的单词用回车符分隔,b.txt文件中用回车或空格进行分隔
- Txt文件编码从Unicode转成ANSI编码。给自己的手机i908的电子书写的程序。
- 单个图片、批量图片加入自己定义水印内容小程序开发
- 面试题,编写一个程序,将a.txt文件中的单词与b.txt文件中的单词交替合并到c.txt文件中,a.txt文件中的单词用回车符分隔,b.txt文件中用回车或空格进行分隔。
- 《APUE.3E》习题4.6编写自己的cp(l)程序,它复制包含空洞的文件,但不将字节0包含到输出文件中去
- 编写自己的代码生成工具一:介绍及定义配置文件
- 编写BinIoDemo.java的Java应用程序,程序完成的功能是:完成1.doc文件的复制,复制以后的文件的名称为自己的学号姓名.doc。
- 自己编写的一个程序:读取XML格式的日志文件,并以一定的数据写入数据库中
- 统计文本文件中单词出现频率,自己编写的Java小程序
- 编写一个程序,将a.txt文件中的单词与b.txt文件中的单词交替合并到c.txt文件中,a.txt文件中的单词用回车符分隔,b.txt文件中用回车或空格进行分隔
- 使用定义文件和WINAPI宏编写自己的API动态库
- c++ 自己创建的namespace,声明在h文件中,定义在cpp文件中,这种程序结构应该是合理的吧,欢迎不同见解的朋友来讨论。
- Android ramdisk中添加自己编写的程序或文件
- 编写一个程序,将 a.txt 文件中的单词与 b.txt 文件中的单词交替合并到 c.txt 文件中,a.txt 文件中的单词用回车符分隔,b.txt 文件中用回车或空格进行分隔。
- 编写一个程序,将 a.txt文件中的单词与b.txt文件中的单词交替合并到c.txt 文件中,a.txt文件中的单词用回车符分隔,b.txt文件中用回车或空格进行分隔
- 编写一个程序,将a.txt文件中的单词与b.txt文件中的单词交替合并到c.txt文件中,a.txt文件中的单词用回车符分隔,b.txt文件中用回车或空格进行分隔