Schrift
[thread]7485[/thread]

Einträge im Array löschen, auslesen, .. (Seite 2)

Leser: 1


<< |< 1 2 >| >> 17 Einträge, 2 Seiten
Crian
 2005-11-22 16:21
#60277 #60277
User since
2003-08-04
5866 Artikel
ModeratorIn
[Homepage]
user image
Dann besser so (die Titel für die Hashbildung verwenden):

Code (perl): (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
#!/usr/bin/perl
use strict;
use warnings;

use Data::Dumper; $Data::Dumper::Sortkeys = 1;

my @Array1 = (
    'Nr;Name;Vorname;Strasse;Ort',
    '1;Bauer;Otto;Heuweg 1;Bonn',
    '2;Mueller;Mark;Holzweg 2;Berlin',
    '3;Schreiber;Stefan;Hochweg 3;Muenchen',
);

print "Array = ", Dumper \@Array1;

my @Array2; # hier kommt spter alles rein

# Ueberschrift entfernen und speichern:
my @Title = split /;/, shift @Array1;
my $N = @Title;

print "Title = ", Dumper \@Title;

print "Array = ", Dumper \@Array1;

for (@Array1) {
    # am semikolon auftrennen
    my @line = split /;/;
    die "Falsche Anzahl Elemente" unless $N == @line;

    # als anonymen Hash zuweisen
    my %hash;
    for my $i (0 .. $N-1) {
        $hash{$Title[$i]} = $line[$i]; # wir hoffen, dass alle Spalten unterschiedliche Titel haben...
    }
    push @Array2, { %hash };
}

print "Array2 = ", Dumper \@Array2;

# auf einzelne Werte zugreifen
print $Array2[1]->{'Vorname'} . ' ' . $Array2[1]->{'Name'}    . " \n";
print $Array2[2]->{$Title[2]} . ' ' . $Array2[2]->{$Title[1]} . " \n";


Ausgabe:
Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
Array = $VAR1 = [
'Nr;Name;Vorname;Strasse;Ort',
'1;Bauer;Otto;Heuweg 1;Bonn',
'2;Mueller;Mark;Holzweg 2;Berlin',
'3;Schreiber;Stefan;Hochweg 3;Muenchen'
];
Title = $VAR1 = [
'Nr',
'Name',
'Vorname',
'Strasse',
'Ort'
];
Array = $VAR1 = [
'1;Bauer;Otto;Heuweg 1;Bonn',
'2;Mueller;Mark;Holzweg 2;Berlin',
'3;Schreiber;Stefan;Hochweg 3;Muenchen'
];
Array2 = $VAR1 = [
{
'Name' => 'Bauer',
'Nr' => '1',
'Ort' => 'Bonn',
'Strasse' => 'Heuweg 1',
'Vorname' => 'Otto'
},
{
'Name' => 'Mueller',
'Nr' => '2',
'Ort' => 'Berlin',
'Strasse' => 'Holzweg 2',
'Vorname' => 'Mark'
},
{
'Name' => 'Schreiber',
'Nr' => '3',
'Ort' => 'Muenchen',
'Strasse' => 'Hochweg 3',
'Vorname' => 'Stefan'
}
];
Mark Mueller
Stefan Schreiber
\n\n

<!--EDIT|Crian|1132670374-->
s--Pevna-;s.([a-z]).chr((ord($1)-84)%26+97).gee; s^([A-Z])^chr((ord($1)-52)%26+65)^gee;print;

use strict; use warnings; Link zu meiner Perlseite
J-jayz-Z
 2005-11-22 16:34
#60278 #60278
User since
2005-04-13
625 Artikel
BenutzerIn
[Homepage] [default_avatar]
[quote=Strat,21.11.2005, 14:53][quote=betterworld,21.11.2005, 14:27]
Code: (dl )
@array1 = map { s/dein lustiger regexp/$1$2/; $_ } @array2
[/quote]

Achtung: das veraendert aber auch @array2, weil man die "Laufvariable" $_ veraendert.

wenn man das nicht will, dann besser eine temporaere variable verwenden, z.B.[/quote]
Ja, oder pqs geniales cmap. Siehe dazu Wiki - Sub und map als Prototyp
perl -Mstrict -Mwarnings -e 'package blub; sub new { bless {} } sub bar {my $self=shift; $self->{bla}="5065726c2d436f6d6d756e697479"; return $self->{bla};} my $foo=blub->new();print "Hallo ";print pack("H*",$foo->bar()); print "\n"'

http://perl-tutor.de
betterworld
 2005-11-22 17:38
#60279 #60279
User since
2003-08-21
2613 Artikel
ModeratorIn

user image
[quote=Strat,21.11.2005, 14:53][quote=betterworld,21.11.2005, 14:27]
Code: (dl )
@array1 = map { s/dein lustiger regexp/$1$2/; $_ } @array2
[/quote]

Achtung: das veraendert aber auch @array2, weil man die "Laufvariable" $_ veraendert.[/quote]
Sorry, das hatte ich vergessen.
pKai
 2005-11-22 19:01
#60280 #60280
User since
2005-02-18
357 Artikel
BenutzerIn
[default_avatar]
[quote=Crian,22.Nov..2005, 15:21]print "Array = ", Dumper \@Array1;[/quote]
Data::Dumper kennt auch die folgende Methode um das Allgegenwärtige $VAR1 durch einen eigenen Namen zu ersetzen:
Code (perl): (dl )
print Data::Dumper->Dump([\@Array1],[qw(Array)]);


Was mich wundert ist, dass dieser Thread noch nicht eine Erwähnung von Text::CSV enthält (bis jetzt :D).

Und außerdem (völlig anders Thema), führt die Verbatim-Zeichenkette
Code: (dl )
\n
innerhalb von Perl-Tags hier im Board zu verwirrenden Ergebnissen, da diese nicht damit umgehen können...


Edit: Aufruffehler in Dump behoben :-/\n\n

<!--EDIT|pKai|1132682380-->
I sense a soul in search of answers.
steffenw
 2005-11-22 20:39
#60281 #60281
User since
2003-08-15
692 Artikel
BenutzerIn
[Homepage] [default_avatar]
Was da in dem Array steht, ist eine CSV-Datei, die da zeilenweise reingeladen wurde.
Und wenn das so ist, dann kann man auch fertige Parser verwenden.

use Text::CSV;
...\n\n

<!--EDIT|steffenw|1132684857-->
$SIG{USER} = sub {love 'Perl' or die};
Dubu
 2005-11-23 10:36
#60282 #60282
User since
2003-08-04
2145 Artikel
ModeratorIn + EditorIn

user image
Wenn es sich tatsaechlich um eine eingelesene CSV-Datei handelt (und das ist gut moeglich), dann haben wir hier ein schoenes Beispiel fuer ein XY-Problem(*) und der OP sollte tatsaechlich ueber die Benutzung von Text::CSV oder Text::CSV_XS nachdenken.


(*) Bei einem XY-Problem hat ein Fragender ein Problem X, fragt aber nach einer Loesung fuer Y, weil er der Meinung ist, dass man X am besten mit Y loest. Wuerde er direkt nach X fragen, dann koennte man ihm die eventuell bessere/schnellere/elegantere Loesung Z vorschlagen.
Dubu
 2005-11-23 10:42
#60283 #60283
User since
2003-08-04
2145 Artikel
ModeratorIn + EditorIn

user image
[quote=Dubu,23.11.2005, 09:36](*) Bei einem XY-Problem hat ein Fragender ein Problem X, fragt aber nach einer Loesung fuer Y, weil er der Meinung ist, dass man X am besten mit Y loest. Wuerde er direkt nach X fragen, dann koennte man ihm die eventuell bessere/schnellere/elegantere Loesung Z vorschlagen.[/quote]
Ergaenzung: XY-Probleme kommen meist von Leuten, die sonst in C programmieren, da es in C keine Loesung Z gibt. ;)
<< |< 1 2 >| >> 17 Einträge, 2 Seiten



View all threads created 2005-11-21 12:35.