Perl - 将文件的内容导入另一个文件

时间:2011-07-15 14:18:12

标签: perl scripting import

我正在尝试制作以下代码:

  
    

我要做的是运行一个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的新手。

感谢。

2 个答案:

答案 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条件的含义。您正在保存文件并在该目录中复制文件,那么您正在检查的是什么?文件是否全部被删除(通过其他一些过程)?