#!/usr/bin/env perl
use strict;
use warnings;
use autodie;
use feature 'bitwise';
no warnings qw(experimental::bitwise);
# On determine ou sont les champs avec un masque
my $mask='';
my $input='input.txt';
open(my $infh, '<', $input);
while (<$infh> ) {
chomp;
s/\S/1/g;
s/\s/0/g;
$mask = $mask |. $_ ;
}
my $fullen = length($mask);
# print "$mask\n";
# On tire une expression regulière du masque
my $pattern = $mask;
$pattern =~ s/0/\\s/g;
$pattern =~ s/(1+)/($1)/g;
$pattern =~ s/1/./g;
# print "$pattern\n";
my $nbgroups = () = $pattern =~ /\(/gi;
# print "$nbgroups\n";
my $output='output.txt';
open(my $outfh, '>', $output);
seek($infh, 0, 0);
while (<$infh> ) {
chomp;
# on fait du padding avec des espaces pour atteindre la longueur de la plus grande ligne
my $pad = ' ' x ($fullen - length($_));
my $line = $_ . $pad;
# print "|$line|\n";
# On matche la ligne au pattern
my @matches = $line =~ m/^$pattern$/;
if (0+@matches != $nbgroups) {
print "Error, inconsistent line with pattern!!\nAborting process!\n";
last;
}
# On construit la ligne de sortie et on l'écrit
my $result="";
foreach my $match (@matches) {
if ($match =~ /^\s+$/) {
$result.="null";
}
else {
$result.=$match;
}
$result.='#';
}
chop $result;
print $outfh "$result\n";
}
close $outfh;
close $infh;