Arrays 如何从数组中删除元素的特定区域

Arrays 如何从数组中删除元素的特定区域,arrays,perl,unix,matching,area,Arrays,Perl,Unix,Matching,Area,我想从数组中删除特定范围的元素。 我有一个txt文件: Rbody ... 333 444 555 666 END Shell ... Node ... Rbody ... 333 444 555 666 END 我想做的是从我的文件中删除从单词“Rbody”开始直到单词“END”的元素 #while (<INC>) { # if (!/^RBODY/) # { # push(@alllines,$_); # } #} #while(){ #如果(!/

我想从数组中删除特定范围的元素。
我有一个txt文件:

Rbody ...
333
444
555
666
END

Shell ...
Node ...

Rbody ...
333
444
555
666
END
我想做的是从我的文件中删除从单词“Rbody”开始直到单词“END”的元素

#while (<INC>) {
#   if (!/^RBODY/)
#   {
#       push(@alllines,$_);
#   }
#}
#while(){
#如果(!/^RBODY/)
#   {
#推送(@alllines,$);
#   }
#}
只删除了带有单词Rbody的行…我想我需要一些循环:/


Thx为您提供帮助。

尝试使用两个循环。外部循环会正常读取这些行。如果它找到像
/^Rbody/i
这样的行,那么它将使用内部循环跳过所有内容,直到看到“END”:

while(已定义(my$line=)){
chomp($line);
如果($line=~/^Rbody/i){
while(已定义($line=)){
chomp($line);
如果$line eq“END”,则为最后一行;
}
}否则{
推送(@alllines,$line);
}
}

尝试使用两个循环。外部循环会正常读取这些行。如果它找到像
/^Rbody/i
这样的行,那么它将使用内部循环跳过所有内容,直到看到“END”:

while(已定义(my$line=)){
chomp($line);
如果($line=~/^Rbody/i){
while(已定义($line=)){
chomp($line);
如果$line eq“END”,则为最后一行;
}
}否则{
推送(@alllines,$line);
}
}

这有点深奥,但这是一个很好的用例:

while(){
按@alllines,$\除非/^Rbody/。/^END/;
}

表达式
/^Rbody//^END/
返回false,直到
$\ucode>匹配正则表达式
/^Rbody/
。然后返回true,直到匹配
/^END/
这有点深奥,但这是一个很好的用例:

while(){
按@alllines,$\除非/^Rbody/。/^END/;
}

表达式
/^Rbody//^END/
返回false,直到
$\ucode>匹配正则表达式
/^Rbody/
。然后返回true,直到匹配
/^END/

只需使用状态变量跟踪是否应打印当前行

use strict;
use warnings;

my $print = 1;

while (<DATA>) {
  if ($print) {
    $print = 0 if /^Rbody/i;
    print if $print;
  }
  elsif (/^END$/) {
    $print = 1;
  }
}
使用严格;
使用警告;
我的$print=1;
而(){
如果($print){
$print=0,如果/^Rbody/i;
如果$print,则打印;
}
elsif(/^END$/){
$print=1;
}
}

只需使用一个状态变量,跟踪是否应打印当前行

use strict;
use warnings;

my $print = 1;

while (<DATA>) {
  if ($print) {
    $print = 0 if /^Rbody/i;
    print if $print;
  }
  elsif (/^END$/) {
    $print = 1;
  }
}
使用严格;
使用警告;
我的$print=1;
而(){
如果($print){
$print=0,如果/^Rbody/i;
如果$print,则打印;
}
elsif(/^END$/){
$print=1;
}
}

不幸的是,似乎没有任何版本可以工作:

第一个版本打印每一行,其他两个版本不提供输出

我的文本如下所示:

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;
#/usr/bin/perl
#
#打印“BITE geben sie das Dummy包括:\n”;
#印章($dummyfile=);
#打印“\n”;
#打印“BITE geben sie das基础包括:\n”;
#印章($basisfile=);
#打印“\n”;
$dummyfile='Dummy_mu5070b____mvs2g___1_cb21_k19_m04F_bsd_w3_bfrei___krmi_040_.inc';
$newinc=“dummy\u include.inc”;
打开(INC$dummyfile);
开放式(NEWINC,“>$NEWINC”);
.... 缺少正则表达式
打印@所有行;

不幸的是,似乎没有任何版本可以工作:

第一个版本打印每一行,其他两个版本不提供输出

我的文本如下所示:

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;
#/usr/bin/perl
#
#打印“BITE geben sie das Dummy包括:\n”;
#印章($dummyfile=);
#打印“\n”;
#打印“BITE geben sie das基础包括:\n”;
#印章($basisfile=);
#打印“\n”;
$dummyfile='Dummy_mu5070b____mvs2g___1_cb21_k19_m04F_bsd_w3_bfrei___krmi_040_.inc';
$newinc=“dummy\u include.inc”;
打开(INC$dummyfile);
开放式(NEWINC,“>$NEWINC”);
.... 缺少正则表达式
打印@所有行;

这些单独的行是否都在txt文件中?另外,你是否必须以某种方式保存这些内容,还是只需要制作一个没有这些内容的文本文件?还有,是Rbody。。。333 444 555 666结束一条线,你必须移除那条线吗?@squiguy:不,这不是一条线。Rbody是第一个,第十个结束。在一些数据之间。整个数据块应该被删除,其余的数据应该分别放入我的数组中。txt文件中的每一行都是独立的吗?另外,你是否必须以某种方式保存这些内容,还是只需要制作一个没有这些内容的文本文件?还有,是Rbody。。。333 444 555 666结束一条线,你必须移除那条线吗?@squiguy:不,这不是一条线。Rbody是第一个,第十个结束。在一些数据之间。应该删除整个块,其余的数据应该分别放入我的数组中。