0

2 つの配列があり、どちらもファイル名のリストで構成されています。ファイル名は、拡張子を除いて、両方の配列で同一です。

つまり、 filename.dwgfilename.zip

これで、ファイルの各リストを配列に割り当てました。

つまり、 @dwg_files@zip_files

最終的に、私がやろうとしているのは、異なる配列にある同じ名前の 2 つのファイル間の最終更新日を確認し、一方が他方よりも新しい場合はスクリプトを実行することです。これまでのところ、名前が異なる2つのファイルを比較する場合を除いて、機能しているようです。最初の配列のファイルを他の配列の同一ファイルと比較するために必要です。

つまり、 asdf1.dwgはasdf1.zipに関連付ける必要があります。

my $counter = 0 ;
while ( $counter < @dwg_files ) {
    print "$counter\n";
    my $dwg_file = $dwg_files[$counter];
    my $zip_file = $zip_files[$counter];


#check if zip exists
if (-e $zip_file) {

     #Checks last modification date
     if (-M $dwg_file < $zip_file) {
         *runs script to creat zip*

     } else { 
         *Print "Does not need update."*
     }

} else {
    *runs script to create zip*
}

$counter++;
}

いくつかの調査を行って、ハッシュを使用して 2 つの配列を関連付けようと考えました。それらを名前で関連付ける方法がわかりません。

my %hash;
@hash{@dwg_files} = @zip_files;

私は完全な Perl 初心者です (先週、Perl を使い始めたばかりです)。私はこれに何日も立ち往生しており、どんな助けも大歓迎です!

4

2 に答える 2

2

dwg ファイル名を取得し、拡張子を zip に変更してから、チェックを続行できます。

for my $dwg_file (@dwg_files) {

    my $zip_file = $dwg_file;
    print "dwg:$dwg_file\n";
    $zip_file =~ s/[.]dwg/.zip/i or next;


  #check if zip exists
  if (-e $zip_file) {

       #Checks last modification date
       if (-M $dwg_file < -M $zip_file) {
           #*runs script to creat zip*

       } else { 
           #*Print "Does not need update."*
       }

  } else {
      #*runs script to create zip*
  }

}
于 2013-06-19T17:59:18.340 に答える
0

すべてのファイル名をハッシュに保存するには、次のようにします。

#!/usr/bin/perl
use Data::Dumper;

# grab all dwg and zip files
my @dwg_files = glob("*.dwg");
my @zip_files = glob("*.zip");

sub hashify {
   my ($dwg_files, $zip_files) = @_;
   my %hash;

   # iterate through one of the arrays
   for my $dwg_file ( @$dwg_files ) {
        # parse filename out
        my ($name) = $dwg_file =~ /(.*)\.dwg/;

        # store an entry in the hash for both the zip
        # and dwg files
        # Entries of the form:
        # { "asdf1" => ["asdf1.dwg", "asdf1.zip"]
        $hash{$name} = ["$name.dwg", "$name.zip"];
   }

   # return a reference to your hash
   return \%hash;
}

# \ creates a reference to the arrays 
print Dumper ( hashify( \@dwg_files, \@zip_files ) );

結果のハッシュは次のようになります。

{
  'asdf3' => [
               'asdf3.dwg',
               'asdf3.zip'
             ],
  'asdf5' => [
               'asdf5.dwg',
               'asdf5.zip'
             ],
  'asdf2' => [
               'asdf2.dwg',
               'asdf2.zip'
             ],
  'asdf4' => [
               'asdf4.dwg',
               'asdf4.zip'
             ],
  'asdf1' => [
               'asdf1.dwg',
               'asdf1.zip'
             ]
};
于 2013-06-19T18:14:03.683 に答える