我正在尝试制作以下代码:
我要做的是运行一个BTEQ脚本,从DB获取数据然后导出到一个平面文件,该平面文件被我的Perl脚本(上面的代码)拿起,然后尝试这个帖子要获取perl导入该文件,它会进入fastload文件。那更有意义吗?
while (true) {
#Objective: open dir, get flat-file which was exported from bteq
opendir (DIR, "C:/q2refresh/") or die "Cannot open /my/dir: $!\n"; #open directory with the flat-file
my @Dircontent = readdir DIR;
$filetobecopied = "C:/q2refresh/q2_refresh_prod_export.txt"; #flatfile exported from bteq
$newfile = "C:/q2refresh/Q2_FastLoadFromFlatFile.txt"; #new file flat-file contents will be copied to as "fastload"
copy($filetobecopied, $newfile) or die "File cannot be copied.";
close DIR;
my $items_in_dir = @Dircontent;
if ($items_in_dir > 2) { # > 2 because of "." and ".."
-->>>>>> # take the copied FlatFile above and import into a fastload script located at C:/q2refresh/q2Fastload.txt
}
else {sleep 100;}
}
我需要帮助实现上面的粗体部分。如何将C:/q2refresh/Q2_FastLoadFromFlatFile.txt
的内容导入位于C:/q2refresh/q2Fastload.txt
的快速加载脚本。
//如果这有些新意,我道歉,但我是Perl的新手。
感谢。
答案 0 :(得分:0)
我不知道你要做什么。难道你只想这样做吗?
open SOURCE, $newfile;
open SINK, '>>C:/q2refresh/q2Fastload.txt';
while (<SOURCE>) {
print SINK $_;
}
close SOURCE;
close SINK;
这会将$ newfile的内容追加到你的fastload文件中。
答案 1 :(得分:0)
if ($items_in_dir > 2) { # > 2 because of "." and ".."
好吧,当包括.
和..
以及q2_refresh_prod_export.txt
的两个副本时,您将始终在目录中拥有2个以上的文件。如果发生这种情况而未复制q2_refresh_prod_export.txt
,脚本将die
。 因此永远不会调用else
子句。
此外,如果您只是想在一秒钟内将文件复制到另一个地方,将文件复制到新地点毫无意义。它实际上并不像“剪切和粘贴”,而是将文件物理复制到新文件,而不是剪贴板。
如果通过“导入到”意味着您要将q2_refresh_prod_export.txt
的内容附加到现有q2Fastload.txt
,则可以通过其他方式解决问题,例如Troy在其他答案中建议的内容open
和>>
(追加)。
你需要理清整个$items_in_dir
条件的含义。您正在保存文件并在该目录中复制文件,那么您正在检查的是什么?文件是否全部被删除(通过其他一些过程)?