emacs-orgmode
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [O] Basic vcard-to-org-contacts converter


From: Feng Shu
Subject: Re: [O] Basic vcard-to-org-contacts converter
Date: Tue, 25 Mar 2014 08:07:13 +0800
User-agent: Gnus/5.13001 (Ma Gnus v0.10) Emacs/24.3.50 (gnu/linux)

Titus von der Malsburg <address@hidden> writes:

> Hi list!
>
> I decided to give org-contacts a try.  Since there doesn't seem to be a
> facility for importing contacts in vcard format, I wrote a little Python
> script for that.  Perhaps someone on this list finds it useful.
>
>   https://gist.github.com/tmalsburg/9747104
>
> The script uses the Python package vobject for parsing vcard files.  On
> Debian-like systems this package is available as python-vobject.  I
> tested the script with contacts exported from Apple's iCloud service and
> that worked well.  However, the vcard format is somewhat messy and I
> don't know what happens with vcard files generated in other contact
> managers.  Use at your own risk.

Import from csv is a solution too, I use the below hack functions to import a
csv file...

#+begin_src

(defun eh-org-contacts-parse-csv-line (line)
  "Build a org contact from a csv line"
  (let ((list (split-string line ",")))
    (concat "* " (nth 0 list) "\n"
            ":PROPERTIES:\n"
            ":PHONE: " (nth 1 list) "\n"
            ":EMAIL: " (let ((string (nth 2 list)))
                         (if (string-match-p "@" string) string
                           (if (> (length string) 0) (concat string 
"@qq.com")))) "\n"
            ":NOTE: "  (mapconcat 'identity (nthcdr 3 list) "; ") "\n"
            ":END:\n")))

(defun eh-org-contacts-csv-import (&optional filename)
  "Convert a csv file to org contacts format and insert current point"
  (interactive)
  (let ((file (if filename filename (read-file-name "CSV file:")))
        (buffer (current-buffer))
        (point (point))
        contacts-string)
  (with-temp-buffer
    (insert-file-contents file)
    (goto-char (point-min))
    (while (< (point) (point-max))
      (setq contacts-string (concat contacts-string 
(eh-org-contacts-parse-csv-line (buffer-substring (point) (progn (end-of-line) 
(point)))) "\n"))
      (forward-line 1)
      (beginning-of-line 1)))
  (switch-to-buffer buffer)
  (goto-char point)
  (insert contacts-string)))

#+end_src

>
> If there's interest, I might migrate the script to a proper Github
> repository and develop it further, i.e., merge your pull-requests ;-)
>
>   Titus

-- 




reply via email to

[Prev in Thread] Current Thread [Next in Thread]