...making Linux just a little more fun!
Joey Prestia [joey at linuxamd.com]
Hi Tag,
I am trying to rework a script that currently uses an external file to keep track of what issue the Linux Gazette is on. I would like to do this with out relying on an external file (feels cleaner that way) and just calculate this from within the script using maybe the month and year from localtime(time) from within Perl. Using the month and year I thought this would be an easy task but it turns out its more difficult than I thought. I will probably need some formula to do It to since I will be running it from cron. Can you make any suggestions on how I might attempt this? I have tried to figure a constant that I could use to get it to come out correct with no luck. What works for one year fails when the year changes when you add the month to the year.
# Get Issue my (@date,$month,$year,$issue);
@date = localtime(time); $month=($date[4])+1; $year=($date[5])+1900;
$issue= $year - 1841 + $month ; print "Month = $month Year = $year Issue = $issue\n";
Joey
Ben Okopnik [ben at linuxgazette.net]
Hi, Joey -
On Mon, Sep 06, 2010 at 08:34:43PM -0700, Joey Prestia wrote:
> Hi Tag, > > I am trying to rework a script that currently uses an external file to > keep track of what issue the Linux Gazette is on. I would like to do > this with out relying on an external file (feels cleaner that way) and > just calculate this from within the script using maybe the month and > year from localtime(time) from within Perl.
That won't work - there's no linear correspondence like that. As I recall, we've had months with two issues - and we've had months without an issue (before I took over); just take a look at http://linuxgazette.net/archives.html .
> Using the month and year I > thought this would be an easy task but it turns out its more difficult > than I thought. I will probably need some formula to do It to since I > will be running it from cron. Can you make any suggestions on how I > might attempt this?
You could always cheat and use the archives - live.
#!/usr/bin/perl -w # Created by Ben Okopnik on Mon Sep 6 23:45:27 EDT 2010 use strict; die "Usage: ", $0 =~ /([^\/]+)$/, "<file|-> <m> <YYYY>\n" unless @ARGV == 3 and $ARGV[1] =~ /^\d{1,2}$/ and $ARGV[2] =~ /^\d{4}$/; my($m, $y) = splice @ARGV, 1; my $re = qr/^\s(.{4})\s/ . qr/(.{9})/ x 12; my %issue; while (<>){ tr/0-9\t\n //dc; next unless /\d{4}/; my @line = /$re/; $issue{$line[0]} = [ @line[1..$#line] ]; } print $issue{$y}->[$m - 1], "\n";
ben at Jotunheim:~$ w3m -dump linuxgazette.net/archives.html|archie - 9 2010 178 ben at Jotunheim:~$ w3m -dump linuxgazette.net/archives.html|archie - 4 1999 39 40 ben at Jotunheim:~$ w3m -dump linuxgazette.net/archives.html|archie - 2 1996 ben at Jotunheim:~$
(There was no issue on 2/96, so, no output.)
-- * Ben Okopnik * Editor-in-Chief, Linux Gazette * http://LinuxGazette.NET *
Ben Okopnik [ben at linuxgazette.net]
On Mon, Sep 06, 2010 at 08:34:43PM -0700, Joey Prestia wrote:
> > I am trying to rework a script that currently uses an external file to > keep track of what issue the Linux Gazette is on.
Just thought of this: the output could be a bit more obvious/readable.
#!/usr/bin/perl -w # Created by Ben Okopnik on Mon Sep 6 23:45:27 EDT 2010 use strict; die "Usage: ", $0 =~ /([^\/]+)$/, "<file|-> <m|mm> <YYYY>\n" unless @ARGV == 3 and $ARGV[1] =~ /^\d{1,2}$/ and $ARGV[2] =~ /^\d{4}$/; my($m, $y, %issue) = splice @ARGV, 1; my $re = qr/^\s(.{4})\s/ . qr/\s{1,4}(.+?)\s{1,4}/ x 12; while (<>){ next unless /\d{4}/; tr/0-9\t\n //dc; my @line = /$re/; $issue{$line[0]} = [ @line[1..$#line] ]; } print "$m/$y: [$issue{$y}->[$m-1]]\n";
Output now looks like:
2/1996: [ ] 4/1999: [39 40] 9/2010: [178]
-- * Ben Okopnik * Editor-in-Chief, Linux Gazette * http://LinuxGazette.NET *
Joey Prestia [joey at linuxamd.com]
On 9/6/2010 9:29 PM, Ben Okopnik wrote:
> > You could always cheat and use the archives - live. >
That looks like an excellent choice. Its already in existence.
> > `` > ben at Jotunheim:~$ w3m -dump linuxgazette.net/archives.html|archie - 9 2010 > 178
Never thought to use w3m. Cool thanks.
-- Joey Prestia L. G. Mirror Coordinator http://linuxgazette.net
Ben Okopnik [ben at linuxgazette.net]
On Wed, Sep 08, 2010 at 07:05:56AM -0700, Joey Prestia wrote:
> On 9/6/2010 9:29 PM, Ben Okopnik wrote: > > > > > You could always cheat and use the archives - live. > > > > That looks like an excellent choice. Its already in existence.Yeah, I try to be as efficiently lazy as possible.
> > `` > > ben at Jotunheim:~$ w3m -dump linuxgazette.net/archives.html|archie - 9 2010 > > 178 > > Never thought to use w3m. Cool thanks.
By this point, I know the LG data structure so well that parsing it is just about automatic. And, as in the case of this one, kinda fun.
-- * Ben Okopnik * Editor-in-Chief, Linux Gazette * http://LinuxGazette.NET *