• # Perl

    Posté par . En réponse au journal Convertir des dates avec month_nb. Évalué à 4.

    En perl il y a une bibliothèque très sympa Regex::Assemble qui permet de grouper des expression régulière. Il offre de très bonnes performances. C'était une occasion sympa de m'en servir :)

    J'utilise un json différent du tiens:

    {
    "1":["january", "ажьырныҳәа", "āž̍ərnəh°̍ā", "..."],
    "2": ["february", "жәабран", "ž°ābrān", "..."],
    "3": ["march", "хәажәкыра", "x°āž°ḳərā", "..."],
    "4": ["april", "мшаҧы", "mšāpə", "..."],
    "5": ["may", "лаҵара", "lāc̣ārā", "..."],
    "6": ["june", "рашәара", "rāš°ārā", "..."],
    "7": ["july", "ҧхынгәы", "pxəng°ə", "..."],
    "8": ["august", "нанҳәа", "nānh°̍ā", "..."],
    "9": ["september", "цәыббра", "c°əbbrā", "..."],
    "10": ["october", "жьҭаара", "ž̍tāārā", "..."],
    "11": ["november", "абҵара", "ābc̣ārā", "..."],
    "12": ["december", "ҧхынҷкәын", "pxənč̣̍ḳ°ən", "..."]
    }
    #!/usr/bin/perl
    use 5.10.0;
    use JSON;
    use Regexp::Assemble;
    my $filename = 'definitions.json';
    my $data;
    # lecture du fichier json
    if (open (my $json_str, $filename)) {
     local $/ = undef;
     my $json = JSON->new;
     $data = $json->decode(<$json_str>);
     close($json_stream);
    }
    # on construit un tableau d'expressions régulières
    my @months_hash;
    foreach my $month_number (1..12) {
     my $ra = Regexp::Assemble->new;
     foreach my $month (@{$data->{$month_number}}) {
     $ra->add('^'.$month.'$');
     }
     push(@months_hash, $ra);
    }
    my $input = 'february';
    # on test mois après mois
    foreach my $month_number (0..11) {
     if ($input =~ /($months_hash[$month_number])/i) {
     say 1+$month_number;
     exit;
     }
    }

    https://linuxfr.org/users/barmic/journaux/y-en-a-marre-de-ce-gros-troll