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

관련 문제