vCardSplit

Contents:  vCardSplit Overview  Feature list  Download!  System Requirements  Support  Known Faults Development The Future and Comments  Changelog and Release Notes

I was chatting to a friend of mine, and he mentioned that he had a problem. He'd exported his contacts from the Palm Desktop to a vCard, in the hope of importing them into Outlook.

Sadly, Outlook imported the first contact from the file and then stopped.

This just wasn't on, really. But with 200+ vCards in the file, he was in for a lot of cut-and-paste editing to get them into separate files. So I offered to write something to do it for him.

vCardSplit Overview

vCardSplit takes a standard vCard file and exports all valid vCards from it into individual vCard files. This can be useful it you are trying to export into another system. vCardSplit also takes great care to avoid overwriting data at any point - it will never erase or overwrite a file.

Feature list

vCardSplit is a very small program, hence this short list:

  • vCardSplit is a small, fast command line program. But it's not a DOS program - it's pure Win32 code, and as such will handle long filenames without problems.
  • vCardSplit will never overwrite data. Ever. The file to be split is opened for reading only, and any files that exist already result in the appropriate vCard being skipped (not exported).
  • vCardSplit can handle truncated vCard files with aplomb - it simply skips any truncated (incomplete) entries within the file
  • All of vCardSplit's output goes to STDOUT - so you can redirect it with ease using pipes on the command line.
  • Despite being a command line program, vCardSplit has simplicity as its philosophy. It takes one argument, and one argument only - the name of the file to split.
  • Running vCardSplit without any options will present you with a screen full of help.
  • vCardSplit is absolutely free - released under the GPL, so you can even see my source code for it!

Download!

vCardSplit is available for distribution in the following archive files:
Download vCardSplit now! (RAR archive, 24Kb)  (GnuPG signature)
Download vCardSplit now! (ZIP archive, 29Kb)  (GnuPG signature)
Download vCardSplit and its source code (RAR archive, 33Kb)  (GnuPG signature)
Download vCardSplit and its source code (ZIP archive, 44Kb)  (GnuPG signature)

If you're not sure which version to go for, then choose the vCardSplit ZIP archive without sources, which is a tiny 23Kb and should download in under a minute.

GnuPG Signatures have been provided for advanced (and paranoid) users who wish to verify that these archives were produced by me. You'll need my key to use them, of course.

System Requirements

  • Any 32-bit Windows Platform (Windows 9x, Windows NT, Windows 2000)
  • About 50Kb of free disk space (For installation)
  • A user unafraid of the command prompt

Support

No support guaranteed is given with vCardSplit - the program is provided freely, and development and support will be fitted into my own schedule. However, you can send an email to me with bug reports or with feature requests if you wish.

Known Faults

No software is perfect. Especially if written by me. However, at present there are no known faults with vCardSplit.

I tested it three times, and nothing went wrong. I can't think what would go wrong, either.

If that changes, I'll let you all know here.

Development

vCardSplit was developed with PowerBASIC's excellent Console Compiler version 3. As usual, PowerBASIC have produced a compiler which makes fast, small and completely native code - without the need for runtimes.

The icon for the executable (all executables should have icons - it's sloppy not to add them!) was created in Paint Shop Pro 8.

The Future and Comments

vCardSplit does the job it was intended to do. Although it wasn't necessarily as easy as it could have been to develop - my original test data had some duplicate entries which made me wonder why I had too many "skipped" vCards due to duplicate filenames - it has been somewhat rewarding.

The two most common queries I get are whether or not I'll make a GUI version, and why didn't I write it in Perl?

Yes, I have considered a GUI version. It's likely. I just need to figure out exactly what I want to do from here on. A GUI version that just splits vCard files seems, well, a bit silly. It might be more friendly, but I figure that if you're mucking around with vCards then you probably know what you're doing anyway, and will be able to handle the command prompt.
To be honest, I'm just not sure where to take any development from here... But if I make a decision, I'll update this page accordingly.

Why didn't I write it in Perl?
Same reason I didn't write it in Visual Basic. I don't like runtimes. Whilst a Perl script would be portable to anywhere that has a Perl interpreter, it still requires a few megabytes for that interpreter.
This program is, as you may have noticed, tiny. In fact, the changelogs show that it's never really significantly increased in size, growing on average around 2 kilobytes when I add new features.
Get me a perl script which, with a Perl environment, is less than 35K, and I'll be suitably impressed. But until then, I'm sticking with pure Win32 code. You can download this program to ANY computer running Windows 95 or Windows NT 3.51 onwards, and it'll run. Which is just what I wanted.

I suppose I should add a small postscript here. The fellow I wrote this for originally split his vCard file. But Outlook still won't import more than a few vCards at a time, as it runs out of resources and crashes when it tries all 200.
I shall refrain from saying that this is typical of Outlook... *grins*

Changelog and Release Notes

Release 1.0 didn't actually make it to a public release, as I went on holiday. Release 1.0.2 Build 5 should be considered the first release. It is also, at the time of writing, the latest.

The Changelog

Changelog for vCardSplit
========================

* Notes on release
+ New behaviour/feature
- Removed behaviour/feature
# Changed behaviour/feature

Version numbering:
  Version numbers are handled in the following manner:
  Version x.y.z build n (year-month-day)
  Where x is the major version number;
        y is the minor version number;
        z is the amendment version number;
    and build n is the build number.
  Major version numbers (x) are typically incremented when
   a major feature has been added or changed
  Minor version numbers (y) are typically incremented when
   a minor feature has been added or changed
  Amendment version numbers (z) are typically incremented
   when a minor change or a small bugfix has occurred
  Build numbers reflect the number of times that it took
   to get the version working - a sad indictment of my
   programming abilities, on most occasions



Version 1.0.2 Build 5 (2004-02-18)

  * Size has now increased ever so slightly...
     It's now 33,280 bytes large. If it grows at this rate,
     it won't be able to fit on a 1.44Mb floppy disk sometime
     in the year 4004.
     When that happens, you can all have your money back. :-)
  * Commented the source even more - should now be obvious
     what's happening. Even if you're a blind, braindead
     bumblebee with a learning disorder, who's reading the
     source code whilst drunk...
  * Removed variables that were declared but never used.
     I probably optimised out the need for these variables,
     but completely forgot to remove them.
  + If the file doesn't look like a vCard file, vCardSplit
     will automatically check it for CR/LF pairs and warn
     that it cannot handle UNIX-formatted text files.
  + vCardSplit is now able to skip blank lines at the start
     of the file correctly. I've not seen any software export
     vCards like this, but as I expended my test suite of
     malformed vCards I found this simple bug, and added code
     to deal with it.
  + vCardSplit also spots completely empty files and handles
     them correctly.
     (That was a problem I found when testing the skipping of
     blank lines. Who says I never test anything?)


Version 1.0.1 Build 3 (2003-09-01)

  * Release 1.0 wasn't fully released
  * Back from holiday (That's why it wasn't released!)
  * Size unchanged - still 32,768 bytes
  # Changed the way that long filenames are generated for
     export - slightly more elegant, and will now strip
     multiple spaces to single spaces reliably


Version 1.0.0 Build 1 (2003-07-28)

  * RELEASE 1.0! YAY!
  * Added GPL Licensing to source & program
  * Size has now increased to 32,768 bytes (Big license!)
  + vCardSplit.exe license at the command line will display
     some terse details of the license
  # Tidied up the help text
  # Now opens long filenames (enclosed in quotes) correctly


Version 0.9.2 Build 3 (2003-07-27)

  * Even more error checking! All test cases now work
  * Size has increased to 30,720 bytes
  # Now handles premature end of file correctly
     (File can end without END:VCARD and the last entry will be
     as if it were a truncated entry within the file, as in 0.9.1
     Build 4)


Version 0.9.1 Build 4 (2003-07-27)

  * Increased error checking to cope with broken vCard files
  * File size now 30,208 bytes
  + Now correctly skips past badly truncated entries
     (Checks for BEGIN:VCARD before END:VCARD and skips the entry)


Version 0.9.0 Build 6 (2003-07-14)

  * Tidying up for final release
  * Size 30,208 bytes
  + Now has an icon - nothing special
  + File also has version information embedded by compiler
  # Improved logging capabilities by echoing line numbers in output
     (This allows you to open the vCard input file and the log in
     Notepad, and check the vCard manually)
  # Fixed an incomplete sentence in the help text
  # Allowed "&" (ampersand) characters back into filenames


Version 0.8.5 Build 3 (2003-07-14)

  * First public release
  * Size 26,112 bytes
  + Running with no options shows help
  + Shows statistics on numbers processed, skipped, existing at
    end of run
  + Checks integrity by searching for "VCARD:BEGIN" on first line
  + Will skip entries with no Organisation or Full Name
  + Will not overwrite existing files
  + Will not generate bad filenames


All prior builds were alpha test builds, not intended for public release.
No documentation wass kept for those builds and their changes.