Skip to content

Instantly share code, notes, and snippets.

@sdeseille
Last active January 3, 2016 03:29
Show Gist options
  • Save sdeseille/8402731 to your computer and use it in GitHub Desktop.
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
#!/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