Schrift
Wiki:Tipp zum Debugging: use Data::Dumper; local $Data::Dumper::Useqq = 1; print Dumper \@var;
[thread]5797[/thread]

Array elegant überprüfen?

Leser: 1


<< >> 10 Einträge, 1 Seite
skontox
 2003-10-04 12:31
#60649 #60649
User since
2003-08-06
193 Artikel
BenutzerIn
[default_avatar]
Guten Morgen!
Wie kann ich elegant überprüfen, ob ein Array verschiedene Einträge enthält. Kann ich das auch ohne Flags lösen?

Es geht darum, dass ich gewährleisten muß, dass spezielle Werte in dem Array vorhanden sein müssen. Und wenn das nicht der Fall sein sollte muß ich herausbekommen welche Werte nicht vorhanden sind um eine Fehlermeldung herauszugeben, die genau zurück gibt, welcher Datensatz fehlt.

z.B.: Muß ich überprüfen, ob "Name","Vorname","Strasse","Plz","Ort" in dem Array vorkommen. Wenn nicht gibt es eine Fehlermeldung.

Ich würde das jetzt komliziert mit Flags lösen.
Habt Ihr vielleicht ne elegantere Lösung.

Gruß skontox
Strat
 2003-10-04 12:43
#60650 #60650
User since
2003-08-04
5246 Artikel
ModeratorIn
[Homepage] [default_avatar]
wie genau kann das array aussehen?
perl -le "s::*erlco'unaty.'.dk':e,y;*kn:ai;penmic;;print"
http://www.fabiani.net/
skontox
 2003-10-04 12:57
#60651 #60651
User since
2003-08-06
193 Artikel
BenutzerIn
[default_avatar]
Das Array ist ein eindimensionales Array!

Es würde z.B so aussehen:

@werte=("Name","Vorname");
und nun würde es geprüft werden, ob "Name","Vorname","Strasse","Plz" oder "Ort" enthalten sind,
Wenn nicht gibt es eine Fehlermeldung mit dem fehlenden Value. Eigentlich ist das auch nicht schwierig, aber ich würde das mit Flags gewährleisten, aber vielleicht geht das auch eleganter.

Gruß skontox\n\n

<!--EDIT|skontox|1065258245-->
havi
 2003-10-04 13:29
#60652 #60652
User since
2003-08-04
2036 Artikel
BenutzerIn
[Homepage]
user image
[quote=skontox,04.10.2003, 10:57]Das Array ist ein eindimensionales Array!

Es würde z.B so aussehen:

@werte=("Name","Vorname");
und nun würde es geprüft werden, ob "Name","Vorname","Strasse","Plz" oder "Ort" enthalten sind,
Wenn nicht gibt es eine Fehlermeldung mit dem fehlenden Value. Eigentlich ist das auch nicht schwierig, aber ich würde das mit Flags gewährleisten, aber vielleicht geht das auch eleganter.

Gruß skontox[/quote]
Das ist genau mein Gebiet...

Hast du dir schon mal genau Gedanken darüber gemacht?

Wie willst du das so einfach machen?

Wie willst du überprüfen ob es sich um einen gültigen Vornamen handelt!
Hast du eine Vornamenstabelle?

Weiter zum Namen...
Was darf alles ein Name sein?
Nur Zuname/Familienname oder auch Firmennamen ?

Gehen wir weiter zur Plz.
Hast du eine gültige Plz-Tabelle mit der du die gültigen Eintäge rausfiltern kannst?
Dürfen nur deutsche Plz vorkommen oder auch ausländische?
Wenn auch ausländische, dann funzt es so nicht!
Dann brauchst du nämlich auch das Lkz dazu und seit neuen
gibt es eine neue Postvorschrift wo du auch die Landestabelle benötigst!

Gehen wir nun weiter zum Ort.
Was ist wenn im Ort die Hausnummer mit drin steht?
Bsp.: Ort 9 und die Strasse ist leer?
Dann solltest du das 9 aus dem Ort in die Strasse stellen und natürlich gleich Nr. davor damit es auch nach etwas aussieht...
Was ist wenn der Ort leer ist?
Dann solltest du ihm gleich anhand der Plz/Ort Tabelle setzen können!

Nun zur Strasse!
Was ist wenn die Strasse leer ist bzw. wenn die Nummer im Ort steht (wie schon oben beschrieben)?
Was ist wenn die Strasse aber gar nicht leer sein darf?
In grossen Städten zum Beispiel ???

Fragen über Fragen!!!

... und das war noch lange nicht alles :)

Gruss
skontox
 2003-10-04 13:59
#60653 #60653
User since
2003-08-06
193 Artikel
BenutzerIn
[default_avatar]
Hallo havi!
Schönen Dank für Deine ausführlichen Beitrag!
Vielleicht hab ich mich auch nicht richtig ausgedrückt. Das will ich alles gar nicht herausbekommen. Das wäre ja schon etwas aufwendiger.

Ich muß nur überprüfen, ob das Array den genauen Textstring
"Name", "Vorname",... (siehe oben) enthält. Der Fehler lag aber an meiner Fragestellung ("gültigen Wert"). Das gebe ich zu :-)
Das tut mir leid. Mit gültigen Wert meine ich, ob er den String enthält oder nicht. Also alles ganz einfach.
Momentan hab ich das ganz billig und nicht elegant gelöst:

Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
$flg_enth=0;
if(@selected_item){
   for (@selected_item){
         if($_ eq "Nachname"){
            $flg_enth=1;
         }
   }
   if($flg_enth==0){
      &zeige_messageBox("error","OK","Sie haben keinen Titel Nachnamen ausgewählt!");
   }
   $flg_enth=0;
}
...


Gruß skontox
Strat
 2003-10-04 14:07
#60654 #60654
User since
2003-08-04
5246 Artikel
ModeratorIn
[Homepage] [default_avatar]
Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
my @wantedItems = qw(vorname nachname wohnort);
my %countHash = ();
@countHash{@wantedItems} = ();

foreach (@liste) { zaehlen
$countHash{$_}++;
}

foreach (keys %countHash) { # ausgabe ermitteln
unless ($countHash{$_}) {
print "$_ wurde nicht angegeben\n";
}
elsif ($countHash{$_} == 1) {
print "$_ wurde einmal angegeben\n";
}
else {
print "$_ wurde $countHash{$_} Mal angegeben\n";
}
} # foreach
perl -le "s::*erlco'unaty.'.dk':e,y;*kn:ai;penmic;;print"
http://www.fabiani.net/
havi
 2003-10-04 14:11
#60655 #60655
User since
2003-08-04
2036 Artikel
BenutzerIn
[Homepage]
user image
[quote=skontox,04.10.2003, 11:59]Schönen Dank für Deine ausführlichen Beitrag![/quote]
Bitteschön!
skontox
 2003-10-04 14:15
#60656 #60656
User since
2003-08-06
193 Artikel
BenutzerIn
[default_avatar]
Das sieht doch gut aus!
Besten Dank!

Gruß skontox
foobar
 2003-10-04 14:25
#60657 #60657
User since
2003-08-04
69 Artikel
BenutzerIn
[default_avatar]
Ich würd das so machen:
Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#!/usr/bin/perl -w
use strict;

my @wanted = qw (Name Vorname Strasse Plz Ort);
my @daten = qw (Name Vorname Strasse);
my @not_defined = ();

for my $wanted (@wanted)
{
unless (grep (/$wanted/,@daten) > 0)
{
push (@not_defined,$wanted);
}
}


@not_defined ? print "Folgende Eintraege sind nicht enthalten " . join ", ",@not_defined : print "Alle Eintraege sind enthalt
The three chief virtues of a programmer are: Laziness, Impatience and Hubris
[Larry Wall]
foobar
 2003-10-04 14:59
#60658 #60658
User since
2003-08-04
69 Artikel
BenutzerIn
[default_avatar]
Oder so:
Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
#!/usr/bin/perl -w
use strict;

my @wanted = qw (Name Vorname Strasse Plz Ort);
my @daten = qw (Name Vorname Strasse);
my @not_defined = ();

my %daten=();
@daten{@daten}=1;

@not_defined = grep {not exists $daten{$_}} @wanted;


@not_defined ? print "Folgende Eintraege sind nicht enthalten: " . join ", ",@not_defined : print "Alle Eintraege sind enthal
The three chief virtues of a programmer are: Laziness, Impatience and Hubris
[Larry Wall]
<< >> 10 Einträge, 1 Seite



View all threads created 2003-10-04 12:31.