From 91590ef13701b9239dde265d6bcf33b6e3e99a98 Mon Sep 17 00:00:00 2001 From: minima Date: Fri, 13 May 2005 18:42:44 +0000 Subject: [PATCH] get it up and running basically on a test file --- perl/ARRL/DX.pm | 77 +++++++++++++++++++++++++++++++++++++++++++++---- perl/dbtest.pl | 10 ++++++- 2 files changed, 80 insertions(+), 7 deletions(-) diff --git a/perl/ARRL/DX.pm b/perl/ARRL/DX.pm index 7eaf3eb7..924ed672 100644 --- a/perl/ARRL/DX.pm +++ b/perl/ARRL/DX.pm @@ -12,20 +12,21 @@ package ARRL::DX; use vars qw($VERSION $BRANCH $dbh $dbname %tabledefs $error); -#main::mkver($VERSION = q$Revision$); +main::mkver($VERSION = q$Revision$) if main->can('mkver'); use DXLog; use DXDebug; use DXUtil; use DBI; use IO::File; +use Date::Parse; $dbname = "$main::root/data/arrldx.db"; %tabledefs = ( - paragraph => 'CREATE TABLE paragraph(p text, t int)', + paragraph => 'CREATE TABLE paragraph(p text, t int, bullid text)', paragraph_t_idx => 'CREATE INDEX paragraph_t_idx ON paragraph(t DESC)', - refer => 'CREATE TABLE refer(r text, id int, t int, pos int)', - refer_id_idx => 'CREATE INDEX refer_id_idx ON refer(id)', + refer => 'CREATE TABLE refer(r text, rowid int, t int, pos int)', + refer_id_idx => 'CREATE INDEX refer_id_idx ON refer(rowid)', refer_t_idx => 'CREATE INDEX refer_t_idx ON refer(t DESC)', ); @@ -33,7 +34,7 @@ sub new { my $pkg = shift; my $class = ref $pkg || $pkg; - my %args = $@; + my %args = @_; $error = undef; @@ -75,12 +76,76 @@ sub new sub process { my $self = shift; + + return unless $self->{f}; + + my $state; + my $count; + $dbh->begin_work; + my $f = $self->{f}; + while (<$f>) { +# print; + unless ($state) { + $state = 'ZC' if /^ZCZC/; + } elsif ($state eq 'ZC') { + if (/\b(ARLD\d+)\b/) { + $self->{id} = $1; + $state = 'id'; + } + } elsif ($state eq 'id') { + if (/^Newington\s+CT\s+(\w+)\s+(\d+),\s+(\d+)/i) { + $state = 'date' ; + $self->{date} = str2time("$1 $2 $3") if $state eq 'date'; + } + } elsif ($state eq 'date') { + if (/^$self->{id}/) { + last unless /DX\s+[Nn]ews\s*$/; + $state = 'week'; + } + } elsif ($state eq 'week') { + $state = 'weekro' if /^This\s+week/; + } elsif ($state eq 'weekro') { + if (/^\s*$/) { + $state = 'para'; + $self->{para} = ""; + } + } elsif ($state eq 'para') { + if (/^\s*$/) { + if ($self->{para}) { + $self->{para} =~ s/^\s+//; + $self->{para} =~ s/\s+$//; + $self->{para} =~ s/\s+/ /g; + $self->insert; + $self->{para} = ""; + $count++; + } + } elsif (/^THIS\s+WEEKEND/) { + last; + } + chomp; + s/^\s+//; + s/\s+$//; + $self->{para} .= $_ . ' '; + } + } + $dbh->commit; + $self->{f}->close; + delete $self->{f}; + return $count; } sub insert { my $self = shift; - + my $sth = $dbh->prepare("insert into paragraph values(?,?,?)"); + $sth->execute($self->{para}, $self->{date}, $self->{id}); + my $lastrow = $dbh->func('last_insert_rowid'); +} + +sub close +{ + $dbh->disconnect; + undef $dbh; } 1; diff --git a/perl/dbtest.pl b/perl/dbtest.pl index 51a5c4d0..c4f5ca8e 100755 --- a/perl/dbtest.pl +++ b/perl/dbtest.pl @@ -18,6 +18,14 @@ use DXDebug; use ARRL::DX; -my $dx = ARRL::DX->new; +while (@ARGV) { + my $fn = shift; + print "Processing $fn "; + my $dx = ARRL::DX->new(file=>$fn); + my $c = $dx->process; + print "$c paragraphs\n"; +} + +ARRL::DX::close(); exit 0; -- 2.34.1