читать входной файл, сопоставлять и удалять данные и записывать оставшиеся строки в новый файл - PullRequest
0 голосов
/ 14 октября 2011

Я застрял, пытаясь заставить это записать содержимое файла. Я пытаюсь открыть входной файл, отфильтровать / удалить сопоставленную строку и записать в новый файл. Может кто-нибудь показать мне, как это сделать правильно? Спасибо.

use strict;
use warnings;
use Text::CSV_XS;

my $csv = Text::CSV_XS->new ({ binary => 1 }) or
     die "Cannot use CSV: ".Text::CSV_XS->error_diag ();
open my $fh, "<:encoding(UTF-16LE)", "InputFile.txt" or die "cannot open file: $!";

my @rows;
while (my $row = $csv->getline ($fh)) {
    my @lines;
    shift @lines if $row->[0] =~ m/Global/;

    my $newfile = "NewFile.txt";

    open(my $newfh, '>', $newfile) or die "Can't open";
    print $newfh @lines;

    }
$csv->eof or $csv->error_diag ();
close $fh;

1 Ответ

3 голосов
/ 14 октября 2011

Открыть выходной файл вне цикла.Читая каждую строку, решите, хотите ли вы ее сохранить.Если да, напишите в выходной файл.Если нет, не делайте ничего.

Что-то вроде следующего (не проверено):

use strict;
use warnings;
use Text::CSV_XS;

my ($input_file, $output_file) = qw(InputFile.txt NewFile.txt);

my $csv = Text::CSV_XS->new ({ binary => 1 })
    or die sprintf("Cannot use CSV: %s\n", Text::CSV_XS->error_diag);

open my $infh, "<:encoding(UTF-16LE)", $input_file
    or die "Cannot open '$input_file': $!";

open my $outfh, '>', $output_file
    or die "Cannot open '$output_file': $!";

while (my $row = $csv->getline($infh)) {
    next if $row->[0] =~ m/Global/;
    unless ( $csv->print($outfh, $row) ) {
        die sprintf("Error writing to '%s': %s",
            $output_file,
            $csv->error_diag
        );
    }
}

close $outfh
    or die "Cannot close '$output_file': $!";

close $infh
    or die "Cannot close '$input_file': $!";

$csv->eof
    or die "Processing of '$input_file' terminated prematurely";
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...