Проверьте EOF во время цикла файла - PullRequest
0 голосов
/ 11 сентября 2018

Я читаю файл 15inv.txt построчно.Я получаю "номер элемента" из каждой строки, а затем открываю другой файл active.txt и ищу соответствующий номер элемента.

Если я найду совпадение, я хочу распечатать его до results.txt с помощью "соответствует "прилагается.Если я добрался до конца файла и не нашел его, распечатайте «Нет совпадений, достигнут EOF».

Я пытаюсь выяснить, находится ли номер элемента в 15inv.txt в active.txt.

Файл 15inv.txt выглядит следующим образом.Файл может иметь несколько номеров элементов.

1 5,I413858,O313071 ,2015-5-11 12:01:01,10033,WHITE HOUSE FURNITURE                   ,FAIRFIELD           ,NJ,29562,1,460,460

Файл active.txt содержит номер элемента, и он отображается только один раз.

30-18
30-46
26817

Где я ошибаюсь вмой код?

#!/usr/bin/perl -w

$inv = '15inv.txt';
open INV, "<$inv" or die "Unable to open the file\n";

$inv_out = '15inv-OBS.csv';
open INVOUT, ">$inv_out" or die "Unable to open the file\n";

$count = 0;
print INVOUT "Item #, Qty, Cost, Ext Cost, Status \n";

while ( <INV> ) {

    $inv_line = $_;
    chomp($inv_line);
    $count++;

    ($inv_rep, $inv_invoice, $inv_order, $inv_date, $inv_account, $inv_name, $inv_city, $inv_state, $inv_item, $inv_qty, $inv_cost, $inv_ecost)  = split(/,/, $inv_line);

    $inv_item =~ s/\s+//;  # remove spaces

    $active = 'active.txt'; # active items
    open ACTIVE, "<$active" or die "Unable to open the file\n";

    while ( <ACTIVE> ) {

        $the_active = $_;
        chomp($the_active);

        $active_item = substr($the_active, 0,10);

        $active_item =~ s/\s+//;
        next if ( $inv_item ne $active_item );

        if ( $inv_item eq $active_item ) {
            print INVOUT "$inv_item, $inv_qty, $inv_cost,$inv_ecost,IN \n";
            next;
        } # end of if 

    } # end of ACTIVE while loop

    print INVOUT "$inv_item, $inv_qty, $inv_cost,$inv_ecost, EOF \n";

} # end of INV while loop

print "Done!!! \n";

close FILE;
close INV;
close INVOUT;

exit;

1 Ответ

0 голосов
/ 11 сентября 2018

Я думаю, что вы спрашиваете о том, как напечатать что-нибудь, если вы не найдете это в другом файле. Обычно я использую переменную флага для этого. Это ложно, пока ты не найдешь вещь. Если оно все еще неверно, когда вы просмотрели весь файл, вы не нашли его:

my $look_for = ...;
my $found = 0;

while( <$fh> ) {
    chomp;
    $_ eq $look_for ? $found = 1 : next;
    ...
    }

unless( $found ) {
    print "Not found!";
    }

Одним из способов обнаружения этих проблем является сокращение вашей программы до минимума, который может показать проблему (а не весь рабочий сценарий). Попробуйте это в маленьком, а затем основываться на этом.

...