2012-06-27 42 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