Thread Probleme bei File - Handler - Änderung einer Zeile (13 answers)
Opened by YAPD at 2016-02-21 23:19

YAPD
 2016-02-21 23:19
#183959 #183959
User since
2015-09-20
146 Artikel
BenutzerIn

user image
Guten Abend,

ich programmiere zur Zeit ein Script, über das ich in
einer Tk Oberfläche bestimmte Werte speichere. In diesem
Thread geht es aber nur um die Übergabe der Werte.


Ich habe also als Basis für die Speicherung die Werte der
Felder in meinem Hash & übergebe dieses als Referenz an die
Sub - Routine "Speicherung_Testumgebung" :

Code: (dl )
1
2
3
4
5
6
7
my %Testumgebung = ( MAILING_SERVER_ADRESSE     => $Mailing_Server_Adresse_Eintrag  -> get( )  ,
MAILING_SERVER_PORT => $Mailing_Server_Ports_Eintrag -> get( ) ,
MAILING_SERVER_SECURITY => $Mailing_Server_Security_Eintrag -> Subwidget( "entry" ) -> get( ) ,
MAILING_SERVER_DEBUG_MODUS => $Mailing_Server_Debug_Modus_Eintrag ,
);

&Speicherung_Testumgebung( \%Testumgebung )


In der Sub - Routine habe ich folgende Struktur :

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
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
sub Speicherung_Testumgebung {

my %Speicherung_Hashes = %{ $_[ 0 ] };

foreach my $name ( sort keys %Speicherung_Hashes )
{
# printf "%-8s %s\n" , $name , $Speicherung_Hashes{ $name };

print "Werte des Hashes : $Speicherung_Hashes{ $name }" , "\n";

my $file = "test.txt";
local *CF;

open( CF , '<'. $file ) or die "Open $file: $!";
read( CF, my $data , -s $file );
close( CF );

my @lines = split( /\015\012|\012|\015/ , $data );
my $config = { };
my $Zaehler_Zeile = 0;

foreach my $line( @lines )
{
$Zaehler_Zeile++;

next if( $line =~ /^\s*#/ );
next if( $line !~ /^\s*\S+\s*=.*$/ );

my ( $key , $value ) = split( /=/ , $line , 2 );

# Remove whitespaces at the beginning and at the end

$key =~ s/^\s+//g;
$key =~ s/\s+$//g;
$value =~ s/^\s+//g;
$value =~ s/\s+$//g;

# print "Keys : $key" , "\n";
# print "Values : $value" , "\n";

if( $key eq $name )
{
print "Treffer" , "\n";
print "\n";

print "Ersetze Werte ..." , "\n";

my $datei = "test.txt";
my $quellwort = "$value";
my $zielwort = "$Speicherung_Hashes{ $name }";

print "Vorhandene Variable : $value" , "\n";
print "Ersetzende Variable : $Speicherung_Hashes{ $name }" , "\n";

my @Zeilen;

open( DATEI , "$datei" );
while ( <DATEI> ) { push @Zeilen, $_; }
close(DATEI);

foreach ( @Zeilen ) { $_ =~ s/$quellwort/$zielwort/; }

open(DATEI, ">$datei" );
foreach ( @Zeilen ) { print DATEI "$_"; }
close(DATEI);
}
}
}

}


Um Grunde ist die Sub - Routine so in Ordnung. Drücke ich auf der
TK - Oberfläche auf die Schaltfläche , speichert er die aktuellen
Werte aus den Feldern in die Datei :

Inhalte der Datei test.txt :

------
MAILING_SERVER_ADRESSE = smtp.gmail.com
MAILING_SERVER_PORT = 487
MAILING_SERVER_SECURITY = PLAIN
MAILING_SERVER_DEBUG_MODUS = 1

SSL_SERVER_ADRESSE = 127.0.0.1
SSL_SERVER_PORT = 8000
------

Nun habe ich das Problem, dass das Script so bei
der Änderung des Wertes für MAILING_SERVER_DEBUG_MODUS
von 1 auf 0 plötzlich aus dem Wert "127.0.0.1" nun den
Wert "027.0.0.1" macht, bzw. bei der Änderung von 0
auf 1 ändert er den Wert von "127.0.0.1" zu "127.1.0.1" ?

Ich weiss, dass hier irgendwo der Wurm drin ist, aber
ich finde ihn nicht :-(

Habt ihr vielleicht eine Idee ?

Vielen Dank im Voraus !!

Viele Grüße
YAPD
Yet Another Perl Developer

View full thread Probleme bei File - Handler - Änderung einer Zeile