T his is a n example of the spotty indexing on the J software website. Type in 'format' in the search box, and you get lots about x":y, and 8!:0. but nothing about printf, at least not in the first few pages of search results. Searching for 'print format' comes up with some better results which mention 'printf', so if you are familiar with that name from other programming languages, you are in luck. However, nothing shows up which tells about about how handy prinf is, so if you aren't already familiar with the function from other languages, you might just pass over it.
Skip. Skip Cave Cave Consulting LLC On Sun, Mar 2, 2014 at 10:33 AM, Raul Miller <[email protected]> wrote: > In my case, I was working with date format from files. The timestamp part > was just for exercise purposes. > > And, I had forgotten that we had an sprintf cover. > > That's a general problem with computer facilities in general - how do we > find the interesting stuff? The solution seems to require a mix of study > and talking, with a bit of tolerance for errors and alternate solutions. > > In my case, though, sprintf was what I really needed, and I am mildly > embarrassed that I forgot about it. > > Thanks, > > -- > Raul > > > On Sun, Mar 2, 2014 at 10:16 AM, Tom Arneson <[email protected]> wrote: > > > If you want to format the current time, that's built in to 6!:0 > > > > 6!:0 'YYYY-MM-DDThh:mm:ss' > > 2014-03-02T09:12:48 > > > > -----Original Message----- > > From: [email protected] > > [mailto:[email protected]] On Behalf Of Joe > Bogner > > Sent: Sunday, March 02, 2014 04:52 > > To: [email protected] > > Subject: Re: [Jprogramming] iso time format with 8!:2 > > > > I know you mentioned 8!:2. Personally, I would probably skip that and use > > sprintf coming from a C background... > > > > load 'format/printf' > > > > '%d-%02d-%02dT%02d:%02d:%02d' sprintf 6!:0'' > > 2014-03-02T05:47:14 > > > > It's convenient that the indexes line up, otherwise it'd be a handful of > > selections > > > > This took less than 2 minutes, which is more than what I spent reading > the > > 8!:2 page. When would 8!:2 be used over sprintf? Presumably 8!:2 is > faster > > > > On Sun, Mar 2, 2014 at 4:04 AM, Raul Miller <[email protected]> > wrote: > > > 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 > > ---------------------------------------------------------------------- > > For information about J forums see http://www.jsoftware.com/forums.htm > > > > ---------------------------------------------------------------------- > > For information about J forums see http://www.jsoftware.com/forums.htm > > > ---------------------------------------------------------------------- > For information about J forums see http://www.jsoftware.com/forums.htm > ---------------------------------------------------------------------- For information about J forums see http://www.jsoftware.com/forums.htm
