我是perl的新手,我正在尝试用perl tk编写程序。我有其中的大部分,但似乎无法让最后一点下来。
我正在读一个看起来像这样的.txt文件......
display ("Blue")
....
....
....
....
display ("Yellow")
....
bobby
....
....
display ("Red")
....
.... and so on
“....”是我真正不关心的数据部分,但我必须搜索才能找到“bobby”。
我已经构建了一个数组,用于存储所有显示的行。即@array。我想在原始.txt文件中的“显示”的每一行之间搜索“bobby”,并输出其上方的任何显示行。
对于上面的示例,我想要输出
显示(“黄色”)
我想我需要一个while循环来迭代我想要搜索的显示之间的所有区域。
下面的代码展示了我构建的一些内容。 在输入后按下按钮时,下面的子运行。
#Output Substation ID to Pane
sub find_substations
{
#Copy the entry
my $substation_to_search = $find_ensub->get();
#Insert the copied entry into the outptutext_box
$output_textbox->insert("end", "Substation ID: $substation_to_search\n\n");
open(myfile1, "file and file location");
my @lines = <myfile1>;
#Open File and Print all lines with display in it.
my @array= grep(/display /,@lines);
#Array Size
my $size = @array;
my $start = $lines[0];
my $stop = $lines[1];
while("$x" < "$size")
{
if("$start".."$stop")
{
next if /$start/||/$stop/;
if()
{
$output_textbox->insert("end", "$lines[0]");
}#if stop
}#If stop
$x++;
}
#close myfile1;
}
我一直在阅读关于开始和停止的信息,但无法让它正常工作。谁能帮我吗?开始停止部分的代码不完整。
答案 0 :(得分:0)
如果我理解你的问题,我认为你的问题过于复杂。无需跟踪边界(您的$start
和$end
),只需跟踪display
的当前值。例如:
<强> infile中:强>
display ("Blue")
foo
bar
display ("Yellow")
baz
bobby
qux
display ("Red")
pop
bobby
<强> script.pl:强>
#!/usr/bin/perl
use strict;
use warnings;
open(my $fh, '<', "./".$ARGV[0]) or die("Cannot open file");
my $display;
while (<$fh>) {
$display = $_ if /^display/;
print $display if /^bobby$/;
}
收率:
$ perl ./script.pl ./infile
display ("Yellow")
display ("Red")