我正在读取csv文件并检查某个字段中的文本。 如果文本存在,我想保留该行,并添加一个字段。
程序中的以下while循环正常工作,以保存col [17]中带有文本的行:
while (my $row = $csv->getline($infh)) {
if ($row->[16] ne ""){
my $string = $csv->string;
print {$outfh} $string;
}
}
在另一个测试程序中,以下while循环也可正常工作,添加一个字段:
while (my $row = $csv->getline($infh)) {
splice @$row, 1, 0, "1GM";
$csv->print($outfh, $row);
}
我想将这些结合起来在同一个程序中工作,但我有语法nitemares。 任何人都可以向perl新手展示一些指示吗?
这是完整的“测试程序”:
#!/usr/bin/perl
use strict;
use warnings;
use Text::CSV;
use Cwd;
use File::Basename;
my $dirname = basename(getcwd);
my $input_file = $dirname . ".txt";
my $output_file = $dirname . '_extract.txt';
my $csv = Text::CSV->new({binary => 1, eol=> "\015\012"})
or die "Cannot use CSV: ".Text::CSV->error_diag ();
open my $infh, $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)) {
splice @$row, 1, 0, "1GM";
$csv->print($outfh, $row);
}
close $infh;
close $outfh;
$csv->eof or die "Processing of '$input_file' terminated prematurely";
添加了: 我希望测试程序还包括文本的测试,以某种方式使用;
if ($row->[16] ne "")
从另一个程序 - 这样额外的列只会添加到我想要保留的行中。 无法弄清楚如何做到这一点......
已添加2/18:此工作!,但似乎不太优雅......
#!/usr/bin/perl
use strict;
use warnings;
use Text::CSV;
use Cwd;
use File::Basename;
my $dirname = basename(getcwd);
my $input_file = $dirname . ".txt";
my $output_file = $dirname . '_extract.txt';
my $column = '1GM'; # Text for new column to insert if a match
my $csv = Text::CSV->new({binary => 1, eol=> "\015\012"})
or die "Cannot use CSV: ".Text::CSV->error_diag ();
open my $infh, $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)) {
if ($row->[16] ne "") # add/insert column if col[17] has text
{
splice @$row, 1, 0, "$column";
if ($row->[1] eq "$column") # print to file only rows with new column
{
$csv->print($outfh, $row);
}
}
}
close $infh;
close $outfh;
$csv->eof or die "Processing of '$input_file' terminated prematurely";
已添加2/18 5:40 pm - 知道了......这有效!!
while (my $row = $csv->getline($infh)) {
splice @$row, 1, 0, "$column"; # add column
if ($row->[17] ne "") # print if test is true
{
$csv->print($outfh, $row);
}
}