私はPerl "Sub"に変換したい1つの "proc"というTCLスクリプトを持っていますが、私はtcl expertではありません。私はPerlを知っていますが、in procはいくつかのコマンドはPerlに変換できません。TCLコードをPerlに変換する
proc extract_from_zip_by_ext {zip ext} {
set low_ext [string tolower $ext]
foreach f [zipread_list $zip] {
set filename [lindex $f 0]
if {[string match -nocase "*.${ext}" $filename]} {
#
# We leave base alone rather than renaming it to
# base.low_ext to make sure no other process uses
# the same name.
#
set tmpname_base [::fileutil::tempfile]
set tmpname "${tmpname_base}.${low_ext}"
set filebytes [zipread_extract $zip $filename]
set fp [open $tmpname w]
fconfigure $fp -translation binary
puts -nonewline $fp $filebytes
close $fp
file delete -force $tmpname_base
return $tmpname
}
}
return {}
}
このprocが他のファイルがあります(例:.TXT)のzip内のファイルのzipファイルの名前と内線を取るジップ(元の.DOC)にもありますが、それらのファイルを無視し、唯一の.txtとどこかに一時ファイルを取得します元のファイル名で作成すべてのzipファイルの.txtファイルからすべての内容を書き出して一時ファイルを返すので、すべての.txtのデータと同様にすべての.txtのデータにアクセスできるようにすべてのzipから
上記のロジックは私がtcl私がPerlでどう解釈できなかったのか
私はこれまで試みています:
sub extract_from_zip_by_ext ($$){
my($fileName, $ext) = @_;
# say "$fileName $ext\n";
use Archive::Zip qw(:ERROR_CODES) ;
use File::Temp qw/ tempfile tempdir /;
use Archive::Zip::MemberRead;
use File::Basename;
my @suffixlist = qw(HDR hdr zip ZIP) ;
my $zip = Archive::Zip->new($fileName);
my $unzipOutput;
my ($dtgFname,$dtgFpath,$dtgFsuffix) = fileparse($fileName, @suffixlist);
# say "$dtgFname\n";
my $tmpname_base = new File::Temp(UNLINK => 1);
my $tmpname = ${dtgFname}.${ext};
open FH, ">>", $tmpname or die "cant write $tmpname: $!\n";
for my $member($zip->members){
$unzipOutput = $member->fileName;
if($unzipOutput =~ /\.$ext$/i){
my $fh = Archive::Zip::MemberRead->new($zip, $unzipOutput);
while (defined(my $line = $fh->getline())){
say FH $line;
# say "$tmpname\n";
return ($tmpname, $line);
}
}
}
close FH;
}
私はあなたがはるかに具体的にする必要があると思う。あなたが現在Perlで試したもの* –
はい。すでに行っているPerlコードを含めて、作業をやり直すことはありません。 – simbabque
あなたはzipファイルを処理しようとしています。 [IO :: Uncompress :: Unzip](http://perldoc.perl.org/IO/Uncompress/Unzip.html#Walking-through-a-a-zip-file)が役に立ちます。 –