Schrift
Wiki:Tipp zum Debugging: use Data::Dumper; local $Data::Dumper::Useqq = 1; print Dumper \@var;
[thread]4650[/thread]

Textdatei einlesen, ändern, neue erstellen: open (DATEI, "text.txt")

Leser: 18


<< |< 1 2 3 4 >| >> 31 Einträge, 4 Seiten
Gast Gast
 2003-09-16 00:10
#43482 #43482
Hallo,
ich habe mit Tk eine grafische Oberfläche erstellt, bei der man zwei Eingabefelder hat. Das erste für die Textdatei, die eingelesen werden soll, das zweite für die geänderteTextdatei,
die generiert werden soll. Mit einem Button Start sollen nun die Zeilen der Textdatei fortlaufend nummeriert werden und eine neue Textdatei angelegt werden.
Mit open (DATEI, "text.txt") kann man konkret auf eine Textdatei zugreifen, wie funktioniert das aber bei einem Eingabefeld?
Habe es mit open (DATEI, "$eingabedatei") probiert, funktioniert nicht
Danke für eure Hilfe<p>
Barb
Dubu
 2003-09-16 00:44
#43483 #43483
User since
2003-08-04
2145 Artikel
ModeratorIn + EditorIn

user image
Deine Fehlerbeschreibung ist etwas knapp. Was heisst "funktioniert nicht"? Hast du eine Fehlerabfrage? Welcher Fehler wird ausgegeben? Woher kommt die Variable $eingabedatei? Wenn das der Inhalt des Eingabefeldes ist, dann sollte es auch klappen, so lange die Datei auch existiert.
Robby
 2003-09-16 09:29
#43484 #43484
User since
2003-08-11
409 Artikel
BenutzerIn
[default_avatar]
Kannst Du schnell mal den Code posten, dann können wir Dir schneller und besser helfen :)
Kaum macht man es richtig - schon funktioniert es!
havi
 2003-09-16 10:36
#43485 #43485
User since
2003-08-04
2036 Artikel
BenutzerIn
[Homepage]
user image
Was sagt:
Code: (dl )
1
2
3
use warnings;
use diagnostics;
open (DATEI, "$eingabedatei") or die $!;


?

Gruss
Barbara
 2003-09-16 16:03
#43486 #43486
User since
2003-09-16
2 Artikel
BenutzerIn
[default_avatar]
Hallo,

Danke, dass Ihr mir Eure Hilfe anbietet.

Hier meine Fehlermeldung:


Code: (dl )
1
2
3
4
5
6
7
8
C:\Perl\bin\CGP02>aufg1.pl
Tk::Error: Datei kann nicht geöffnet werden at C:\Perl\bin\CGP02\aufg1.pl line 3
7.
[\&main::action]
Tk callback for .frame.button
Tk:: at C:/Perl/site/lib/Tk.pm line 228
Tk::Button::butUp at C:/Perl/site/lib/Tk/Button.pm line 111
(command bound to event)


Hier mein Skript:

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
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
#!/usr/local/bin/perl -w

use strict;
use Tk;
my $haupt = new MainWindow;

my $links = $haupt->Frame();
$links->Label(-text=> "Geben Sie die Namen der Ausgangsdatei und der Ausgabedatei ein: ")->pack();

my $ausgangsdatei = $links->Entry();
$ausgangsdatei->pack();

my $ausgabedatei = $links->Entry();
$ausgabedatei->pack();

my $schalter1 = $links->Button(
-text=>"START",
-command=> \&action
)->pack();

my $schalter2 = $links->Button(
-text=> "Exit",
-command => [$haupt => 'destroy']
)->pack;

my $rechts = $haupt->Frame();
$rechts->Label(-text=> "Ausgabe:")->pack();
my $daten = $rechts->Listbox();

$links->pack(-side => "left");
$rechts -> pack(-side => "right");

MainLoop();

sub action
{
open(DATEI,"<$ausgangsdatei")
or die "Datei kann nicht ge\x94ffnet werden";

open(NEU, ">$ausgabedatei")
or die "Datei kann nicht ge\x94ffnet werden";

undef$/;
my $text = <DATEI>;
print "\n\n$text\n";

$text =~s/\bsie\b/Sie/g;

print NEU $text;

print "\n\n$text\n";

close(DATEI);
close(NEU);
}



Hier mein Skript:
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
39
40
41
42
43
44
45
46
47
48
49
50
51
#!/usr/local/bin/perl -w

use strict;
use Tk;
my $haupt = new MainWindow;

my $links = $haupt->Frame();
$links->Label(-text=> "Geben Sie die Namen der Ausgangsdatei und der Ausgabedatei ein: ")->pack();

my $ausgangsdatei = $links->Entry();
$ausgangsdatei->pack();

my $ausgabedatei = $links->Entry();
$ausgabedatei->pack();

my $schalter1 = $links->Button(
-text=>"START",
-command=> \&action
)->pack();

my $schalter2 = $links->Button(
-text=> "Exit",
-command => [$haupt => 'destroy']
)->pack;

my $rechts = $haupt->Frame();
$rechts->Label(-text=> "Ausgabe:")->pack();
my $daten = $rechts->Listbox();

$links->pack(-side => "left");
$rechts -> pack(-side => "right");

MainLoop();

sub action
{
open(DATEI,"<$ausgangsdatei")
or die "Datei kann nicht ge\x94ffnet werden";

open(NEU, ">$ausgabedatei")
or die "Datei kann nicht ge\x94ffnet werden";

undef$/;
my $text = <DATEI>;
.
.
.
.
.
.
}


Wie das mit dem Einfügen der Nummerierung funkt weiß ich auch noch nicht!
Grüße Barb

Bearbeitet von Crian: CODE-Blöcke hinzugefügt. (... und das Doppelposting entfernt.)\n\n

<!--EDIT|Crian|1064174189-->
Robby
 2003-09-16 16:24
#43487 #43487
User since
2003-08-11
409 Artikel
BenutzerIn
[default_avatar]
Hier:

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
39
40
41
42
43
#!/usr/local/bin/perl -w

use strict;
use Tk;
my $haupt = new MainWindow;

my $links = $haupt->Frame();
$links->Label(-text=> "Geben Sie die Namen der Ausgangsdatei und der Ausgabedatei ein: ")->pack();

my $ausgangsdatei = $links->Entry()->pack();

my $ausgabedatei = $links->Entry()->pack();

my $schalter1 = $links->Button( -text=>"START",
-command=> \&action
 )->pack();

my $schalter2 = $links->Button( -text=> "Exit",
-command => [$haupt => 'destroy']
 )->pack;

my $rechts = $haupt->Frame();
$rechts->Label(-text=> "Ausgabe:")->pack();
my $daten = $rechts->Listbox();

$links->pack(-side => "left");
$rechts -> pack(-side => "right");

MainLoop();

sub action
{
my $input = $ausgangsdatei->get;
open(DATEI,"<$input")
or die "Datei kann nicht ge\x94ffnet werden";

my $output = $ausgabedatei->get;
open(NEU, ">$output")
or die "Datei kann nicht ge\x94ffnet werden";

undef$/;
my $text = <DATEI>;
}


Du musst:
$ausgangsdatei->get; bzw
$ausgabedatei->get;
machen um den WERT auszulesen....ich hab ihn dann in input bzw. output gepackt....

Schau es Dir mal an, wenn Du noch weitere Fragen hast einfach fragen :)

Edit: Ach so, beim nächsten mal bitte Code-Tags verwenden beim Sourcecode und nicht so oft auf absenden klicken ;)\n\n

<!--EDIT|Robby|1063715790-->
Kaum macht man es richtig - schon funktioniert es!
Robby
 2003-09-16 16:33
#43488 #43488
User since
2003-08-11
409 Artikel
BenutzerIn
[default_avatar]
ach so....und so geht das ungefähr mit den Zeilenummern
ist nicht der hübscheste Code, sollte Dir aber erstmal weiterhelfen....(Wird etwas unsauber beim Übergang von Zeile 9 nach 10 und 99 nach 100 usw.)

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
sub action
{
my @datensicherung;

my $input = $ausgangsdatei->get;
open(DATEI,"<$input")
or die "Datei kann nicht ge\x94ffnet werden";

# Alles von der Datei in ein Array packen
while ( <DATEI> )
{
push @datensicherung, $_;
}


my $output = $ausgabedatei->get;
open(NEU, ">$output")
or die "Datei kann nicht ge\x94ffnet werden";

# Daten Plus Zeilennummer zurückschreiben in eine neue Datei
my $zeile = 1;
foreach ( @datensicherung )
{
print NEU "$zeile $_";
$zeile++;
}
}


Hoffe ich konnte Dir erstmal weiterhelfen :)
Kaum macht man es richtig - schon funktioniert es!
Barbara
 2003-09-16 20:55
#43489 #43489
User since
2003-09-16
2 Artikel
BenutzerIn
[default_avatar]
Hallo Robby,

vielen Dank für Deine Hilfe - funktioniert super!
Na ja, ich muß wohl noch viel lernen,
bin ja noch eine Anfängerin.

bis dann

Barb
Robby
 2003-09-17 09:40
#43490 #43490
User since
2003-08-11
409 Artikel
BenutzerIn
[default_avatar]
[quote=Barbara,16.09.2003, 18:55]Hallo Robby,

vielen Dank für Deine Hilfe - funktioniert super!
Na ja, ich muß wohl noch viel lernen,
bin ja noch eine Anfängerin.

bis dann

Barb[/quote]
Bitte schön, ist ja kein Problem, jeder hier hat mal klein angefangen und dafür ist das Forum ja da :D
Kaum macht man es richtig - schon funktioniert es!
Crian
 2003-09-21 23:58
#43491 #43491
User since
2003-08-04
5866 Artikel
ModeratorIn
[Homepage]
user image
@Barbara: Benutze lieber nicht die Option -w in der Shebang, sondern statt dessen lieber use warnings;. Im Unterschied zur Option -w schaltetet dieses Pragma die Warnungen nur im Skript an, in dem es steht, das ist gerade in Verbindung mit Tk hilfreich, da man sonst viele Tk-Modul-Warnungen bekommt, da dies Modul nicht warnungsfrei geschrieben ist.


[quote=Robby,16.09.2003, 14:33](Wird etwas unsauber beim Übergang von Zeile 9 nach 10 und 99 nach 100 usw.)
Code: (dl )
1
2
[...]
print NEU "$zeile $_";
[/quote]
Dann verwende doch printf NEU "%s %5d", $zeile, $_;\n\n

<!--EDIT|Crian|1064174532-->
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
<< |< 1 2 3 4 >| >> 31 Einträge, 4 Seiten



View all threads created 2003-09-16 00:10.