Given 6!:0'' 2014 3 2 3 30 46.034 I'd like to generate the string 2014-03-02T03:30:46
And, to make things just a bit strange, I'd like to use 8!:2 instead of the obvious. Just to be clear, though, here's my idea of "obvious": }:;(1,5#3)<@}."_1'--T:: ',.~":,.10000+<.6!:0'' By obvious, I do not mean that I instantly thought of that expression, I had to think a few minutes, and I had a few errors to fix in my initial concept. But by "obvious" I mean that I am using the basic J vocabulary. Picking up the vocabulary isn't instant, though, and I'm using 14 different words from the vocabulary (plus some nouns and a pair of parenthesis). So if we expect a person to pick up five words from the vocabulary a week, that's at least three weeks of training before a person could be reasonably comfortable composing a sentence like that. Now... the 8!:0, 8!:1 and 8!:2 verbs do have their own tiny vocabulary as represented by their format strings. But these are examples of extremely specialized words - not very powerful at all, which means they require less study than J as a whole, and (within their limited capabilities) will tend to be faster that a more general approach. Formatting is not likely a speed bottleneck for iso date formatting - it's more when you have a big sheet of numbers and a weak computer that you might care about formatting time. But it's still an interesting exercise. (Or a boring one, if you are not interested in formatting text.): So... here's how I approached this exercise: <.2014 3 2 3 30 46.034 2014 3 2 3 30 46 Let's just ignore the decimal part, for now. '4' 8!:2 <.2014 3 2 3 30 46.034 2014.00003.00002.00003.000030.000046.0000 Looks like a number by itself is decimal places after the decimal point. '4.' 8!:2 <.2014 3 2 3 30 46.034 2014 3 2 3 30 46 But a decimal point in the format specifier fixes that. '4.,2.,2.,2.,2.,2.' 8!:2 <.2014 3 2 3 30 46.034 2014 3 2 33046 I need commas to separate the format specifiers for independent columns. '4.,r<0>2.,2.,2.,2.,2.' 8!:2 <.2014 3 2 3 30 46.034 201403 2 33046 The r option gives "fill" or, in this context "leading zeros", but each format needs this spec. '4.,r<0>2.,r<0>2.,r<0>2.,r<0>2.,r<0>2.' 8!:2 <.2014 3 2 3 30 46.034 20140302033046 Getting bulky, but now all my two digit numbers can have leading zeros. I could get fancy here, and use J to build the format specifier, but that's premature, watch: '4.,p<->r<0>2.,p<->r<0>2.,p<T>r<0>2.,p<:>r<0>2.,p<:>r<0>2.' 8!:2 <.2014 3 2 3 30 46.034 2014-3-2T3**** Here, I've added a prefix for each number, to get the various separators. Unfortunately, I forgot to widen each column to make things fit. '4.,p<->r<0>3.,p<->r<0>3.,p<T>r<0>3.,p<:>r<0>3.,p<:>r<0>3.' 8!:2 <.2014 3 2 3 30 46.034 20140-30-20T3:30:46 That's... better ,but now we can see that the concept of fill interacts badly with the concept of using a prefix, so let's try using a suffix instead: 's<->4.,s<->r<0>3.,s<T>r<0>3.,s<:>r<0>3.,s<:>r<0>3.,r<0>3.' 8!:2 <.2014 3 2 3 30 46.034 |domain error Oops, suffix is a q, not an s. 8!:2<.2014 3 2 3 30 46.034 'q<->4.,q<->r<0>3.,q<T>r<0>3.,q<:>r<0>3.,q<:>r<0>3.,r<0>3.' 8!:2 <.2014 3 2 3 30 46.034 ****03-02T03:30:046 Almost done but I need to adjust my column widths again. 'q<->5.,q<->r<0>3.,q<T>r<0>3.,q<:>r<0>3.,q<:>r<0>3.,r<0>2.' 8!:2 <.2014 3 2 3 30 46.034 2014-03-02T03:30:46 Done. And, that's not actually a whole lot more verbose than the other expression. It's tempting to think about making 8!:2 more powerful, but it's not really about power - it's a specialized tool for a specialized task. If you want the full generality of J, it's available. Of course, if you really want an iso formatted timestamp, you could always find another way to get that. Learning exercises necessarily restrict themselves in various ways. Also... http://en.wikipedia.org/wiki/ISO_8601 points out that the standard really covers a lot of ground. And one thing we do not currently have in J is a way of getting at what the operating system thinks is the time zone of the user. That can matter if you are on a phone (where back a few decades ago, computers were a bit harder to carry). Thanks, -- Raul ---------------------------------------------------------------------- For information about J forums see http://www.jsoftware.com/forums.htm