Perl - импорт содержимого файла в другой файл - PullRequest
0 голосов
/ 15 июля 2011

Следующий код, который я пытаюсь создать, пытается это сделать:

Я пытаюсь запустить скрипт BTEQ, который получаетданные из БД затем экспортируются в плоский файл, этот плоский файл выбирается моим сценарием Perl (приведенный выше код), а затем с помощью этого поста пытается заставить perl импортировать этот файл, который попадает в файл быстрой загрузки.Это имеет больше смысла?

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 голосов
/ 15 июля 2011
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, есть способы сделать это, например, что Трой предложил в другом ответе, с open и >> (добавить к).

Вам придется разобраться, что выимеется в виду под этим целым $items_in_dir условием.Вы храните файлы и копируете файлы в этом каталоге, так что именно вы проверяете?Все ли файлы были удалены (каким-либо другим процессом)?

0 голосов
/ 15 июля 2011

Я не могу сказать, что вы пытаетесь сделать. Может быть, вы просто хотите это сделать?

open SOURCE, $newfile;
open SINK, '>>C:/q2refresh/q2Fastload.txt';
while (<SOURCE>) {
    print SINK $_;
}
close SOURCE;
close SINK;

Это добавит содержимое $ newfile к вашему файлу быстрой загрузки.

...