Schrift
[thread]4813[/thread]

TK-Modul Ein und Aulsesen: Anfänger verzweifelt (Seite 3)

Leser: 1


<< |< 1 2 3 4 >| >> 32 Einträge, 4 Seiten
Crian
 2004-08-18 17:08
#42446 #42446
User since
2003-08-04
5866 Artikel
ModeratorIn
[Homepage]
user image
Wahrscheinlich konnte die Eingangsdatei nicht gefunden werden.
Ich hab das mit dem die in der entsprechenden Funktion bei mir sprechender abgefangen und dann mit use Tk::ErrorDialog; dafür gesorgt, dass diese Fehlermeldungen in einer Dialogbox landen (was aber das ganze nur optisch verschönert und am Problem überhaupt nichts ändert).

Bist Du sicher, dass die Eingabedatei existiert?
s--Pevna-;s.([a-z]).chr((ord($1)-84)%26+97).gee; s^([A-Z])^chr((ord($1)-52)%26+65)^gee;print;

use strict; use warnings; Link zu meiner Perlseite
renee
 2004-08-18 17:10
#42447 #42447
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
Der Fehler kommt, wenn Du versuchst, eine nicht existierende Datei zu öffnen!
OTRS-Erweiterungen (http://feature-addons.de/)
Frankfurt Perlmongers (http://frankfurt.pm/)
--

Unterlagen OTRS-Workshop 2012: http://otrs.perl-services.de/workshop.html
Perl-Entwicklung: http://perl-services.de/
renee
 2004-08-18 17:12
#42448 #42448
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
Hier ein verbesserter Code:
Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
#! /usr/bin/perl

use strict;
use warnings;
use Tk;

my ($input,$output);

my $mw = MainWindow->new();
$mw->Entry(-textvariable => \$input)->pack();
$mw->Entry(-textvariable => \$output)->pack();
$mw->Button(-command => \&save, -text => 'Speichern')->pack();
my $list = $mw->ScrlListbox()->pack();

MainLoop;

sub save{
 my $counter = 1; # Counter für Zeilennummer
 if(open(R_TXT,"<$input")){ # Datei zum Lesen öffnen
   if(defined $output && open(W_TXT,">$output")){
     while(my $line = <R_TXT>){ # Zeilenweise einlesen
       $line = $counter." ".$line; # Zeilennummer vorne anfügen
       print W_TXT $line;
       $counter++;
     }
     close W_TXT;
$list->insert('end',"Speichern erfolgreich!");
   }
   else{
     $list->insert('end',"Ausgabedatei nicht geöffnet!");
   }
   close R_TXT; # Filehandle schließen
 }
 else{
   $list->insert('end', "Datei existiert nicht!");
 }
}
\n\n

<!--EDIT|renee|1092835484-->
OTRS-Erweiterungen (http://feature-addons.de/)
Frankfurt Perlmongers (http://frankfurt.pm/)
--

Unterlagen OTRS-Workshop 2012: http://otrs.perl-services.de/workshop.html
Perl-Entwicklung: http://perl-services.de/
Crian
 2004-08-18 17:17
#42449 #42449
User since
2003-08-04
5866 Artikel
ModeratorIn
[Homepage]
user image
Ich habs gerade mal bei mir getestet, da lief der Code.

Ich konnte mich aber nicht davon abhalten lassen, ihn vorher etwas umzumodeln ;)

Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
#! /usr/bin/perl

use strict;
use warnings;
use Tk;
use Tk::ErrorDialog;

my ($input,$output);

my $mw = new MainWindow;

# Eingabefeld für Pfad der einzulesenden Datei:
$mw->Entry(-textvariable => \$input)->pack();

# Eingabefeld für Pfad, wo gespeichert werden soll
$mw->Entry(-textvariable => \$output)->pack();

# "Speichern"-Button
$mw->Button(-command => \&save, -text => 'Speichern')->pack();

# Listbox für Ausgabe, ob Speichern erfolgreich war
my $list = $mw->ScrlListbox()->pack();

MainLoop();

# Methode zum einlesen und speichern
sub save {
   die "Eingangsdatei existiert nicht" unless defined $input and -f $input;
   die "Ausgabedatei undefiniert"      unless defined $output;
   open(R_TXT, "<$input" ) or die $!;
   open(W_TXT, ">$output") or die $!;
   while (<R_TXT>) {
       print W_TXT $. . ': ' . $_;
   }
   close W_TXT;
   close R_TXT;
   $list->insert('end',"Speichern erfolgreich!");
}


Edit: Nette Idee, die Listbox für die Meldung zu nehmen :)\n\n

<!--EDIT|Crian|1092835299-->
s--Pevna-;s.([a-z]).chr((ord($1)-84)%26+97).gee; s^([A-Z])^chr((ord($1)-52)%26+65)^gee;print;

use strict; use warnings; Link zu meiner Perlseite
renee
 2004-08-18 17:25
#42450 #42450
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
Ich habe meinen Code auch noch etwas verbessert (Überprüfung auf Definiertheit $output )!
OTRS-Erweiterungen (http://feature-addons.de/)
Frankfurt Perlmongers (http://frankfurt.pm/)
--

Unterlagen OTRS-Workshop 2012: http://otrs.perl-services.de/workshop.html
Perl-Entwicklung: http://perl-services.de/
Crian
 2004-08-18 17:48
#42451 #42451
User since
2003-08-04
5866 Artikel
ModeratorIn
[Homepage]
user image
Ja gut. Vielleicht sollte man das Öffnen und Schließen der Eingabedatei noch nach ganz innen um die While-Schleife verlagern?
s--Pevna-;s.([a-z]).chr((ord($1)-84)%26+97).gee; s^([A-Z])^chr((ord($1)-52)%26+65)^gee;print;

use strict; use warnings; Link zu meiner Perlseite
ptk
 2004-08-18 17:51
#42452 #42452
User since
2003-11-28
3645 Artikel
ModeratorIn
[default_avatar]
Falls CPAN-Module erlaubt sind, und fuer ein bisschen mehr Komfort kann man Tk::FileEntry oder Tk::PathEntry zum Eingeben der Dateinamen eingeben. Tk::FileEntry zeigt neben dem Entry auch einen Knopf an, der einen normalen Filedialog oeffnet. Tk::PathEntry erlaubt filename completion a la bash oder tcsh mit der <Tab>-Taste.

Wenn ich so etwas optional machen will, weil z.B. nicht jeder mit CPAN.pm klar kommt oder das Nachinstallieren von Modulen einfach nicht moeglich ist, schreibe ich oft folgendes:
Code: (dl )
1
2
3
4
5
my $PathEntry = "PathEntry";
if (!eval { require Tk::PathEntry; 1 }) {
$PathEntry = "Entry";
}
$e = $mw->$PathEntry->pack;
ptk
 2004-08-18 17:53
#42453 #42453
User since
2003-11-28
3645 Artikel
ModeratorIn
[default_avatar]
[quote=Crian,18.08.2004, 15:17]Edit: Nette Idee, die Listbox für die Meldung zu nehmen :)[/quote]
Nach dem insert in die Listbox sollte man vielleicht noch
Code: (dl )
$listbox->see("end");
machen, weil nicht automatisch nach unten gescrollt wird...
Crian
 2004-08-18 18:08
#42454 #42454
User since
2003-08-04
5866 Artikel
ModeratorIn
[Homepage]
user image
@Tk::PathEntry Grummel? Warum hab ich mir das dann mal selbst geschrieben? ;) Naja, hat mir nicht geschadet.

@Tk::FileEntry: Also so, wie ich es in meinem Vorschlag oben "zu Fuß" gelöst habe (da ist auch ein Durchsuchen-Knopf daneben)?
s--Pevna-;s.([a-z]).chr((ord($1)-84)%26+97).gee; s^([A-Z])^chr((ord($1)-52)%26+65)^gee;print;

use strict; use warnings; Link zu meiner Perlseite
ptk
 2004-08-18 19:05
#42455 #42455
User since
2003-11-28
3645 Artikel
ModeratorIn
[default_avatar]
[quote=Crian,18.08.2004, 16:08]@Tk::PathEntry Grummel? Warum hab ich mir das dann mal selbst geschrieben? ;) Naja, hat mir nicht geschadet.
[/quote] Tja, wer zuerst ein Upload auf CPAN macht, gewinnt :-) Wobei PathEntry noch nicht perfekt ist. Kann man deinen Code irgendwo sehen?
Quote
@Tk::FileEntry: Also so, wie ich es in meinem Vorschlag oben "zu Fuß" gelöst habe (da ist auch ein Durchsuchen-Knopf daneben)?
Ja. Leider ist Tk::FileEntry so alt, dass es nicht getOpenFile/getSaveFile verwendet, sondern das altertuemliche Tk::FileSelect. Vielleicht sollte jemand ein Update des Moduls machen...
<< |< 1 2 3 4 >| >> 32 Einträge, 4 Seiten



View all threads created 2004-08-16 17:43.