Mercurial > pt1.oyama
view src/epgdump_xml_parse.pl @ 185:7a0f498af035 default tip
Fix a race condition.
author | Naoya OYAMA <naoya.oyama@gmail.com> |
---|---|
date | Wed, 14 May 2014 22:43:57 +0900 |
parents | 2c1cec3c5d64 |
children |
line wrap: on
line source
#!/usr/bin/perl -w # epgdmp_xml_parse.pl -- parse epgdump XML file. # # Copyright 2012 Naoya OYAMA <naoya.oyama@gmail.com> # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program. If not, see <http://www.gnu.org/licenses/>. use strict; use XML::Simple; my $simple = XML::Simple->new (ForceArray => 1, KeepRoot => 1); my $data = $simple->XMLin($ARGV[0]); my @base = @{$data->{tv}}; my %tv = %{$base[0]}; my %channels = %{$tv{channel}}; my %channel_info_list = (); my @service_id_list = (); while (my ($channelType, $channelRef) = each %channels) { my %channel = %$channelRef; my $service_id = $channel{service_id}; my @si = (); my %sih = (); my $tp = ""; my $slot = ""; if (defined($channel{satelliteinfo})) { @si = @{$channel{satelliteinfo}}; %sih = %{$si[0]}; $tp = $sih{TP}[0]; if ($tp =~ /BS/) { $slot = $sih{SLOT}[0]; } } else { $tp = $ARGV[0]; $tp =~ s/^.*\/(\d+)\.xml$/$1/; } my @dpna = @{$channel{"display-name"}}; my %dpnh = %{$dpna[0]}; $channel_info_list{$service_id}{SID} = $service_id; $channel_info_list{$service_id}{TP} = $tp; if ($slot =~ /\d/) { $channel_info_list{$service_id}{SLOT} = "_" . $slot; } $channel_info_list{$service_id}{NAME} = $dpnh{content}; push(@service_id_list, $service_id); } foreach my $service_id (sort {$a <=> $b} @service_id_list) { print $channel_info_list{$service_id}{SID} . ","; print $channel_info_list{$service_id}{TP} ; print $channel_info_list{$service_id}{SLOT} . ","; print $channel_info_list{$service_id}{NAME} . "\n"; } 1;