Italian Convert versions older than Ver 4.x

Ciao

Ho fatto unsemplice script in perl per convertire dai vecchi formati dei PCB ai nuovi ver 4.
…Per non farlo a “mano”.

Se ti interessa…
Devi scaricarti Perl, per l’SO che ti interessa,(99 su 100 in linux c’e’ gia’)
Devi metterre lo script nella cartella di un progetto Kicad,
fatti le copie, non vorrei mai farti dei guai,
Lo lanci dalla finestra del dos o console.
Parti col kicad 4 e dovresti aprire normalmente il PCB.


#!/usr/bin/env perl
use warnings;
use strict;
#use diagnostics;

print "Converte i file vecchi di Kicad  nella nuova versione 4.\n";




my $max = 0;
my $uno;

opendir(DIR, '.');
  my @lista = readdir(DIR);
closedir DIR;
print "Settaccia la cartella in cerca dei kicad_pcb e kicad_pcb-bak\n";

  
foreach $uno ( @lista ) {
  $uno =~ /.+\.(\d{1,5})/; # cerca l'ultimo punto del nome del file con un numero
# $uno =~ s/.+\.(\d{1,5})/$1/; # cerca l'ultimo punto del nome del file con un numero
  if ( defined $1 ) {
    #print $1 . "  <<<<<<<<<<<<<<<<<<<<<<<<<<<\n";
    if ( $1 > $max ) {
      $max = $1;
    }
  }
}
print "Num. Consecut=", $max+1;
print "\nPremi INVIO"; <STDIN>;
  
  foreach $uno ( @lista ) {
    print "\n".$uno;
    next unless -f $uno;
    next unless ($uno =~ /kicad_pcb|kicad_pcb-bak/i ) ;
    print " --> ";

    my @spez = split (/\./, $uno);
    #print "spez:"; print "@spez" . "  .\n";
    my $mm = sprintf ("%s.%04d.%s", $spez[0], $max+1, $spez[1]);

    print  $mm;
    rename($uno, $mm);

      open (IN, '<', $mm ) || die "Imp. aprire il file: $0 .\n\n";
      open (OU, '>', $uno) || die "Imp. aprire il file: $0 .\n\n";

      while (<IN>) {
#--------Stringhe di conversione--------------------------------------------------
#        s/$old/$new/g;
  s/Rame.Fronte/F.Cu/g;
  s/Rame.Retro/B.Cu/g;
  s/Adesivo.Retro/B.Adhes/g;
  s/Adesivo.Fronte/F.Adhes/g;
  s/Pasta.Retro/B.Paste/g;
  s/Pasta.Fronte/F.Paste/g;
  s/Serigrafia.Retro/B.SilkS/g;
  s/Serigrafia.Fronte/F.SilkS/g;
  s/Maschera.Retro/B.Mask/g;
  s/Maschera.Fronte/F.Mask/g;
  s/Grafica/Dwgs.User/g;
  s/Commenti/Cmts.User/g;
  s/Eco1/Eco1.User/g;
  s/Eco2/Eco2.User/g;
  s/Contorno.scheda/Edge.Cuts/g;
#---------------------------------------------------------------------------------
        print OU $_;
        }
      close IN;
      close OU;

      } # foreach

#exit 0;