我的代码如下:
my $file = 'c:\test.log';
open (FILE, "<", $file) or die $!;
my @list = grep /\bAdobe\b/, <FILE>;
my $days;
foreach (@list) {
$days = $_;
print "$days\n";
}
预期结果是:
"Adobe","10:10:10, 11/10/2011","Ready"
我想用以下代码用逗号分割结果:
my @sample = split(',', $days);
预期结果是:
"Adobe"
"10:10:10
11/10/2011"
"Ready"
但它不是我想做的事情:
我想打印输出:
"Adobe"
"10:10:10, 11/10/2011"
"Ready"
如果不使用/安装Text :: CSV等任何模块,我怎么能实现这一点。
请指教,谢谢。
答案 0 :(得分:6)
理想情况下,您可以使用CSV解析器,请参阅Text::CSV。或者只要所有字段都是双引号,那么您可以使用具有稍微复杂的正则表达式的拆分,它会检查分隔符:
split /(?<="),(?=")/, $days;
答案 1 :(得分:4)
我相信它适用于Text::CSV
模块。
像这个例子的东西应该有效:
use Text::CSV;
my $file = 'c:\test.log';
open (my $FILE, "<", $file) or die $!;
my $csv = Text::CSV->new;
while (my $row = $csv->getline($FILE)) {
my @sample = @$row;
next if $sample[0] !~ /\bAdobe\b/;
# do whatever you want
}
答案 2 :(得分:2)
不需要从CPAN安装Text :: CSV(但是,如果你有这个限制,那么你真的需要修复它),因为标准发行版中的Text::ParseWords模块也可以使用。
答案 3 :(得分:1)
由于字符串"Adobe","10:10:10, 11/10/2011","Ready"
作为perl代码有效,因此您可以使用eval
:
my $file = 'c:\test.log';
open my $fh, "<", $file or die $!;
for (grep /\bAdobe\b/, <FILE>) {
my @sample = eval;
# code here
}
但只针对您确定格式有效的数据执行此操作。
Data::Dumper的输出:
$VAR1 = [
"Adobe",
"10:10:10, 11/10/2011",
"Ready"
];