Regrettably, this character is alive and well in healthcare. Where, you ask?
In HL7 (naturally). In the MLLP transport. You get something like:
<vertical tab> <message data> <file separator> <carriage return>
Ah, good ole' ASCII.
Sure, but would it kill anyone (perhaps a poor choice of word in the context of healthcare software) to use ‘\013’ instead of ‘\v’?
Surprisingly enough, it seems changes are deadly. Many times has there been an aversion to change, because what works works (at least, until it breaks). Changes make things incompatible, reality makes it unbearable.
To quote nobody in particular:
Why does the sun rise in the East, and set in the West?
It works, don’t touch!
This is a new perspective for compiler writers – something’s working, let’s break it!
I usually use vertical tab in shell pipelines where other common delimiters (tab, colon, comma) are likely to be in the input. It allows some robustness without excess crazyness.
That’s what GS, RS, and US are for! Group, Record, and Unit Separator, ASCII 1D, 1E, 1F.
So, I always get the feeling that the lower values in ASCII are Black Magic ™, not meant for mere mortals.
But, as I’ve gotten older, I’ve seen more and more things that actually worked really well and then were abandoned because people forgot what problems they solved–only to reinvent those solutions later.
So, where can we learn about the utility and history of all those goofy control codes?
To be fair GS, RS and US are only useful if you’re encoding text and only ASCII or UTF-* or something ASCII based that is either fixed width or doesn’t use something under 1F as a prefix and your data doesn’t use 1D, 1E or 1F.
However GS RS and US are still alive and kicking if you work with Mainframes because their database dumps (which are the cleanest ever) use that instead of CSV/SQL. But the best ‘history’ of control codes right now is learning about the VT100 and VT220 standards.
That actually gave me an idea on what to do if my shell scripts' input delimiters start being problematic and need to be worked around to accept input that has them.
The solution might not be to drop something that isn’t being used but to start using it more because it does have a purpose.
So what should one decode and possibly interpret for values of 0x0B?