> When parsing structures which can extend over newlines and/or support
> wierd quoting rules (like csv), it's almost inevitable.

When I need to parse, say, backslash escapes (and sscanf's %O doesn't
do the right thing), I start by splitting on \ and then investigate
the pieces. Or alternatively I use sscanf in more or less the same
way, i.e. scans data up to a character, do stuff with it, then loop.
E.g:

   String.Buffer out = String.Buffer();
   while (1) {
     int res = sscanf (in, "%[^\\]\\%c%s", string pre, int esc, in);
     out->add (pre);
     if (res != 3) break;
     switch (esc) {
       case '\\n': case '"': out->putchar (esc); break;
       // ...
     }
   }

I almost always use tricks like that to avoid single stepping chars on
the pike level. Even though the loop above actually is O(n^2) I
believe it's faster on moderately small strings.

But then again, I also got integer chars in my example above, so maybe
we're talking about the same approach afterall.
              • ... Stephen R. van den Berg
            • ... Mirar @ Pike developers forum
              • ... Marc Dirix
              • ... Mirar @ Pike developers forum
              • ... Stephen R. van den Berg
              • ... Peter Bortas @ Pike developers forum
              • ... Stephen R. van den Berg
              • ... Peter Bortas
        • Re: Supp... Martin Stjernholm, Roxen IS @ Pike developers forum
          • Re: ... Stephen R. van den Berg
            • ... Martin Stjernholm, Roxen IS @ Pike developers forum
              • ... Jonas Walld�n @ Pike developers forum
              • ... Martin Stjernholm, Roxen IS @ Pike developers forum
              • ... Stephen R. van den Berg
              • ... Mirar @ Pike developers forum
              • ... Jonas Walld�n @ Pike developers forum
              • ... Mirar @ Pike developers forum
              • ... Jonas Walld�n @ Pike developers forum
  • Support for array(str... Martin Stjernholm, Roxen IS @ Pike developers forum

Reply via email to