Как я могу автоматически увеличить файл и сбросить его? - PullRequest
1 голос
/ 16 августа 2011

Я пытаюсь найти способ упорядочить файлы в папке с Perl. Основа моего сценария довольно проста. Скрипт читает вложенных папок в корневой папке, проходит через каждую папку и использует простое сравнение первых 3 цифр в имени файла с 3 цифровое имя папки. Если они не совпадают, это помещает это в право место.

Моя проблема в том, что при просмотре файлов я иногда запускаю в дубликате номер заказа. Потому что заказ уже существует, я не может перезаписать оригинал, но эти два файла не могут существовать в то же место по понятным причинам. Так что у меня возникла идея добавьте слово _TEMP в конец имени файла, чтобы переместить их, и они могут быть переименованы позже. Проблема, с которой я сталкиваюсь сейчас это когда у меня уже есть две копии. Я ищу способ позволяют тегу TEMP увеличиваться на 1 каждый раз, когда он используется, а затем обнуляется каждый раз, когда цикл начинается снова. Я просто не очень уверен, где я должен реализовать эту идею.

Вот основная процедура для скрипта:

foreach my $office (keys %office_names) {

make_junk_folder($office);

# The matches and unmatches come back as array references!
my ($returned_matches, $returned_unmatches) = read_root_folder($office);

foreach my $folder (@$returned_matches) {
    my $returned_files = read_subfolder($office, $folder);

    foreach my $file (@$returned_files) {
        analyze_file($office,$folder,$file);
    }
}

foreach my $folder (@$returned_unmatches) {
    print "$folder\n";
    remove_root_junk($office,$folder);
}
}

Вот подпрограмма, которая обрабатывает перемещение и переименование файла:

sub analyze_file {

    my $office = shift;
    my $folder = shift;
    my $file = shift;

    my $order_docs_path = $office_names{$office};

    if ($file =~ /^(?<office> (C[AFL]|ME)) (?<folder_num> \d{3})
                   (?<file_num> \d{3}) ([_|\-] \d+)? \. (?<file_ext> pdf)
                   $/xmi) {

        my $file_office = uc($+{office});
        my $folder_num = $+{folder_num};
        my $file_num = $+{file_num};
        my $file_ext = lc($+{file_ext});

        # Change hyphens to a underscore
        $file_num =~ s/\-/_/;

        my $file_name = "$file_office" . "$folder_num" . "$file_num" .
                        "\." . "$file_ext";
        my $temp_name = "$file_office" . "$folder_num" . "$file_num" .
                        "_TEMP" . "\." . "$file_ext";

        if ($folder != $folder_num) {
            # If the folder does not exist create the folder
            if (! -e "$order_docs_path\\$folder_num") {
                system "mkdir $order_docs_path\\$folder_num";
            }

            # Check to see if the file already exists
            if ( -e "$order_docs_path\\$folder_num\\$file_name") {
                # Append the file with a "_TEMP".  These files are
                # missorted pages belonging to a larger document
                rename ("$order_docs_path\\$folder\\$file",
                        "$order_docs_path\\$folder_num\\$temp_name");
            } else {
                # Moves the file to correct place, these are mismatched files
                rename ("$order_docs_path\\$folder\\$file",
                        "$order_docs_path\\$folder_num\\$file_name");
            }
        } else {
            # Files are in the correct place, the file name will be
            # corrected only
            rename ("$order_docs_path\\$folder\\$file",
                    "$order_docs_path\\$folder_num\\$file_name");
        }
    }
}

Некоторые примеры имен файлов выглядят так:

CF100145.pdf

CA310244.pdf

CL211745.pdf

CL211745_1.pdf (это обозначает вторую страницу из нашего сканера документов)

ME102103.pdf

Если возникают проблемы, когда изменяется одно и то же задание, и вместо того, чтобы поместить файл в нужное место, человек помещает обновленную информацию о задании в папку текущего задания, каталог не соответствует первым 3 числам в файле. Поэтому позже они должны быть отсортированы для устранения ошибок, проблема в том, что в одном офисе более 500 000 документов, и у нас есть 4 офиса.

Ответы [ 2 ]

1 голос
/ 17 августа 2011

Я бы изменил эту часть:

        if ( -e "$order_docs_path\\$folder_num\\$file_name") {
            # Append the file with a "_TEMPn".  These files are
            # missorted pages belonging to a larger document
            my $n = 1;
            while (-e "$order_docs_path\\$folder_num\\$temp_name") {
                $temp_name =~ s/TEMP\d*/TEMP$n/;
                $n++;
            }
            rename ("$order_docs_path\\$folder\\$file",
                    "$order_docs_path\\$folder_num\\$temp_name");
        } # ...
0 голосов
/ 17 августа 2011

Вы можете добавить к нему _TEMP_OLD_FOLDER_NAME.

В этой папке был только один файл, поэтому никакие файлы не будут с таким же новым именем

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...