Leser: 1
![]() |
|< 1 2 3 4 >| | ![]() |
32 Einträge, 4 Seiten |
Quote(1) Erstellen Sie mithilfe des Moduls "Tk" ein PERL-Skript mit grafischer Oberfläche, welches die Möglichkeit bietet, eine Ausgangsdatei im Textformat (.txt) zu spezifizieren.
(2) Der User muss außerdem den Namen einer Ausgabedatei selbst festlegen können.
(3) Durch das Anklicken eines Buttons soll das Skript die bestehnde Datei einlesen und jeweils an der ersten Stelle einer Zeile eine fortlaufende Zeilennummerierung einfügen.
(4) Außerdem müssen die festgelegte Ausgabedatei generiert und der Ergebnistext in die Datei ausgegeben werden, wobei über die grafische Oberfläche (Listbox) die erfolgreiche Ausführung angezeigt werden soll.
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
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
#!/usr/bin/perl
use strict;
use warnings;
=pod
=head AUFGABE
Erstellen Sie mithilfe des Moduls "Tk" ein PERL-Skript mit grafischer
Oberfläche, welches die Möglichkeit bietet, eine Ausgangsdatei im
Textformat (.txt) zu spezifizieren. Der User muss außerdem den Namen
einer Ausgabedatei selbst festlegen können. Durch das Anklicken eines
Buttons soll das Skript die bestehnde Datei einlesen und jeweils an
der ersten Stelle einer Zeile eine fortlaufende Zeilennummerierung
einfügen. Außerdem müssen die festgelegte Ausgabedatei generiert und
der Ergebnistext in die Datei ausgegeben werden, wobei über die
grafische Oberfläche (Listbox) die erfolgreiche Ausführung angezeigt
werden soll.
=cut
use Tk;
use Tk::LabFrame;
use Tk::ErrorDialog;
#
# MainWindow
#
my $mw = new MainWindow;
$mw->title("Komische Aufgabe von Satanica");
#
# Eingabedatei auswaehlen:
#
my $f1 = $mw->LabFrame(-label => 'Eingabedatei',
-labelside => 'acrosstop',
)
->pack(-side => 'top',
-expand => 1,
-fill => 'x',
);
my $ein_entry = $f1->Entry(-width => 50,
)
->pack(-side => 'left',
-expand => 1,
-fill => 'x',
);
my $ein_btn = $f1->Button(-text => 'Durchsuchen',
-command =>
sub {
my $typen = [
['Textdateien', '.txt' ],
['Alle Dateien', '*' ],
];
my $dn = $mw->getOpenFile(-filetypes => $typen,
);
if (defined $dn and $dn ne '') {
$ein_entry->delete(0, 'end');
$ein_entry->insert('end', $dn);
}
},
)
->pack(-side => 'left',
-expand => 0,
-fill => 'none',
);
#
# Ausgabedatei auswaehlen:
#
my $f2 = $mw->LabFrame(-label => 'Ausgabedatei',
-labelside => 'acrosstop',
)
->pack(-side => 'top',
-expand => 1,
-fill => 'x',
);
my $aus_entry = $f2->Entry(-width => 50,
)
->pack(-side => 'left',
-expand => 1,
-fill => 'x',
);
my $aus_btn = $f2->Button(-text => 'Durchsuchen',
-command =>
sub {
my $typen = [
['Textdateien', '.txt' ],
['Alle Dateien', '*' ],
];
my $dn = $mw->getSaveFile(-filetypes => $typen,
-defaultextension => 'txt',
);
if (defined $dn and $dn ne '') {
$aus_entry->delete(0, 'end');
$aus_entry->insert('end', $dn);
}
},
)
->pack(-side => 'left',
-expand => 0,
-fill => 'none',
);
#
# DoIt-Button:
#
my $doit_btn = $mw->Button(-text => 'do it',
-command => sub {do_it( $ein_entry->get(), $aus_entry->get())},
)
->pack(-side => 'top',
-expand => 1,
-fill => 'x',
);
#
# Beweisausgabe:
#
my $anzeige = $mw->Scrolled("Text",
-scrollbars => 'osoe',
-background => '#d7d7d7',
-foreground => 'blue',
-width => 80,
-height => 25,
-relief => 'flat',
-font => '{Courier New} 10 {normal}',
-wrap => 'none',
)
->pack(-side => 'top',
-expand => 1,
-fill => 'both',
);
#
# Exit-Button:
#
my $exit_btn = $mw->Button(-text => 'Ende',
-command => sub { $mw->destroy() },
)
->pack(-side => 'top',
-expand => 1,
-fill => 'x',
);
#
# Bindungen:
#
$mw->bind ('<Return>', sub{$doit_btn->invoke()});
$mw->bind ('<Escape>', sub{$exit_btn->invoke()});
MainLoop();
sub do_it {
my ($ein, $aus) = @_;
die "Fehlende Parameter in do_it"
unless defined $ein
and defined $aus;
die "Eingabedatei '$ein' nicht vorhanden in do_it"
unless -f $ein;
open (IN, $ein ) or die "Kann '$ein' nicht zum Lesen oeffen: $!";
open (OUT, ">$aus") or die "Kann '$aus' nicht zum Schreiben oeffen: $!";
while (<IN>) {
print OUT $. . ':' . $_;
}
close OUT or die "Kann '$aus' nicht schliessen: $!";
close IN or warn "Kann '$ein' nicht schliessen: $!";
open (IN, $aus ) or die "Kann '$aus' nicht zum Lesen oeffen: $!";
while (<IN>) {
$anzeige->insert('end', $_);
}
close IN or warn "Kann '$aus' nicht schliessen: $!";
}
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
#! /usr/bin/perl
use strict;
use warnings;
use Tk;
my ($input,$output);
my $mw = MainWindow->new();
$mw->Entry(-textvariable => \$input)->pack(); # Eingabefeld für Pfad der einzulesenden Datei
$mw->Entry(-textvariable => \$output)->pack();# Eingabefeld für Pfad, wo gespeichert werden soll
$mw->Button(-command => \&save, -text => 'Speichern')->pack(); # "Speichern"-Button
my $list = $mw->ScrlListbox()->pack(); # Listbox für Ausgabe, ob Speichern erfolgreich war
MainLoop;
# Methode zum einlesen und speichern
sub save{
my $counter = 1; # Counter für Zeilennummer
open(R_TXT,"<$input") or die $!; # Datei zum Lesen öffnen
open(W_TXT,">$output") or die $!; # Datei zum Schreiben öffnen
while(my $line = <R_TXT>){ # Zeilenweise einlesen
$line = $counter." ".$line; # Zeilennummer vorne anfügen
print W_TXT $line; # Veränderte Zeile speichern
$counter++; # counter hochzählen
}
close W_TXT;
close R_TXT; # Filehandle schließen
$list->insert('end',"Speichern erfolgreich!");
}
Quote)\n\nHANDLE->input_line_number(EXPR)
$INPUT_LINE_NUMBER
$NR
$. Current line number for the last filehandle accessed.
Each filehandle in Perl counts the number of lines that have
been read from it. (Depending on the value of $/, Perl's idea of
what constitutes a line may not match yours.) When a line is
read from a filehandle (via readline() or "<>"), or when tell()
or seek() is called on it, $. becomes an alias to the line
counter for that filehandle.
You can adjust the counter by assigning to $., but this will not
actually move the seek pointer. *Localizing $. will not localize
the filehandle's line count*. Instead, it will localize perl's
notion of which filehandle $. is currently aliased to.
$. is reset when the filehandle is closed, but not when an open
filehandle is reopened without an intervening close(). For more
details, see "I/O Operators" in perlop. Because "<>" never does
an explicit close, line numbers increase across ARGV files (but
see examples in "eof" in perlfunc).
You can also use "HANDLE->input_line_number(EXPR)" to access the
line counter for a given filehandle without having to worry
about which handle you last accessed.
(Mnemonic: many programs use "." to mean the current line
number.)
![]() |
|< 1 2 3 4 >| | ![]() |
32 Einträge, 4 Seiten |