Schrift
[thread]12093[/thread]

Leere Arrayelemente elegant entfernen

Leser: 2


<< |< 1 2 >| >> 11 Einträge, 2 Seiten
drizzo
 2008-06-28 11:02
#111589 #111589
User since
2008-06-11
11 Artikel
BenutzerIn
[default_avatar]
Grüße Gemeinde,

gibt es einen eleganten Weg, um alle _leeren_ Listenelemente zu löschen ?
Und aus jedem Element ggf führende oder endende Leerzeichen zu entfernen ?

Code (perl): (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
$VAR1 = {
          'produkte' => [
                       {},
                       {},
                       {},
                       {},
                       {},
                       {},
                       {},
                       {},
                       {},
                       {},
                       {},
                       {},
                       {},
                       {
                         'preis' => '  5<A0>EUR   ',
                         'bild' =>'http://img.com/14.JPG',,
                         'beschreibung' => ' Tischtenniskelle ',
                         'hersteller' => 'Joola'
                       },


Vielen Dank im Vorraus für Kommentare/Anregungen etc.

Gruß
Drizzo
lichtkind
 2008-06-28 11:25
#111590 #111590
User since
2004-03-22
5680 Artikel
ModeratorIn + EditorIn
[Homepage]
user image
Code (perl): (dl )
@{$var1->{produkte}} = grep {$_ } @{$var1->{produkte}};


aubaufähig je nachdem was wirklich in den leeren elementen ist.
Wiki:Tutorien in der Wiki, mein zeug:
kephra, baumhaus, garten, gezwitscher

Es beginnt immer mit einer Entscheidung.
drizzo
 2008-06-28 11:44
#111591 #111591
User since
2008-06-11
11 Artikel
BenutzerIn
[default_avatar]
Code (perl): (dl )
1
2
3
4
my $result = parse($url);

@{$result->{produkte}} = grep {$_ } @{$result->{produkte}};
print Dumper $result;


Ich habe es dementsprchend eingebaut, bekomme aber weiterhin obige Ausgabe. Es "scheint" als wäre kein Inhalt in den besagten Elementen, sondern würde entstehen, weil das "parsen" einige Elemente anlegt, ohne Inhalt.
drizzo
 2008-06-28 12:43
#111592 #111592
User since
2008-06-11
11 Artikel
BenutzerIn
[default_avatar]
Code (perl): (dl )
Parsing of undecoded UTF-8 will give garbage when decoding entities at /usr/local/share/perl/5.8.8/Web/Scraper.pm line 84.


Diese Fehlermeldung erhalte ich ebenso, wenn ich per scraper die Daten hole. Man könnte hier mutmaßen, dass ggf. was in den Elementen ist...

Wie kann ich denn diese Fehlermeldung umgehen, so dass er sich am Zeichensatz nicht mehr stört ?


Gruß
Drizzo
moritz
 2008-06-28 13:02
#111593 #111593
User since
2007-05-11
923 Artikel
HausmeisterIn
[Homepage]
user image
drizzo+2008-06-28 10:43:14--
Code (perl): (dl )
Parsing of undecoded UTF-8 will give garbage when decoding entities at /usr/local/share/perl/5.8.8/Web/Scraper.pm line 84.


Diese Fehlermeldung erhalte ich ebenso, wenn ich per scraper die Daten hole. Man könnte hier mutmaßen, dass ggf. was in den Elementen ist...

Wie kann ich denn diese Fehlermeldung umgehen, so dass er sich am Zeichensatz nicht mehr stört ?


Code (perl): (dl )
use Encode qw(decode)

und den String in der passenden Zeichenkodierung dekodieren.
Gast Gast
 2008-06-28 14:08
#111596 #111596
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
#!/usr/bin/perl

use strict;
use warnings;
use Data::Dumper;
use Clone qw( clone );

my $list=[{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{inhalt=>1, daten=>0},{},{},{},{},{},{},{},{},{inhalt=>2, daten=>1}];

# erste Möglichkeit:
# klassisch, Speicherhungrig
my $list_out_a=[];
# hier passiert es:
@{$list_out_a}=grep{ref($_) eq 'HASH' and keys(%{$_}) > 0}@{$list};
print Dumper($list_out_a);

# zweite Möglichkeit:
# komplizierter, Speicherschonender, veränert das Original.
my $list_out_b=clone($list);
# hier passiert es:
ref($list_out_b->[$_]) eq 'HASH' and keys(%{$list_out_b->[$_]}) == 0 and splice(@{$list_out_b},$_,1) for reverse (0..$#{$list_out_b});
print Dumper($list_out_b);

# dritte Variante:
# Langsam, umstänlich, aber auch eine Möglichkeit
( my $list_out_c = Dumper($list) )=~s/\$VAR1 =|\s+{},\n//sg;
$list_out_c=eval($list_out_c);
print Dumper($list_out_c);
pq
 2008-06-28 16:07
#111604 #111604
User since
2003-08-04
12208 Artikel
Admin1
[Homepage]
user image
@gast: leerzeichen können die lesbarkeit stark erhöhen.
Always code as if the guy who ends up maintaining your code will be a violent psychopath who knows where you live. -- Damian Conway in "Perl Best Practices"
lesen: Wiki:Wie frage ich & perlintro Wiki:brian's Leitfaden für jedes Perl-Problem
drizzo
 2008-06-28 16:49
#111607 #111607
User since
2008-06-11
11 Artikel
BenutzerIn
[default_avatar]
Ersteinmal danke euch allen.

UTF-8 Meldung habe ich nun scheinbar (für's erste) dank Moritz gelöst.

Das aussortieren leerer Elemente funktioniert leider nicht wie gewünscht, bzw. garnicht. Bei mir ist es ein HASH als Ausgabe ( print $string; gibt die Ausgabe unten.)

Code (perl): (dl )
1
2
3
4
 
./test.pl
HASH(0x8f4f44c)
Not an ARRAY reference at ./test.pl line 28.


Von Moritz ergibt jede liste:

Code (perl): (dl )
ARRAY(0x98fd4a0)


Es scheint beides Mehrdemsional zu sein...

*verwirrt*
Drizzo
drizzo
 2008-06-28 20:30
#111630 #111630
User since
2008-06-11
11 Artikel
BenutzerIn
[default_avatar]
Also ich bekomm die Daten nicht vernünftig raus, es scheint ein Hashe of Hashes zu sein, oder ?

Irgendwie komme ich nicht korrekt an die Daten ohne leere Elemente.
nepos
 2008-06-29 14:03
#111641 #111641
User since
2005-08-17
1420 Artikel
BenutzerIn
[Homepage] [default_avatar]
@gast: Schau dir mal perltidy an. Das hilft dir, dass man deinen Code auch lesen kann. Leerzeichen und ab und zu auch mal Zeilenumbrueche erhoehen die Uebersicht ungemein...
<< |< 1 2 >| >> 11 Einträge, 2 Seiten



View all threads created 2008-06-28 11:02.