Last active
January 3, 2016 03:29
-
-
Save sdeseille/8402731 to your computer and use it in GitHub Desktop.
Exercice proposé par Dolmen voir le GIST https://gist.github.com/dolmen/8352763 avec la coloration syntaxique Perl c'est mieux
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/usr/bin/perl | |
use strict; | |
use warnings; | |
use utf8; | |
use Spreadsheet::XLSX; | |
use Text::CSV; | |
use Data::Dumper; | |
my %city_data; | |
my $cinema_inventory="f9fe41637f29b3f950d061ab993a8cb048f5694d402b9727626e598e23fa64_Liste_des_etablissements_cinematographiques_en_2012_avec_leur_adresse.xlsx"; | |
my $school_inventory="indicateurs-de-re-sultat-des-lyce-es-d-enseignement-ge-ne-ral-et-technologique-2012.csv"; | |
parse_cinema_inventory(); | |
parse_school_inventory(); | |
#print Dumper \%city_data; | |
print Dumper $city_data{'PARIS 08'}; | |
sub parse_school_inventory{ | |
my %school_idx; | |
my @school_data; | |
my $cityname_index; | |
my @rows; | |
my $csv = Text::CSV->new ( { binary => 1 , sep_char => ';' } ) | |
or die "Impossible de créer l'objet CSV: ".Text::CSV->error_diag (); | |
open my $fh, "<:encoding(Windows-1252):crlf", "$school_inventory" or die "$school_inventory: $!"; | |
$csv->column_names($csv->getline($fh)); | |
while ( my $hr = $csv->getline_hr( $fh ) ) { | |
#print "ville ",$hr->{Ville}," : ",$hr->{Etablissement},"\n"; | |
my $cityname=$hr->{Ville}; | |
my $schoolname=$hr->{Etablissement}; | |
my $global_success=$hr->{'Taux Brut de Réussite Total séries'}; | |
#On fait un petit lifting sur les noms de villes qui contienne un CEDEX en le supprimant | |
$cityname=~s/\sCEDEX//; | |
push @{$city_data{$cityname}->{'school_list'}},{$schoolname => $global_success}; | |
$city_data{$cityname}->{'school_nb'}++; | |
} | |
$csv->eof or $csv->error_diag(); | |
close $fh; | |
} | |
sub parse_cinema_inventory{ | |
my $cinema_header; | |
my %cinema_idx; | |
my @cinema_data; | |
my $cityname_index; | |
my $excel = Spreadsheet::XLSX -> new ("$cinema_inventory"); | |
foreach my $sheet (@{$excel -> {Worksheet}}) { | |
$sheet->{MaxRow} ||= $sheet->{MinRow}; | |
foreach my $row ($sheet->{MinRow} .. $sheet->{MaxRow}) { | |
$sheet->{MaxCol} ||= $sheet->{MinCol}; | |
my @current_record; | |
foreach my $col ($sheet->{MinCol} .. $sheet->{MaxCol}) { | |
my $cell = $sheet->{Cells}[$row][$col]; | |
if ($cell) { | |
push @current_record,$cell->{Val}; | |
}else{ | |
push @current_record,""; | |
} | |
} | |
if (! defined $cinema_header) { | |
map {$cinema_idx{$current_record[$_]}=$_} 0..$#current_record; | |
$cityname_index=$cinema_idx{'Ville'}; | |
$cinema_header=1; | |
} | |
else{ | |
@cinema_data=@current_record; | |
my $cityname=$cinema_data[$cityname_index]; | |
#On fait une petite moulinette pour gérer les arrondissements | |
#ce qui permet de faire la correspondance entre le fichier des cinémas et celui des lycées | |
if ($cityname =~ /^PARIS\s\d+ME$/) { | |
my ($city,$district)=split(/\s/,$cityname); | |
$district=~s/(\d+)ME/$1/; | |
$district=sprintf("%02d", $district); | |
$cityname="$city $district"; | |
} | |
$city_data{$cityname}->{'cinema_nb'}++; | |
} | |
} | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment