James Kanze
12/3/2008 10:21:00 PM
On Dec 3, 8:44 pm, Jeff Schwab <j...@schwabcenter.com> wrote:
> Fred wrote:
> > On Dec 3, 7:54 am, Jeff Schwab <j...@schwabcenter.com> wrote:
> >>> fprintf(stream, "%s%s", IC.StringA, IC.StringB);
> >> Here, you write the strings back-to-back, without any
> >> intervening whitespace. When you try to read the strings
> >> back into your program, the whole sequence will be mistaken
> >> for one string. You could try inserting a space, so that
> >> the format string is "%s %s".
> > This still will not work if either of the strings contains
> > embedded whitespace.
> Good point. That did not occur to me.
It's a general problem when serializing in text format.
Choosing a separator for most types is fairly trivial, however;
there are lots of characters which can't show up in the string
representation an int or a double. (But it still requires some
thought---the C++ standard for formatting a complex regretfully
uses a separator which can occur in a double, which means that a
standard conforming implementation is totally useless.) For
strings in general, it's a bit more complicated. Most strings,
however, have a semantic, e.g. family name, or something like
that, which will forbid some characters, and thus allow a
separator; if not, I've written a ParsableString class which
ensures round trip serialization, roughly by using the
conventions for C++ string literals: in quotes, with quotes and
unprintable characters escaped.
--
James Kanze (GABI Software) email:james.kanze@gmail.com
Conseils en informatique orientée objet/
Beratung in objektorientierter Datenverarbeitung
9 place Sémard, 78210 St.-Cyr-l'École, France, +33 (0)1 30 23 00 34