Date-Holidays-TW
view release on metacpan or search on metacpan
dev-bin/convert-from-csv.pl view on Meta::CPAN
#!/usr/bin/env perl
=head1 CSV ?
The CSV can be downloaded from:
https://data.gov.tw/dataset/14718
Download the one named: 114å¹´ä¸è¯æ°åæ¿åºè¡æ¿æ©é辦å
¬æ¥æè¡¨
The text in that CSV file is already encoded as UTF-8 and can be directly fed to this progrm:
perl ./dev-bin/convert-from-csv.pl ~/Downloads/111å¹´ ä¸è¯æ°åæ¿åºè¡æ¿æ©é辦å
¬æ¥æè¡¨.csv
=cut
use v5.36;
use utf8;
use Text::CSV;
my %CAL;
my $csv = Text::CSV->new ({ binary => 1 });
open my $fh, '<:utf8', $ARGV[0] or die $!;
$_ = <$fh>; # throw away the header line with BOM.
while ( my $row = $csv->getline($fh) ) {
# 西å
æ¥æ,ææ,æ¯å¦æ¾å,å註
my ($date, $weekday, $is_holiday,$description) = @$row;
my ($year, $month, $day) = $date =~ m{^(....)(..)(..)$};
if ($is_holiday) {
my $mmdd = sprintf '%02d%02d', $month, $day;
$description = "ææå
ãæææ¥" if !$description && $is_holiday && ($weekday eq "å
" || $weekday eq "æ¥");
$CAL{$year}{$mmdd} = $description;
}
}
close($fh);
# Hand-written dumper.
binmode STDOUT, ":utf8";
say 'my %CAL = (';
for my $year (sort keys %CAL) {
say " $year => {";
for my $mmdd (sort keys %{$CAL{$year}}) {
say " \"$mmdd\" => \"$CAL{$year}{$mmdd}\",";
}
say " },";
}
say ');';
( run in 0.581 second using v1.01-cache-2.11-cpan-c966e8aa7e8 )