0

\\\server\folder\folder\folder\filename.csvファイル名のユーザー入力に基づいてにあるファイルを開こうとしています。ファイルは常にcsvファイルになりますが、名前は部門によって異なります。ディレクトリは常に同じですが、Perlが存在するディレクトリではありません。

ファイルを開こうとして問題が発生しました。ディレクトリ用とファイル名用の2つの変数を作成しようとしましたが、開こうとするとエラーがスローされます$directory\\$FileName。ディレクトリをハードコーディングし、ファイル名を変数にしてopenステートメントを実行しようとしましたが、Perlは変数がファイル名の一部であると見なします(これは理にかなっています)。これも可能ですか?

ファイルを開いた後、ファイル自体を編集するコードを実行し(これは正常に機能します)、ファイルを新しい場所に保存します。この新しい場所はディレクトリと同じですが、別のフォルダレベルを追加してから、同じファイル名を追加したいと思います。「変更前」のファイルの場所と「変更後」のファイルの場所の一種。

print "What is your FULL file name going to be with extension included?";
my $fileInName = <>; 
my $@dirpath= '\\\\Server\\Folder1\\Folder2\\Folder3\\Folder4\\Sorted_files\\';
my $Excel = Win32::OLE->GetActiveObject('Excel.Application') || 
    Win32::OLE->new('Excel.Application', 'Quit'); 
my $Book = $Excel->Workbooks->Open($directory $file); 
my $Sheet = $Book->Worksheets(1);
$Sheet->Activate(); 

それが私が今持っているコードです。私も次のことを試しました:

my $@dirpath= '\\\\server\\folder1\\folder2\\folder3\\call_folder4\\Sorted_files\\$fileName';

もちろん、「ファイルが見つかりません」というエラーが表示されました。

パス名全体をハードコーディングすると、ファイルを開くことができますが、ファイル名だけが異なる25の個別のスクリプトは必要ありません。

4

2 に答える 2

0

モジュールを使用しfile::specます。移植性があり、パス内のスラッシュ文字をエスケープすることを心配する必要はありません (UPDATE: ほとんどの場合は true ですが、この場合は、以下に示すように、への割り当てでサーバー参照をエスケープする必要があります@dirpath)。

例えば:

use File::Spec::Functions;

# get users file from the cmd line arg
my $usersfile = $ARGV[0];

my @dirpath = qw/\\\server folder folder folder/;
my $filepath = catfile(@dirpath,$userfile);

# test existence
die "file does not exist" unless(-e $filepath);
于 2012-10-15T19:50:31.217 に答える
0
my $@dirpath= '\\Server\Folder1\Folder2\Folder3\Folder4\Sorted_files\';
my $Book = $Excel->Workbooks->Open($directory $file); 

コンパイルさえしません。そのはず:

my $dirpath = '\\\\Server\Folder1\Folder2\Folder3\Folder4\Sorted_files';
my $Book = $Excel->Workbooks->Open("$dirpath\\$file"); 
于 2012-10-15T20:59:25.710 に答える