Schrift
[thread]8506[/thread]

Anzahl Elemente mehrdim. Array



<< >> 7 Einträge, 1 Seite
Kalmuecke
 2006-11-15 12:12
#71753 #71753
User since
2006-10-14
68 Artikel
BenutzerIn
[default_avatar]
Hi,

mit
Code: (dl )
@Arrayname

bekommt man ja normalerweise die Anzahl der Elemente im Array.
Ich habe jetzt allerdings ein 2 dimsionales Array bestehend aus 2 Referenzen (jedes dieser Array enthält 14 Elemente). Wenn ich jetzt auf mein "Haupt"-Array das @ voranstelle, dann bekomme ich leider die Anzahl beider Arrays und den Referenzen => 30 Elemente!
Wie bekomme ich die Anzahl der Elemente heraus?

vielleicht speichere ich meine Daten auch nicht perfekt!
Möchte in einem Array den Namen eines Moduls und zum Modul die benötigte Größe speichern!
Code: (dl )
1
2
3
my @Name     = ();
my @Size     = ();
my @Content   = ([\@Name], [\@Size]);


Das Speichern geschieht folgendermaßen:
Code: (dl )
push(@Content, $name, $size);


Danke viemals im voraus!
Gruss

Kalmuecke
renee
 2006-11-15 12:20
#71754 #71754
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
Dafür würde sich ein Hash besser eignen:
Code: (dl )
1
2
3
4
5
6
7
8
9
10
#!/usr/bin/perl

use strict;
use warnings;

my %hash = (Modul1 => 1235,
Modul2 => 6234,
Module3 => 19057);

print "Es gibt ",scalar keys %hash," Module\nDas Modul1 hat die Größe",$hash{Modul1},"\n";
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/
Kalmuecke
 2006-11-15 12:21
#71755 #71755
User since
2006-10-14
68 Artikel
BenutzerIn
[default_avatar]
Das habe ich mir auch schon gedacht!
Nur die Namen weiß ich leider nicht im voraus, da diese sich ändern können!

Kann man denn aus dem Hash die einzelnen Modulnamen auslesen?? Weil beim Hash mein Name ja dann der Schlüssel wäre!
renee
 2006-11-15 12:23
#71756 #71756
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
Was meinst Du mit "die können sich ändern".

Du kommst mit keys an alle Schlüssel (in dem Fall die Modulnamen)...

Es wäre vielleicht ganz praktisch, wenn Du etwas mehr von dem erzählen würdest, was Du vorhast.
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/
Kalmuecke
 2006-11-15 12:36
#71757 #71757
User since
2006-10-14
68 Artikel
BenutzerIn
[default_avatar]
Ok, ich lesen eine Datei ein, in der Modulnamen vorkommen!
Jetzt möchte ich gern die Modulnamen und die dazugehörige Größe speichern.
Problem ist nur, daß die Datensätze (modulname und größe) nicht alle auf einmal an einer Stelle in der Datei stehen, sondern ein Teil am Anfang und ein Teil am Ende der Datei stehen kann und zwischendurch Teile stehen können, die in ein anderes Array bzw. Hash gespeichert werden müssen. Also muss ich wissen wie man fortlaufend in ein Hash etwas speichern kann ohne die alten Dinge im Hash zu löschen
Gibt es für Hashes auch soetwas wie push bei den Arrays??

Ich muss wie gesagt in einer neuen Datei (html) die Modulnamen in einer Spalte ausgeben, in der nächsten die Größe des jeweiligen Modulnamen. Zusätzlich muss ich die Gesamtgröße aller Module berechnen und ausgeben und die Anzahl aller Modulnamen!

Ich hoffe jetzt ist es etwas klarer was ich machen möchte! :)

Ps.:Keys und values habe ich jetzt gerade gelesen, darüber kann ich ja entsprechend im Hash hin und her springen je nachdem was ich brauche!
renee
 2006-11-15 14:17
#71758 #71758
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
Mal angenommen, Deine Datei sieht so aus:
Code: (dl )
1
2
3
4
5
6
7
Modul:  Name1 -- Größe1
Irgendwas
was
anderes
Modul: Name2 -- Größe2
Modul: Name3 -- Größe3
Test


Dann kannst Du es so machen:
Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#!/usr/bin/perl

use strict;
use warnings;

my $file = '/path/to/file.txt';

my %hash;

open my $fh,'<',$file or die $!;
while(my $line = <$fh>){
next unless $line =~ /^Modul:/;
chomp $line;
my ($modul,$size) = (split /\s+/,$line)[1,3];
$hash{$modul} = $size;
}
close $fh;

print sprintf("%10s -- %10s",'Modul','Größe');
for my $module(sort{$a cmp $b}keys %hash){
print sprintf("%10s -- %10s",$key,$hash{$key});
}


ungetestet...
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/
sid burn
 2006-11-16 15:57
#71759 #71759
User since
2006-03-29
1520 Artikel
BenutzerIn

user image
Code: (dl )
Ich habe jetzt allerdings ein 2 dimsionales Array bestehend aus 2 Referenzen (jedes dieser Array enthält 14 Elemente). Wenn ich jetzt auf mein "Haupt"-Array das @ voranstelle, dann bekomme ich leider die Anzahl beider Arrays und den Referenzen => 30 Elemente!

Also bei mir ist dies nicht so!

Code: (dl )
1
2
3
4
5
6
7
8
9
10
#!/usr/bin/perl
use warnings;
use strict;

my @array = (
[ qw(Hallo Welt wie geht es dir) ],
[ qw(Och mir geht es ganz gut) ],
);

print scalar @array, "\n";


beim ausführen kommt bei mir "2" heraus.
Nicht mehr aktiv. Bei Kontakt: ICQ: 404181669 E-Mail: perl@david-raab.de
<< >> 7 Einträge, 1 Seite



View all threads created 2006-11-15 12:12.