我想从我的数组中删除特定范围的元素。
我有一个txt文件:
Rbody ...
333
444
555
666
END
Shell ...
Node ...
Rbody ...
333
444
555
666
END
我想要做的是删除以“Rbody”开头的元素,直到我的文件中的“END”字样。
#while (<INC>) {
# if (!/^RBODY/)
# {
# push(@alllines,$_);
# }
#}
只删除单词Rbody的行...我想我需要一些有点循环。 :/
请求帮助。
答案 0 :(得分:3)
它有点深奥,但这是"flip-flop" operator的一个很好的用例:
while (<INC>) {
push @alllines, $_ unless /^Rbody/ .. /^END/;
}
在/^Rbody/ .. /^END/
匹配正则表达式$_
之前,表达式/^Rbody/
返回false。然后它返回true,直到它匹配/^END/
。
答案 1 :(得分:1)
尝试使用两个循环。外循环正常读取行。如果它找到像/^Rbody/i
这样的行,那么它将使用内部循环跳过所有内容,直到它看到“END”:
while( defined(my $line = <INC>) ){
chomp( $line );
if( $line =~ /^Rbody/i ){
while( defined($line = <INC>) ){
chomp( $line );
last if $line eq "END";
}
} else {
push( @alllines, $line );
}
}
答案 2 :(得分:0)
只需使用一个状态变量来跟踪是否应该打印当前行。
use strict;
use warnings;
my $print = 1;
while (<DATA>) {
if ($print) {
$print = 0 if /^Rbody/i;
print if $print;
}
elsif (/^END$/) {
$print = 1;
}
}
答案 3 :(得分:0)
不幸的是,似乎没有版本可用:
第一个版本打印每一行,另外两个不提供输出。
我的文字如下:
RBODY /
sdsd
sdsdsd
sdsd
END
SHELL / 9171781 9001914 9073136 9073137 9073118 9073115
SHELL / 9171782 9001914 9073117 9073120 9073119 9073116
SHELL / 9171783 9001914 9073118 9073121 9073120 9073117
SHELL / 9171784 9001914 9073137 9073138 9073121 9073118
SHELL / 9171785 9001914 9073120 9073123 9073122 9073119
SHELL / 9171786 9001914 9073121 9073124 9073123 9073120
# [SDM:HISTORY:VERSION] = "History_Variante_DGS"
#
# S01__B70D_revo: *Autor: revo
# *Datum: 11.12.12
# *Basis: -------
# - automatischer Positionierungsprozess
# - verwendetes Dummysessionfile: Sessiondummy____au481_______LFaH3_sitzpos_S01__B70D_revo.ses
# - verwendetes Gurtsessionfile : Sessiongurt_____au481_______LFaH3_sitzpos_S01__Basi_revo.ses
# - verwendetes Sitzsessionfile : Sessionsitz_____au481__0____LFaH3_sitzpos_S01__B001_revo_k14m.ses
#
#
到目前为止的代码:
#!/usr/bin/perl
#
#print "Bitte geben sie das Dummy Include an:\n";
#chop($dummyfile = <>);
#print "\n";
#print "Bitte geben sie das Basis Include an:\n";
#chop($basisfile = <>);
#print "\n";
$dummyfile = 'Dummy_mu5070b___mvs2g__1_cb21_k19_m04F_bsd_w3_bfrei__krmi_040_.inc';
$newinc = "dummy_include.inc";
open(INC, $dummyfile);
open(NEWINC, ">$newinc");
.... missing regex
print @alllines;