Anzahl rausfinden

Anzahl rausfinden

am 30.01.2006 15:25:45 von Frank Haschick

Hallo NG,

ich habe folgenden Quellcode:
foreach my $objItem (in $colItems)
{
print "ACTUAL: $objItem->{Name}\n";
};

Und der funktioniert ;)
Frage: wie bekomme ich in der Schleife die Anzahl der Elemente heraus?
(Hinweis: Hierbei gehts um Prozessoren. Für jeden Prozessor bekomme ich
einen Namen. Wie bekomme ich aber die Anzahl der Prozessoren heraus, ohne
hier noch eine Variable anzulegen?).

Irgendwie ist mir nicht so richtig klar wie das mit dem in $colItems
funktioniert, weil dort sollte ja ein Array stehen. Aber es geht ...

Viele Grüße

Frank

Re: Anzahl rausfinden

am 30.01.2006 15:39:24 von Joergen Lang

Frank Haschick schrieb:
> Hallo NG,
>
> ich habe folgenden Quellcode:
> foreach my $objItem (in $colItems)

Frage: was macht 'in'?
Kristallkugel::Simple::Antwort:

-> 'in' gibt ein durch '$colItems' referenziertes Array mit Objekten
zurueck.

> {
> print "ACTUAL: $objItem->{Name}\n";
> };
>
> Und der funktioniert ;)
> Frage: wie bekomme ich in der Schleife die Anzahl der Elemente heraus?

Wenn meine Kristallkugel recht hat

scalar @{ $colItems }

(nicht nur in der Schleife)

[...]

hth,

Joergen

Re: Anzahl rausfinden

am 30.01.2006 15:44:45 von Frank Haschick

> Frank Haschick schrieb:
>> Hallo NG,
>>
>> ich habe folgenden Quellcode:
>> foreach my $objItem (in $colItems)
>> [schnipp]
> scalar @{ $colItems }
> [schnapp]

Danke erstmal für die Erklärung.
Geht allerdings so leider nicht:
Not an ARRAY reference at winprotokoll2.pl line 31.
(line 31 ist deine Zeile ;))

Ich habe allerdings einen anderen Weg gefunden die Anzahl der Prozessoren
rauszufinden:
$ENV{'NUMBER_OF_PROCESSORS'} liefert den gewünschten Wert.

Nichtsdestotrotz wäre es interessant zu wissen wie ich an die Anzahl komme.

> hth,
Jap.
> Joergen

Danke!

Frank

Re: Anzahl rausfinden

am 30.01.2006 15:49:24 von Frank Seitz

Joergen Lang wrote:
> Frank Haschick schrieb:
>>
>>foreach my $objItem (in $colItems)
[...]
>>Frage: wie bekomme ich in der Schleife die Anzahl der Elemente heraus?
>
> Wenn meine Kristallkugel recht hat
>
> scalar @{ $colItems }

Wer sagt denn, dass $colItems eine Array-Referenz ist?
Ohne Kristallkugel würde ich empfehlen:

$n = scalar $a->in;

Aber besser _vor_ der Schleife die Anzahl einmal
ermitteln, da das effizienter ist.

Grüße
Frank
--
Dipl.-Inform. Frank Seitz; http://www.fseitz.de/
Tel: 04103/180301; Fax: -02; Industriestr. 31, 22880 Wedel

Re: Anzahl rausfinden

am 30.01.2006 15:52:58 von Frank Seitz

Frank Haschick wrote:

> Nichtsdestotrotz wäre es interessant zu wissen wie ich an die Anzahl komme.

$n = scalar $colItems->in;

Aber besser _vor_ der Schleife die Anzahl einmal
ermitteln, da das effizienter ist.

Grüße
Frank
--
Dipl.-Inform. Frank Seitz; http://www.fseitz.de/
Tel: 04103/180301; Fax: -02; Industriestr. 31, 22880 Wedel

Re: Anzahl rausfinden

am 30.01.2006 15:59:31 von Frank Seitz

Joergen Lang wrote:

> Wenn meine Kristallkugel recht hat
>
> scalar @{ $colItems }

Du machst hier die Annahme, dass $colItems eine
Arrayreferenz ist, womit Du über den inneren Aufbau
es Objektes spekulierst.

Grüße
Frank
--
Dipl.-Inform. Frank Seitz; http://www.fseitz.de/
Tel: 04103/180301; Fax: -02; Industriestr. 31, 22880 Wedel

Re: Anzahl rausfinden

am 30.01.2006 16:08:48 von Frank Haschick

"Frank Seitz" wrote in message
news:446nicFkcuiU2@individual.net...
> Frank Haschick wrote:
>
>> Nichtsdestotrotz wäre es interessant zu wissen wie ich an die Anzahl
>> komme.
>
> $n = scalar $colItems->in;
>
> Aber besser _vor_ der Schleife die Anzahl einmal
> ermitteln, da das effizienter ist.

*done*
Hmm ...
So richtig werd ich jetzt nicht schlau daraus.
Wenn ichs vor der Schleife mache, kommt der Fehler:
Win32::OLE(0.1703): GetOleEnumObject() Not a Win32::OLE::Enum object at
C:/Perl/site/lib/Win32/OLE/Lite.pm line 167.

Allerdings hat $n danach die Anzahl.
Nur läuft er meine Schleife nicht mehr durch. *wunder*

> Grüße
> Frank

Viele Grüße

Frank

Re: Anzahl rausfinden

am 30.01.2006 16:13:34 von Joergen Lang

Frank Seitz schrieb:
> Joergen Lang wrote:
>
>
>>Wenn meine Kristallkugel recht hat
>>
>>scalar @{ $colItems }
>
>
> Du machst hier die Annahme, dass $colItems eine
> Arrayreferenz ist, womit Du über den inneren Aufbau
> es Objektes spekulierst.

Ja. Deshalb schrieb ich "Wenn meine Kristallkugel recht hat".

J.

Re: Anzahl rausfinden

am 30.01.2006 16:20:39 von Frank Seitz

Frank Haschick wrote:

> Hmm ...
> So richtig werd ich jetzt nicht schlau daraus.
> Wenn ichs vor der Schleife mache, kommt der Fehler:
> Win32::OLE(0.1703): GetOleEnumObject() Not a Win32::OLE::Enum object at
> C:/Perl/site/lib/Win32/OLE/Lite.pm line 167.
>
> Allerdings hat $n danach die Anzahl.
> Nur läuft er meine Schleife nicht mehr durch. *wunder*

Klingt so, als könnte man die Methode nur einmal aufrufen. (?)
Das hätte dann aber was mit der speziellen API zu tun, nicht mit Perl.
TMTOWTDI-Vorschlag:

my @items = $colItems->in;
for my $objItem (@items)
{
my $n = @items;
...
}

Grüße
Frank
--
Dipl.-Inform. Frank Seitz; http://www.fseitz.de/
Tel: 04103/180301; Fax: -02; Industriestr. 31, 22880 Wedel

Re: Anzahl rausfinden

am 30.01.2006 16:35:38 von Frank Seitz

Joergen Lang wrote:
> Frank Seitz schrieb:
>>
>>Du machst hier die Annahme, dass $colItems eine
>>Arrayreferenz ist, womit Du über den inneren Aufbau
>>es Objektes spekulierst.
>
> Ja. Deshalb schrieb ich "Wenn meine Kristallkugel recht hat".

Ich dachte, wir befinden uns hier in einer Perl-Newsgruppe
und nicht in einem Wahrsagerei-Wettbewerb ;)

Grüße
Frank
--
Dipl.-Inform. Frank Seitz; http://www.fseitz.de/
Tel: 04103/180301; Fax: -02; Industriestr. 31, 22880 Wedel

Re: Anzahl rausfinden

am 31.01.2006 23:34:41 von Tony Muler

Joergen Lang wrote:
> Frank Haschick schrieb:
>
>> Hallo NG,
>>
>> ich habe folgenden Quellcode:
>> foreach my $objItem (in $colItems)
>
>
> Frage: was macht 'in'?
> Kristallkugel::Simple::Antwort:
>
> -> 'in' gibt ein durch '$colItems' referenziertes Array mit Objekten
> zurueck.

Wenn $objItem tatsächlich ein Objekt ist, dann halte ich
$objItem->{Name} aber für schlechten Stil.

>> {
>> print "ACTUAL: $objItem->{Name}\n";
>> };
>>
>> Und der funktioniert ;)

Nicht alles was funktioniert, ist auch gut. Viellelichgt
bin ich etwas eigen, aber ich kann ohne Datenkapselung
nicht leben. (Aber sonst geht es mir gut.)

T.