Schrift
[thread]7718[/thread]

Suchen/Ersetzen Problem

Leser: 1


<< >> 7 Einträge, 1 Seite
nikster77
 2006-02-19 02:39
#63084 #63084
User since
2006-02-08
26 Artikel
BenutzerIn
[default_avatar]
Hallo zusammen.
Ich habe mal wieder ein Problem...
und zwar wuerde ich gerne mehrere Begriffe, die ich aus einer Liste einlesen moechte, in einem Text ersetzen.

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
#!/usr/bin/perl

use warnings;
open(DATEI,"<", "altedatei") || die "Datei nicht gefunden";
while(<DATEI>)
{
chomp;
push(@my_array,$_);
}
close(DATEI);

open (DATA, "datei") || die "konnte die Datei nicht oeffnen\n";
#Solange noch etwas in der Datei steht, fuehre sed-Aktion aus
while (<DATA>)
{
$_ =~ s/$my_array/$replace/g;
push(@datei, $_);
}
#Die Datei wird nach der Bearbeitung geschlossen.
close (DATA);
#Die Datei wird zum schreiben geoeffnet
open (WRITE, ">datei.neu") || die "konnte Datei nicht beschreiben\n";
#Die Datei wird mit dem Inhalt des Arrays ueberschrieben.
print WRITE @content;
#die fertige Datei wird geschlossen.
close (WRITE);


Leider meckert mir Perl diese Zeile:
$_ =~ s/$my_array/$replace/g;

als:
Use of uninitialized value in regexp compilation at replacer.pl line 61, <DATA> line 368.

Weiss jemand warum?

Danke schonmal.
renee
 2006-02-19 02:47
#63085 #63085
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
Ein eindeutiger Fall von: "benutze Wiki:use strict"

$replace existiert noch nicht, ist also auch nicht initialisiert... Auch $my_array gibt es nicht. Du hast vorher ein Array mit dem Bezeichner my_array, aber dann versuchst Du ein Skalar mit dem Bezeichner zu verwenden... Was Du wahrscheinlich haben willst ist:
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
#!/usr/bin/perl

use strict;
use warnings;

my @my_array;
my $replace = "neuer Wert";

open(DATEI,"<", "altedatei") || die "Datei nicht gefunden";
while(<DATEI>){
chomp;
push(@my_array,$_);
}
close(DATEI);

my $string = join("|",@my_array);
my $regex = qr{$string};

open (DATA, "datei") || die "konnte die Datei nicht oeffnen\n";
#Solange noch etwas in der Datei steht, fuehre sed-Aktion aus
while (<DATA>){
$_ =~ s/$regex/$replace/g;
push(@datei, $_);
}
#Die Datei wird nach der Bearbeitung geschlossen.
close (DATA);

#Die Datei wird zum schreiben geoeffnet
open (WRITE, ">","datei.neu") || die "konnte Datei nicht beschreiben\n";
#Die Datei wird mit dem Inhalt des Arrays ueberschrieben.
print WRITE @content;
#die fertige Datei wird geschlossen.
close (WRITE);
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/
nikster77
 2006-02-19 03:24
#63086 #63086
User since
2006-02-08
26 Artikel
BenutzerIn
[default_avatar]
Danke für deine schnelle Antwort,
leider muss die "replace"-Variable sich aus den Werten (Zeile für Zeile) aus dem array zusammensetzen.

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
#!/usr/bin/perl

#use strict;
use warnings;

my @my_array;
my $replace = "$my_array".'@'."xy.de";

open(DATEI,"<", "altedatei") || die "Datei nicht gefunden";
while(<DATEI>){
chomp;
push(@my_array,$_);
}
close(DATEI);

my $string = join("|",@my_array);
my $regex = qr{$string};
my $replace = "$array".'@'."xy.de";

open (DATA, "datei") || die "konnte die Datei nicht oeffnen\n";
#Solange noch etwas in der Datei steht, fuehre sed-Aktion aus
while (<DATA>){
$_ =~ s/$regex/$replace/g;
push(@datei, $_);
}
#Die Datei wird nach der Bearbeitung geschlossen.
close (DATA);

#Die Datei wird zum schreiben geoeffnet
open (WRITE, ">","datei.neu") || die "konnte Datei nicht beschreiben\n";
#Die Datei wird mit dem Inhalt des Arrays ueberschrieben.
print WRITE @datei;
#die fertige Datei wird geschlossen.
close (WRITE);


wenn ich es so mache stirbt das Prog mit folgendem Fehler:

Name "main::my_array" used only once: possible typo at replacer2.pl line 7.
Use of uninitialized value in string at replacer2.pl line 7.

Aber es muss sich die Werte in my_array einlesen und dann Wert fuer Wert in regex _und_ replace einsetzen... :(
Code: (dl )
\n\n

<!--EDIT|nikster77|1140312356-->
renee
 2006-02-19 03:31
#63087 #63087
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
Was willst Du machen?? Lass mal lieber das Wiki:use strict drin.

Was soll $my_array sein??

Beschreib ma am besten mit Beispieldaten, was Du machen moechtest. Das ist bis jetzt etwas konfus...
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
 2006-02-19 03:35
#63088 #63088
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
Ich habe gerade nochmal drueber geschaut. Anscheinend hast Du eine Datei mit Namen und moechtest in einer neuen Datei einfach die entsprechende E-Mail-Adresse dazu speichern...

Willst Du einen Namen durch die entsprechende E-Mail-Adresse ersetzen?? Dann machst Du am besten folgendes
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
#!/usr/bin/perl

use strict;
use warnings;

my @my_array;
my $file = 'datei';
my $old_file = 'altedatei';
my $new_file = 'neuedatei';
my @datei;

open(DATEI,"<", $old_file) || die "$old_file: $!";
while(<DATEI>){
  chomp;
  push(@my_array,$_);
}
close(DATEI);

my $string = join("|",@my_array);
my $regex = qr{$string};

open (DATA, "<",$file) || die "$file: $!";
while (<DATA>){
  $_ =~ s/($regex)/$1.@xy.de/g;
  push(@datei, $_);
}
#Die Datei wird nach der Bearbeitung geschlossen.
close (DATA);

#Die Datei wird zum schreiben geoeffnet
open (WRITE, ">",$new_file) || die "$new_file: $!";
#Die Datei wird mit dem Inhalt des Arrays ueberschrieben.
print WRITE @datei;
#die fertige Datei wird geschlossen.
close (WRITE);


Edit: Code ein wenig "aufgeraeumt"\n\n

<!--EDIT|renee|1140313070-->
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/
nikster77
 2006-02-19 15:41
#63089 #63089
User since
2006-02-08
26 Artikel
BenutzerIn
[default_avatar]
Danke, das war genau das was ich gesucht habe :)

Gut das du aus meinem Gefasel von gestern Nacht rausgefunden hast was ich gemeint habe... war schon spät. :>

Danke nochmal.
Crian
 2006-02-20 10:36
#63090 #63090
User since
2003-08-04
5870 Artikel
ModeratorIn
[Homepage]
user image
Lies Dir am besten mal den Link zu use strict durch, den renee gepostet hat.
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
<< >> 7 Einträge, 1 Seite



View all threads created 2006-02-19 02:39.