Schrift
[thread]3537[/thread]

Datei durchsuchen und ergänzen



<< |< 1 2 >| >> 19 Einträge, 2 Seiten
f1database
 2005-02-16 18:11
#32997 #32997
User since
2005-02-16
5 Artikel
BenutzerIn
[default_avatar]
Hallo zusammen,

leider konnte mir die Forensuche nicht sonderlich helfen und da ich ein absoluter Noob in Sachen Perl bin kommt hier dann auch gleich mein Frage.

Ich habe eine Datei (ini) und möchte diese nach einem bestimmten String durchsuchen. Wenn dieser gefunden wird soll an diesen String etwas angehängt werden.
Soll also ungefähr so aussehen.

Vorher:
Eintrag=;

Nachher:
Eintrag="Hallo";

Wäre schön wenn mir das einer erklären könnte wie ich das mache.

Dankeschön schon mal.
renee
 2005-02-16 18:18
#32998 #32998
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
use Tie::File;
use strict;
use warnings;

my $file = '/path/to/file.ini';
tie my @array,'Tie::File',$file or die $!;
foreach my $line(@array){
if($line =~ /DEIN_MUSTER/){
chomp $line;
$line .= "Anhang\n";
}
}
untie @array;
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/
Rambo
 2005-02-16 18:45
#32999 #32999
User since
2003-08-14
803 Artikel
BenutzerIn

user image
und was mueste man machen wenn hallo schon existiert
aber durch hiho ersetzt werden muss?

merci rambo
f1database
 2005-02-16 18:53
#33000 #33000
User since
2005-02-16
5 Artikel
BenutzerIn
[default_avatar]
Dankeschön.

Habe nun folgendes geschrieben:

Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
    use Tie::File;
   use strict;
   use warnings;

   my $file = '$zielverzeichnis/hypohall/ibb42.ini';
   tie my @array,'Tie::File',$file or die $!;
   foreach my $line(@array)
   {
    if($line =~ /DatenPfad/)
    {
       chomp $line;
       $line .= "$zielverzeichnis\n";
    }
   }
   untie @array;

Ich will also nach dem Eintrag Datenpfad den Inhalt der Variablen zielverzeichnis eintragen lassen.
Diese ist auch ausserhalb der Subroutine declariert und gefüllt.
Leider bekomme ich nun folgende Fehlermeldung:

"Variable "$zielverzeichnis" is not imported at ...

Nun bin ich auf eure Ratschläge angwiesen.

[esskar]Code-Tags spendiert[/esskar]\n\n

<!--EDIT|esskar|1108572996-->
renee
 2005-02-16 19:33
#33001 #33001
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
mach hier:
Code: (dl )
   my $file = '$zielverzeichnis/hypohall/ibb42.ini';


aus den ' ein "
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
 2005-02-16 19:34
#33002 #33002
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
Und Du musst $zielverzeichnis natürlich vorher deklarieren und initialisieren...
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/
f1database
 2005-02-17 10:28
#33003 #33003
User since
2005-02-16
5 Artikel
BenutzerIn
[default_avatar]
Danke für die schnellen Antworten ab so richtig weitergekommen bin ich nicht.

Um euch zu helfen mir hlfen zu können ist es wahrscheinlich das beste, dass ich den ganzen Sourcecode mal poste:

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
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
179
180
181
182
183
184
185
186
187
#!/usr/local/bin/perl -w

#Installation des Hypofix-Datenverzeichnisses auf einen File-Server
#Bitte die einzelnen Schritte beachten

#Schritt 1
#Quellverzeichnis angeben

$quellverzeichnis = "./Dat";

#Schritt 2
#Zielverzeichnis angeben

$zielverzeichnis = "./Ziel";

#Schritt 3
#Programmverzeichnis angeben

$progverzeichnis = "./Prg";

################################################################
################################################################
#(NICHT AENDERN!)

################################################################
#Subroutine für Datumsstempel
sub Datumsstempel
{
($sec,$min,$hour,$mday,$mon,$year,$wday,$ydat,$isdst)=localtime();
$jahr=$year;
$monat=$mon+1;
$tag=$mday;
$jahr=$year;

$jahr=$year +1900;

if (length($monat) == 1)
{
$monat="0$monat";
}
if(length($tag) == 1)
{
$tag="0$tag";
}
$sec = 0;
$min = 0;
$hour = 0;
$wday = 0;
$isdst = 0;
$ydat = 0;

$Datum=$tag."_".$monat."_".$jahr;
}

################################################################
#Subroutine für Zeitstempel
sub Zeitstempel
{
($sec,$min,$hour,$mday,$mon,$year,$wday,$ydat,$isdst)=localtime();
$sekunde=$sec;
$minute=$min;
$stunde=$hour;

if (length($sekunde) == 1)
{
$sekunde="0$sekunde";
}
if(length($minute) == 1)
{
$minute="0$minute";
}
if(length($stunde) == 1)
{
$stunde="0$stunde";
}

$time = 0;
$time=($sekunde, $minute, $stunde) = (localtime);
$sek = $sekunde;
$minu = $minute;
$stun = $stunde;
$Zeit = $stun.":".$minu.":".$sek;
}

################################################################
#alte Logdatei entfernen
if (-e "copy.log")
{
system ("rm -f copy.log");
}

################################################################
#Datenverzeichnis von Windows in Unix-format konvertieren
system ("dos2unix ./$quellverzeichnis/*.*");

################################################################
#Logdatei öffnen und Eingabedaten übertragen:
open(LOGDATEI,">copy.log") or die $!;
Zeitstempel;
print LOGDATEI "##############################################################\n";
print LOGDATEI "Start des Kopiervorgangs: $Zeit \n\n";
print "##############################################################\n";
print "Start des Kopiervorgangs: $Zeit \n\n";
print LOGDATEI "Quellverzeichnis: $quellverzeichnis \n";
print LOGDATEI "Zielverzeichnis: $zielverzeichnis \n";
close LOGDATEI;

################################################################
#Subroutine für Befehl ausführen und loggen
sub ExecuteWithLogging
{
open(LOG,"$_[0] |") or die $!;
while(<LOG>)
{
print LOGDATEI $_;
}
}

################################################################
#Copyjob

open(LOGDATEI,">>copy.log") or die $!;
Zeitstempel;
print LOGDATEI "##############################################################\n";
print LOGDATEI "Start des Kopiervorgangs: $Zeit \n";
print "##############################################################\n";
print "Start des Kopiervorgangs: $Zeit \n";
system ("cp -f-a $quellverzeichnis $zielverzeichnis");
close LOGDATEI;

###############################################################
#IBB42.ini Datei anpassen

use Tie::File;
use strict;
use warnings;

my $file = "$zielverzeichnis/hypohall/ibb42.ini";
tie my @array,'Tie::File',$file or die $!;
foreach my $line(@array)
{
if($line =~ /DatenPfad/)
{
chomp $line;
$line .= "$zielverzeichnis\n";
}
}
untie @array;

foreach my $line(@array)
{
if($line =~ /ServerDatenPfad/)
{
chomp $line;
$line .= "$zielverzeichnis\n";
}
}
untie @array;

################################################################
#Appl.ini Datei anzupassen

use Tie::File;
use strict;
use warnings;

$file = "$progverzeichnis/hypofix/appl.ini";
tie my @array,'Tie::File',$file or die $!;
foreach my $line(@array)
{
if($line =~ /Name/)
{
chomp $line;
$line .= "$zielverzeichnis\n";
}
}
untie @array;

foreach my $line(@array)
{
if($line =~ /ServerName/)
{
chomp $line;
$line .= "$zielverzeichnis\n";
}
}
untie @array;


Wenn ich das ausführe bekomme ich folgende Konsolenausgabe:

Variable "$zielverzeichnis" is not imported at datencopy.pl line 138.
Variable "$zielverzeichnis" is not imported at datencopy.pl line 145.
Variable "$zielverzeichnis" is not imported at datencopy.pl line 155.
Global symbol "$zielverzeichnis" requires explicit package name at datencopy.pl line 138.
Global symbol "$zielverzeichnis" requires explicit package name at datencopy.pl line 145.
Global symbol "$zielverzeichnis" requires explicit package name at datencopy.pl line 155.
BEGIN not safe after errors--compilation aborted at datencopy.pl line 163.

Bin dankbar für jeden Vorschlag auch was eventuell den ganzen Aufbau des Skriptes betrifft. Wenn es geht wäre ich ich dankbar für Erklärungen, warum weshalb welche Änderungen.
Ishka
 2005-02-17 10:56
#33004 #33004
User since
2003-08-04
771 Artikel
HausmeisterIn
[Homepage] [default_avatar]
Was die Warnungen betrifft:

die werden durch use strict; bzw use warnings; erzeugt, um auf mögliche Programmierfehler hinzuweisen. Und wenn man eine Variable verwendet, die man vorher nie verwendet hat, ist das häufig ein schreibfehler. Darum muß man, wenn man wirklich eine neue Variable verwenden will, diese mit my deklarieren, also zum Beispiel:
Code: (dl )
1
2
3
my $hallo="Welt";
print $hallo; # geht einwandfrei
$halo="jaja"; # Programm bricht ab, da $halo mit nur einem l unbekannt ist


Die verwendung von strict und warnings ist also auf jeden Fall zu empfehlen, auch im ersten Programmteil, wo du das noch nicht hast und die fehlermeldungen und warnungen bekommst du weg, indem du beim ersten Verwenden einer Variablen ein my davorstellst.
sub z{if(@_){1while$x[$k=rand 10];t($t=$x[$k]=1)}print map"$z[$x[$_]]$_".($_%3?
"":"\n"),1..9}sub t{$j=0;$x[$_+1]==$t&&($j+=2**$_)for 0..8;z,die"Gewinner $z[$t]
"if grep$_==($j&$_),7,56,73,84,146,273,292,448;z,die"Gleichstand\n"if@x>9&&!grep
!$_,@x}@x=4;@z=qw{. [ (};z$^T&1;while(<>){next if$_>9||$x[$_];t$t=$x[$_]=2;z 1}
renee
 2005-02-17 11:02
#33005 #33005
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
Ich habe mal etwas aufgeräumt:
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
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
#!/usr/local/bin/perl

use Tie::File;
use strict;
use warnings;

#Installation des Hypofix-Datenverzeichnisses auf einen File-Server
#Bitte die einzelnen Schritte beachten

#Quellverzeichnis angeben
my $quellverzeichnis = "./Dat";

#Zielverzeichnis angeben
my $zielverzeichnis = "./Ziel";

#Programmverzeichnis angeben
my $progverzeichnis = "./Prg";

######################
#(NICHT AENDERN!)

######################
#Subroutine für Datumsstempel
sub Datumsstempel{
 my ($mday,$mon,$year)=(localtime(time))[3,4,5];
 my $Datum = sprintf("%02d_%02d_%04d",$mday,$mon+1,$year+1900);
 return $Datum
}

######################
#Subroutine für Zeitstempel
sub Zeitstempel{
 my ($sec,$min,$hour)=(localtime(time))[0..2];
 my $zeit = sprintf("%02d:%02d:02d",$hour,$min,$sec);
 return $zeit;
}

######################
#alte Logdatei entfernen
unlink('copy.log') if (-e "copy.log");

######################
#Datenverzeichnis von Windows in Unix-format konvertieren
system ("dos2unix ./$quellverzeichnis/*.*");

######################
#Logdatei öffnen und Eingabedaten übertragen:
open(LOGDATEI,">copy.log") or die $!;
my $zeit = Zeitstempel();
print LOGDATEI "############################\n";
print LOGDATEI "Start des Kopiervorgangs: $zeit \n\n";
print "###############################\n";
print "Start des Kopiervorgangs: $zeit \n\n";
print LOGDATEI "Quellverzeichnis: $quellverzeichnis \n";
print LOGDATEI "Zielverzeichnis: $zielverzeichnis \n";
close LOGDATEI;

######################
#Copyjob

open(LOGDATEI,">>copy.log") or die $!;
my $Zeit = Zeitstempel();
print LOGDATEI "#######################\n";
print LOGDATEI "Start des Kopiervorgangs: $Zeit \n";
print "#############################\n";
print "Start des Kopiervorgangs: $Zeit \n";
system ("cp -f-a $quellverzeichnis $zielverzeichnis");
close LOGDATEI;

#####################
#IBB42.ini Datei anpassen

my $file = "$zielverzeichnis/hypohall/ibb42.ini";
tie my @array,'Tie::File',$file or die $!;
foreach my $line(@array){
if($line =~ /DatenPfad/){
   chomp $line;
   $line .= "$zielverzeichnis\n";
}
elsif($line =~ /ServerDatenPfad/){
    chomp $line;
   $line .= "$zielverzeichnis\n";
}
}
untie @array;

######################
#Appl.ini Datei anzupassen

$file = "$progverzeichnis/hypofix/appl.ini";
tie my @lines2,'Tie::File',$file or die $!;
foreach my $line(@lines2){
if($line =~ /Name/){
   chomp $line;
   $line .= "$zielverzeichnis\n";
}
elsif($line =~ /ServerName/){
    chomp $line;
   $line .= "$zielverzeichnis\n";
}
}
untie @array;
\n\n

<!--EDIT|renee|1108631778-->
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/
f1database
 2005-02-17 12:19
#33006 #33006
User since
2005-02-16
5 Artikel
BenutzerIn
[default_avatar]
Vielen Dank!

Habt mir sehr geholfen.
<< |< 1 2 >| >> 19 Einträge, 2 Seiten



View all threads created 2005-02-16 18:11.