用于在尖括号中读取数据的perl脚本<和>不工作

时间:2015-05-15 13:55:10

标签: regex perl

我的任务是读取angule括号内的数据并写入另一个文件。我已经开发了一个脚本,但它不起作用。如果需要进行任何修改,请纠正我。

我想要阅读的样本数据是这样的

Textbooks written by author1 `{ <sam>,<january>,<2015>},{<rga>,<feb>,<2005>},`

这是我的Perl程序

#!usr/bin/local/perl
use warnings;
use strict;
my @c_result; 
my @c_result_array;
my %hash;
my $file = 'c_template.c';
open CFILE, $file or die "Could not open $file: $!";
my @content;
my $fileoutput="output_c.c";
open OUTFILE,"> $fileoutput" or die $!;
my $i;
while(<CFILE>)
{
for $i  (@content)
    {
        $_ = $i;
        if(/<[\w*_*]+>/)
        {
            @c_result = /<[\w*_*]+>/g;
            for my $i (@c_result)
            { 
                my $key=substr($i,1,length($i)-2);
                $i=$key;
                push @c_result_array,$i;
                print OUTFILE $i ."=>@c_result_array";
                print OUTFILE "\n";
            }
        }   
    }   
}
close OUTFILE;
close CFILE;

2 个答案:

答案 0 :(得分:1)

对于初学者,您永远不会填充@content但是您尝试迭代它。

在正则表达式中:[]用于定义 character classes ()用于定义 capture groups

答案 1 :(得分:1)

您的问题非常不明确且不准确,但从您的代码中我认为这就是您想要的

#!/usr/bin/local/perl

use strict;
use warnings;

my ($file, $fileoutput) = qw/ c_template.c output_c.c /;

open my $c_fh,   '<',  $file or die qq{Could not open "$file" for input: $!};
open my $out_fh, '>',  $fileoutput or die qq{Could not open "$fileoutput" for output: $!};
select $out_fh;

while ( <$c_fh> ) {
  next unless my @fields = /<([^<>]+)>/g;
  chomp;
  print "$_ => @fields\n";
}

close $out_fh or die qq{Could not close "$fileoutput": $!};

<强>输出

Textbooks written by author1 `{ <sam>,<january>,<2015>},{<rga>,<feb>,<2005>},` => sam january 2015 rga feb 2005