On Sep 24, 8:38 pm, [EMAIL PROTECTED] wrote: > I'm using html::tokeparser::simple and will next place desired data > into hashes, but I'm having problems getting to the individual pieces > of data. > > After using html::tokeparser::simple, then using a regex and pushing > data into a new array, I can't access individual elements of the > array. Using data dumper, I see several variables that are undefined, > in addition to the 3 digit wind directions that I'm looking to access > individually via $wnddir[2] etc. > My goal is to only have what I'm trying to parse (wind directions of 3 > digits each in this case) in my array that I'm pushing to. Here's my > code: > > #!/usr//bin/perl > > use warnings; > use strict; > use CGI qw(:standard); > use CGI::Carp qw(fatalsToBrowser); > use LWP::Simple qw(!head); > use HTML::TokeParser::Simple; > use Data::Dumper; > > print header; > print start_html("WindshftObs"); > my @wnddir = (); > my @times = (); > my $sjc="sjc"; > my $sfo="sfo"; > my $sql="sql"; > > #call sub to loop through ob data and parse wnd direction and time of > #observation > my @data = Winds($sfo, $sjc); > > foreach my $datum (@data) { > my ($wnds) = $datum =~ (/(\d{3})+\d{2}KT|(\d{3})+\d{2}G\d{2}KT/); > push @wnddir, $wnds; > my ($Offtime) = $datum =~ (/\d{2}(\d{2})\d{2}Z/); > push @times, $Offtime;} > > print Dumper @wnddir; > print "@wnddir<br>"; > > sub Winds { > return "Error: No argument sent to Winds" unless @_; > my @apt = @_; > my @data; > > foreach my $icao (@apt) { > my $url = "http://www.wrh.noaa.gov/mesowest/getobext.php? > wfo=&sid=K$icao&num=3&raw=3&dbn=m&banner=off"; > my $content= get($url) or die "Error getting file: $!"; > my $p = HTML::TokeParser::Simple->new(\$content) || die "Can't > open: $!"; > > while (my $token = $p->get_token) { > next unless $token->is_text; > push @data, $token->as_is; > } > > } > return @data; > > } > > print end_html; > > And here's my results: > $VAR1 = undef; $VAR2 = undef; $VAR3 = undef; $VAR4 = '280'; $VAR5 = > '280'; $VAR6 = '340'; $VAR7 = undef; $VAR8 = undef; $VAR9 = undef; > $VAR10 = undef; $VAR11 = '330'; $VAR12 = '330'; $VAR13 = '340'; $VAR14 > = undef; 280 280 340 330 330 340 > > Thanks for your time and any explanations you can give... > Shad
Besides the correction that John showed (which is the same as the one I showed in your CF question), you should also only push onto @data the tokens that have the required data. Change: push @data, $token->as_is; To: push @data, $token->as_is if $token->as_is =~ /^k$icao/i; Also, since you seem to only want the wind direction numbers, the building of the @wnddir and @times should be done in the sub. If you go that direction, I'd build a hash of arrays or possibly a hash of hashes of arrays. -- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED] http://learn.perl.org/