Array - elemente löschen - weniger als 3 Zeichen, ohne Zahlen!
Jonas
- perl
Hallo
Ich habe ein kleines Porblem:
Ich habe einen Array. Nun will ich alle Elemente löschen, die weniger als 3 Zeichen haben, falls dies buchstaben sind. Wenn es aber zahlen sind, sollen die elemente belassen werden.
Wennn ich alle Elemente löschen will, die kleiner als 3 Zeichen haben, so kann ich das laut einem Tipp so machen:
my @new_ary = grep { length($_) > 3 } @old_ary;
Was ist nun aber, wenn ich die Zahlen stehen lassen will? Wo/wie kann ich diese Bedingung zusätzlich einfügen?
Gruss und Dank
Jonas
Hallo Jonas,
Ich habe einen Array. Nun will ich alle Elemente löschen, die weniger als 3 Zeichen haben, falls dies buchstaben sind.
Und warum bleibst du nicht in deinem 1. Thread (->[pref:t=74630&m=429897])?
Grüße aus Nürnberg
Tobias
Hallo Jonas,
Und warum bleibst du nicht in deinem 1. Thread (->[pref:t=74630&m=429897])?Grüße aus Nürnberg
Tobias
Sorry, ich hab mein altes Thema nicht wieder gefunden (Trotz ctrl-f und suche nach meinem namen)
Mein Fehler!
Eine Antwort ( in welchem Thema auch immer ) wäre trotzdem cool ;)
Gruss
jonas
use Mosche;
Ich habe einen Array. Nun will ich alle Elemente löschen, die weniger als 3 Zeichen haben, falls dies buchstaben sind. Wenn es aber zahlen sind, sollen die elemente belassen werden.
Wennn ich alle Elemente löschen will, die kleiner als 3 Zeichen haben, so kann ich das laut einem Tipp so machen:
my @new_ary = grep { length($_) > 3 } @old_ary;
Was ist nun aber, wenn ich die Zahlen stehen lassen will? Wo/wie kann ich diese Bedingung zusätzlich einfügen?
Schon mal bei 'perldoc -f grep' nachgeschaut? Nein? Dann tu das jetzt.
Damit du mal selbst darauf kommen kannst, solltest du in der Langform anfangen:
my @old_array ( 1 .. 4, "sdf", "rdsfg");
my @new_array;
foreach (@old_array) {
if ((/\w/ && length($_) > 3) or /^\d+$/) {
push @new_array, $_;
}
}
Zu deiner Frage:
Die Bedingung, ob ein Element aus dem alten Array in das neue übernommen werden soll, steht in den geschweiften Klammern nach grep.
use Tschoe qw(Matti);
Hallo Matti,
if ((/\w/ && length($_) > 3) or /^\d+$/) {
if(length($_) > 3 || /^\d+$/) reicht völlig :-)
Grüße,
CK
Danke euch allen!
Gruss
Jonas
use Mosche;
if ((/\w/ && length($_) > 3) or /^\d+$/) {
if(length($_) > 3 || /^\d+$/) reicht völlig :-)
Es ging ja auch darum, dass Prinzip klarzumachen.
Anzumerken (und als HA dem Fragesteller zu überlassen) ist noch, dass /^\d+$/ zur Erkennung von beliebigen Zahlen ungeignet ist, es dient höchstens zur Erkennung von Int-Werten, wobei ich in einem solchen Fall gilt:
/^\d+$/ <=> ($_ eq '0' || int($_) != 0)
und letzteres wohl wesentlich schneller sein sollte.
use Tschoe qw(Matti);