entfernen von $array[$i]
Markus Banach
- perl
0 kiliani0 Frank Schönmann0 Cheatah
Liebe Leser,
foreach (@array) {
if ( $_ =~ / ^$string/ ) {
$_ =~ s/^$string//;
# das ist meine "unschoene" Loesung, denn $array[$i] ist jetzt eine leere Zeile
# wie aber kann ich $array[$i] ganz aus dem array entfernen ?
} }
An dieser Stelle Vielen Dank fuer alle bisherigen Antworten die ich in diesem Forum erhalten habe .
Ich freue mich auf Ihre Beitraege !
Markus Banach
Liebe Leser,
$string wird ein Wert zugewiesen
foreach (@array) {
if ( $_ =~ / ^$string/ ) {
$_ =~ s/^$string//;
# das ist meine "unschoene" Loesung, denn $array[$i] ist jetzt eine leere Zeile
# wie aber kann ich $array[$i] ganz aus dem array entfernen ?
} }An dieser Stelle Vielen Dank fuer alle bisherigen Antworten die ich in diesem Forum erhalten habe .
Ich freue mich auf Ihre Beitraege !
Markus Banach
Hallo Markus,
1. Lösungsvorschlag:
lese die Datei (oder das Array @array) ohne die Zeile $string
auf ein neues Array...
Bsp.: Datei lesen ohne eine Zeile die "$string" beginnt
while (<HANDLER>){
if(!$_ =~ /^$string/){
push(@array_new, $_);
}
}
Mit @array_new kannst Du dann machen, was Du willst...
2. Lösungsvorschlag:
den Listeneintrag des @rrays ans Ende schieben mit "shift(@rray)" und dann löschen mit der Funktion "pop(@rray)".
Sicher gibts auch noch andere Lsg....
Für Rechtschreibfehler keine Haftung ;-)
Servus, kiliani
hi!
wie aber kann ich $array[$i] ganz aus dem array entfernen ?
splice
bye, Frank!
Hi,
splice wurde ja schon genannt, alternativ dazu kannst Du auch
@array = @array[0..$i-1,$i+1..$#array];
schreiben. Ich möchte hier aber mal Deinen Code ein wenig optimieren ;-)
foreach (@array) {
if ( $_ =~ / ^$string/ ) {
$_ =~ /.../ schreibt man einfach /.../, also:
if (/^$string/) { # wobei das Leerzeichen nach dem ersten / vermutlich ohnehin falsch ist
$_ =~ s/^$string//;
Dito, also einfach s/^$string//;
Allerdings wird s/x/y/ sowieso nur dann ausgeführt, wenn /x/, also ist die if-Anweisung unnötig... :-) Dein Code könnte also genausogut lauten:
foreach (@array) {
s/^$string//;
...
}
Das nur nebenbei. Natürlich führen wieder viele Wege nach Rom, Deiner ist nicht falsch - ich wollte es nur gesagt haben, weil hier die Optimierung förmlich ins Auge sticht ;-)
Cheatah
P.S.: Ich verwende bewußt auch lieber "$_ =~ /.../", weil man dann eher sieht, was passiert. Außerdem ersetze ich $_ gewöhnlich auch durch eine eigene Variable ("foreach $foo (@array)"), es ist einfach einsichtiger!