我的任务是读取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;
答案 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