Hi Thanx for all your help. With the time diffrence I only get the reply's in the moring. Thanx a lot for the group's help.
Charlene On Wed, 30 Jun 2004 08:12:00 +0200, [EMAIL PROTECTED] (Charlene Gentle) wrote: >Thanx for the help Zentara. Here are a part of my code. I know that >I'm doning stuff the long way so if anyone could show me a shorter way >it will be helpfull. I wanted to put the sub's that I call into one but >how? The progress "meter" have to show that it is still busy scanning >the file, as soon as it is done and the file is closed, and the output >have been given the meter should stop. I don't want the user to close >the program before the job is done. > >Thanx > >>Hi >> >>My program works thru long lists of word. How can I show the user >that >>it is still busy and when it is done. Is there a progressmeter that >I >>can insert into the while loop. To have a perl/tk interface for the >>user. Hi...Ok I think I figured it out, without having any test files. Below is the code. What I did was go into your do_while sub and first count the total lines by looping thru the filehandles, then I rewound the filehandles to the beginning so they could be processed. Then as you process them, I increment the progressbar by ( 100 / $linetotal ). It seems to work, but I don't know what you are doing for sure. In my testing, I create the test error file, then click each checkbox and select a txt file. Then click the toets button. Also I added a few select(undef,undef,undef,.01) statements to slow down the files for testing. You can remove them for your big files. #!/usr/bin/perl use Tk; use IO::File; use diagnostics; use warnings; use Tk::Balloon; # added these lines use Fcntl qw(:seek); use Tk::ProgressBar; my $linetotal = 0; my $progressbar; # use vars qw(@c @bs @cb_value @i $sfile_val $newline @bt); my $sfile = ""; my $file = ""; my $FILE0 = ""; my $FILE1 = ""; my $FILE2 = ""; my $FILE3 = ""; my $FILE4 = ""; my $FILE5 = ""; my $FILE6 = ""; # MAINWINDOW my $main = new MainWindow(); drawInterface(); Tk::MainLoop(); # INTERFACE FOR USER <BUTTONS, CHECKBOX, ETC> sub drawInterface { $main->title("Check For Errors"); $main->configure( -background => 'gray' ); $main->geometry("300x300"); # MAAK FRAMES my $opsFrm = $main->Frame( -background => 'gray' )->pack( -side => 'top' ); my $keuseFrm = $main->Frame( -background => 'gray' ); my $opbtFrm = $main->Frame( -background => 'gray' )->pack( -side => 'bottom' ); # MAAK KEUSE VIR DIE SAVE LEER $main->Label( -text => "Create a file to save errors to", -background => 'gray', -font => "Helvetica -15 bold" )->pack(); $main->configure( -background => 'gray' ); $main->Button( -text => 'Create', -width => 7, -height => 1, -command => sub { \&do_save($main) } )->pack( -pady => 3 ); # KEUSE BY TIPE LEERS my $keuse = $keuseFrm->Label( -text => "Maak 'n keuse", -font => "Helvetica -15 bold" )->pack( -side => 'top', -pady => 20 ); $keuse->configure( -background => 'gray' ); $keuseFrm->pack( -side => 'top', -fill => 'x' ); # CHECKBOX VIR LEERS WAT GEKIES WORD $c[0] = $keuseFrm->Checkbutton( -variable => \$cb_value[0], -offvalue => 0, -onvalue => 1, -text => "Dialects Upper", -background => 'gray', -command => sub { if ( $cb_value[0] == 1 ) { &do_get( $main, $c[0] = 0 ); } } )->pack( -side => 'top', -anchor => 'w', -padx => 20 ); $c[1] = $keuseFrm->Checkbutton( -variable => \$cb_value[1], -offvalue => 0, -onvalue => 1, -text => "Dialects Lower", -background => 'gray', -command => sub { if ( $cb_value[1] == 1 ) { &do_get( $main, $c[1] = 1 ); } } )->pack( -side => 'top', -anchor => 'w', -padx => 20 ); $c[2] = $keuseFrm->Checkbutton( -variable => \$cb_value[2], -offvalue => 0, -onvalue => 1, -text => "Coffensive Upper", -background => 'gray', -command => sub { if ( $cb_value[2] == 1 ) { &do_get( $main, $c[2] = 2 ); } } )->pack( -side => 'top', -anchor => 'w', -padx => 20 ); #DOEN EN EXIT BUTTONS $bt[0] = $opbtFrm->Button( -text => 'Toets', -width => 8, -height => 1, -command => sub { &do_while } )->pack( -side => 'left' ); $bt[1] = $opbtFrm->Button( -text => 'Exit', -width => 8, -height => 1, -command => sub { exit } )->pack( -side => 'right' ); } # SKEP FILE sub processfile { my $retval = 0; if ( open SFILE, "> $sfile" ) { print SFILE "\n" if ($newline); close(SFILE); } return $sfile; } # SAVE FILE WAT GESKEP IS sub do_save { my ($save) = @_; my @types = ( [ "Text files", [qw/.txt .doc/] ], [ "Text files", "", "TEXT" ], [ "All files", "*" ] ); $sfile = $main->getSaveFile( -filetypes => [EMAIL PROTECTED], -initialfile => 'test', -defaultextension => '.txt' ); print qq{You chose to save as "$sfile"\n}; processfile(); } # KRY FILE GEBRUIK GAAN WORD sub do_get { my ( $get, $get1 ) = @_; my @types = ( [ "Text files", [qw/.txt .doc/] ], [ "Text files", "", "TEXT" ], [ "All files", "*" ] ); $file = $main->getOpenFile( -filetypes => [EMAIL PROTECTED], -defaultextension => '.txt' ); print qq{"jy het $file "\n}; &kyk( $file, $get1 ); } # SIT DIE OOP GEMAAKTE LEER IN SY PLEK sub kyk { my ( $kyk, $kyk1 ) = @_; SWITCH: { if ( $kyk1 == 0 ) { $FILE0 = $file; print qq{" file0 = $FILE0 "\n}; my $op0 = $FILE0; open( FILE0, "<$op0" ) or die "$!: $op0\n yap0"; return $FILE0; last SWITCH; } if ( $kyk1 == 1 ) { $FILE1 = $file; print qq{" file1 = $FILE1 "\n}; my $op1 = $FILE1; open( FILE1, "<$op1" ) or die "$!: $op1\n yap1"; return $FILE1; last SWITCH; } if ( $kyk1 == 2 ) { $FILE2 = $file; print qq{" file2 = $FILE2 "\n}; my $op2 = $FILE2; open( FILE2, "<$op2" ) or die "$!: $op2\n yap2"; return $FILE2; last SWITCH; } } &do_while($file); } sub do_while { #count lines and rewind while(<FILE0>){$linetotal++} seek FILE0, 0, SEEK_SET or die "Cannot rewind file: $!"; while(<FILE1>){$linetotal++} seek FILE1, 0, SEEK_SET or die "Cannot rewind file: $!"; while(<FILE2>){$linetotal++} seek FILE2, 0, SEEK_SET or die "Cannot rewind file: $!"; print "$linetotal\n"; $progressbar = $main->ProgressBar( -length => 200, # Actually width -width => 20, # Actually height -gap => 0, -value => 0, -colors => [0, 'pink'], )->pack(-pady => 5, -padx => 5); while (<FILE0>) { my $line = $_; chomp($line); do_opt0($line); if ( $line ne $token ) { print SFILE "$token"; } $progressbar->value($progressbar->value + (100/$linetotal) ); $main->update; select(undef,undef,undef,.01); } while (<FILE1>) { my $line = $_; chomp($line); do_opt1($line); if ( $line ne $token ) { print SFILE "$token"; } $progressbar->value($progressbar->value + (100/$linetotal) ); $main->update; select(undef,undef,undef,.01); } while (<FILE2>) { my $line = $_; chomp($line); do_opt2($line); if ( $line ne $token ) { print SFILE "$token"; } $progressbar->value($progressbar->value + (100/$linetotal) ); $main->update; select(undef,undef,undef,.01); } } # OPTIONS WAT GEMAAK IS ?????????? sub do_opt0 { my $op0 ||= 0; my $class; my $print = 0; my $word = $_[0]; my $sfil = $sfile; $op0 = $FILE0; print " $sfile "; open( SFILE, ">>$sfil" ) or die "$!: $sfil\n"; if ( $word =~ /^(.*)(\s)(.*)/ ) { $token = "$word\t\t\t$op0\n"; return $token; } #spasies if ( $word =~ /^(.*)(\n)(\n)(.*)/ ) { $token = "$word\t\t\t$op0\n"; return $token; } #dubbel enters if ( $word =~ /^([a-z]+)([A-Z]+)([a-z]+)/ ) { $token = "$word\t\t\t$op0\n"; return $token; } #kleinHOOFklein if ( $word =~ /^([A-Z])(.*)/ ) { $token = "$word\t\t\t$op0\n"; return $token; } #HOOF if ( $word =~ /^((.*)[\?|\!|\#|\_|\.](.*))/ ) { $token = "$word\t\t\t$op0\n"; return $token; } #vraagteken,#uitroepteken,#underscore,#iets,#iets if ( $word =~ /^('-')(.*)/ ) { $token = "$word\t\t\t$op0\n"; return $token; } #koppelteken aan begin van woord if ( $word =~ /^(.*)('-')$/ ) { $token = "$word\t\t\t$op0\n"; return $token; } #koppelteken aan einde van woord if ( $word =~ /^(.*)(\@|\\|\/|\{|\}|\=|\+|\*|\&|\^|\:|\;|\<|\>|\(|\)|\`|\~|\%|\"|\,)(.*)$/ ) { $token = "$word\t\t\t$op0\n"; return $token; } #weird leestekens } sub do_opt1 { my $op0 ||= 0; my $class; my $print = 0; my $word = $_[0]; my $sfil = $sfile; $op1 = $FILE1; print " $sfile "; open( SFILE, ">>$sfil" ) or die "$!: $sfil\n"; if ( $word =~ /^(.*)(\s)(.*)/ ) { $token = "$word\t\t\t$op1\n"; return $token; } #spasies if ( $word =~ /^(.*)(\n)(\n)(.*)/ ) { $token = "$word\t\t\t$op1\n"; return $token; } #dubbel enters if ( $word =~ /^([a-z]+)([A-Z]+)([a-z]+)/ ) { $token = "$word\t\t\t$op1\n"; return $token; } #kleinHOOFklein if ( $word =~ /^([A-Z])(.*)/ ) { $token = "$word\t\t\t$op1\n"; return $token; } #HOOF if ( $word =~ /^((.*)[\?|\!|\#|\_|\.](.*))/ ) { $token = "$word\t\t\t$op1\n"; return $token; } #vraagteken,#uitroepteken,#underscore,#iets,#iets if ( $word =~ /^('-')(.*)/ ) { $token = "$word\t\t\t$op1\n"; return $token; } #koppelteken aan begin van woord if ( $word =~ /^(.*)('-')$/ ) { $token = "$word\t\t\t$op1\n"; return $token; } #koppelteken aan einde van woord if ( $word =~ /^(.*)(\@|\\|\/|\{|\}|\=|\+|\*|\&|\^|\:|\;|\<|\>|\(|\)|\`|\~|\%|\"|\,)(.*)$/ ) { $token = "$word\t\t\t$op1\n"; return $token; } #weird leestekens } sub do_opt2 { my $op0 ||= 0; my $class; my $print = 0; my $word = $_[0]; my $sfil = $sfile; $op2 = $FILE2; print " $sfile "; open( SFILE, ">>$sfil" ) or die "$!: $sfil\n"; if ( $word =~ /^(.*)(\s)(.*)/ ) { $token = "$word\t\t\t$op2\n"; return $token; } #spasies if ( $word =~ /^(.*)(\n)(\n)(.*)/ ) { $token = "$word\t\t\t$op2\n"; return $token; } #dubbel enters if ( $word =~ /^([a-z]+)([A-Z]+)([a-z]+)/ ) { $token = "$word\t\t\t$op2\n"; return $token; } #kleinHOOFklein if ( $word =~ /^([A-Z])(.*)/ ) { $token = "$word\t\t\t$op2\n"; return $token; } #HOOF if ( $word =~ /^((.*)[\?|\!|\#|\_|\.](.*))/ ) { $token = "$word\t\t\t$op2\n"; return $token; } #vraagteken,#uitroepteken,#underscore,#iets,#iets if ( $word =~ /^('-')(.*)/ ) { $token = "$word\t\t\t$op2\n"; return $token; } #koppelteken aan begin van woord if ( $word =~ /^(.*)('-')$/ ) { $token = "$word\t\t\t$op2\n"; return $token; } #koppelteken aan einde van woord if ( $word =~ /^(.*)(\@|\\|\/|\{|\}|\=|\+|\*|\&|\^|\:|\;|\<|\>|\(|\)|\`|\~|\%|\"|\,)(.*)$/ ) { $token = "$word\t\t\t$op2\n"; return $token; } #weird leestekens } close(SFILE); close(FILE0); close(FILE1); close(FILE2); # SPASIE sub do_spasie { } # DUBBLE ENTRIES sub do_ent { } # KLEINHOOFKLEIN sub do_khk { } # HOOF sub do_hoof { } # KLEIN sub do_klein { } # VREEMDE sub do_vr { } # KOPPEL TEKEN BEGIN sub do_kopb { } # KOPPELTEKEN EINDE sub do_kope { } # WEIRD LEESTEKENS sub do_weird { } __END__ -- I'm not really a human, but I play one on earth. http://zentara.net/japh.html -- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED] <http://learn.perl.org/> <http://learn.perl.org/first-response> -- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED] <http://learn.perl.org/> <http://learn.perl.org/first-response>