1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
|
use strict;
use warnings;
# recherche du préfixe (= tronc commun de mon DBF) à réutiliser (à faire une seule fois avec un fichier modèle en entrée)
my $file_in = "C:/Temp/shapes/model/EP596.dbf";
open my $IN, "<", $file_in or die "Ouverture impossible de $file_in $!";
binmode $IN;
my $prefix;
read $IN, $prefix, 66; # lecture des 66 premiers octets (en binaire)
close $IN;
# on a donc récupéré la partie fixe du DBF et on cherche à ajouter pour chaque fichier rencontré, la partie variable (=suffixe) en binaire et enregistrer le fichier DBF avec le nom correspondant au SHP rencontré
# on va donc boucler sur les fichiers SHP d'un dossier particulier pour générer les DBF correspondants
my @files = <C:/Temp/shapes/*.shp>;
foreach my $file (@files) { (my $name = $file ) =~ s{.*/}{}; #on retire le chemin
(my $without_extension = $name) =~ s/\.[^.]+$//; #on retire l'extension
my $file_out = $without_extension . ".dbf"; #on génère le nom du fichier DBF (identique à celui du SHP sinon ils ne pourront pas être ouverts par le SIG)
(my $code_conv = $without_extension) =~ s/\_.*//; #ici je ne sélectionne que la partie située avant l'éventuel "_" de mon fichier (ex: "EP27_line" me donne "EP27")
my $sufix = $code_conv . (" " x (5 - length($code_conv))); #on génère le suffixe à introduire dans le DBF (la structure du modèle DBF attend 5 caractères, il faut impérativement ajouter des espaces à la fin des valeurs < 5 caractères, sinon le DBF généré sera corrompu)
open my $OUT, ">", $file_out or die "Ouverture impossible de $file_out $!"; #on crée et ouvre le fichier DBF avec le nom qu'on a généré
binmode $OUT;
print $OUT "$prefix$sufix"; #on concatène préfixe et suffixe dans le fichier que l'on vient d'ouvrir
close $OUT;
} |