2012-06-27 18 views
1

我刚刚写了一个非常简单的perl tk脚本来读取一个巨大的文本文件,并将其与文本部件一起显示并附加到滚动条部件。现在我的问题是,每次运行脚本时,它都会从第一句(整个文本文件)开始显示。我如何让脚本记住我在文本中的位置,并在我退出并再次启动脚本时显示相同的区域如果我读取文本的第1000行并退出脚本,脚本应该显示第1000行当我再次运行它。 (或换句话说,请记住滚动位置)Perltk - 记住文本部件中的位置

我不是perl tk和perl的专业人员,但正在尽我所能来学习它。请给出一个明确的解释来解释它

回答

2

如果你关闭你的Perl脚本,它结束。它不记得任何东西,它不再存在。 但是,您可以使脚本将位置保存到文件中,并且在启动时,您可以尝试从文件中读取位置。请看下面的例子:

#!/usr/bin/perl 
use warnings; 
use strict; 

use Tk; 

my $file = 'input.txt'; 
my $config = '.viewtext.conf'; 

my $mw = MainWindow->new(-title => 'Remember Position'); 
my $t = $mw->Scrolled("Text", -scrollbars => 'se')->pack; 
my $b = $mw->Button(-text => 'Quit', -command => \&quit)->pack; 


open my $FH, '<', $file or die $!; 
$t->Contents(<$FH>); 
close $FH; 

if (-f $config) { 
    open my $FH, '<', $config or die $!; 
    my ($x0, $x1, $y0, $y1) = split//, <$FH>; 
    $t->xviewMoveto($x0);       # Here we restore the saved position 
    $t->yviewMoveto($y0); 
} 

MainLoop(); 

sub quit { 
    open my $CONF, '>', $config or die $!; 
    print {$CONF} join ' ', $t->xview, $t->yview; # This is the current position 
    close $CONF; 
    $mw->destroy; 
} 

如果你要打开几个不同的文件,你必须与位置一起记住文件的路径。

+0

非常感谢!!真的解决了它! – dileepmani