Frage zu readdir+push

Frage zu readdir+push

am 03.10.2007 09:32:31 von guba

Hallo,

kann mir jemand sagen, warum code1 funktioniert, aber der
zusammengefasste code2 nicht?
$TempShapes_folder ist etwas wie 'C:.../TempShapes/' .

Danke für Hinweise

Guenter


code1:

opendir(DIR, "$TempShapes_folder") || die "folder not found: $!";
@File_list_TempShapes =3D grep(/\.png$/, readdir(DIR));
closedir(DIR);
opendir(DIR, "$TempShapes_folder") || die "folder not found: $!";
@File_list_TempShapes2 =3D grep(/\.PNG$/, readdir(DIR));
closedir(DIR);
push(@File_list_TempShapes, @File_list_TempShapes2);
opendir(DIR, "$TempShapes_folder") || die "folder not found: $!";
@File_list_TempShapes3 =3D grep(/\.jpg$/, readdir(DIR));
closedir(DIR);
push(@File_list_TempShapes, @File_list_TempShapes3);
opendir(DIR, "$TempShapes_folder") || die "folder not found: $!";
@File_list_TempShapes4 =3D grep(/\.JPG$/, readdir(DIR));
closedir(DIR);
push(@File_list_TempShapes, @File_list_TempShapes4);




code2:

opendir(DIR, "$TempShapes_folder") || die "folder not found: $!";
@File_list_TempShapes =3D grep(/\.png$/, readdir(DIR));
@File_list_TempShapes2 =3D grep(/\.PNG$/, readdir(DIR));
@File_list_TempShapes3 =3D grep(/\.jpg$/, readdir(DIR));
@File_list_TempShapes4 =3D grep(/\.JPG$/, readdir(DIR));
closedir(DIR);
push(@File_list_TempShapes, @File_list_TempShapes2,
@File_list_TempShapes3, @File_list_TempShapes4);

Re: Frage zu readdir+push

am 03.10.2007 09:37:49 von Bjoern Hoehrmann

* guba@vi-anec.de wrote in de.comp.lang.perl.misc:
>kann mir jemand sagen, warum code1 funktioniert, aber der
>zusammengefasste code2 nicht?

>opendir(DIR, "$TempShapes_folder") || die "folder not found: $!";
>@File_list_TempShapes = grep(/\.png$/, readdir(DIR));
>@File_list_TempShapes2 = grep(/\.PNG$/, readdir(DIR));

Weil readdir nur die verbleibenden Einträge zurückliefert, und nichts
falls es keine Einträge mehr gibt. In der ersten Version umgehst du das,
weil du opendir/closedir wiederholt aufrufst, hier jedoch nicht. Siehe

% perldoc -f readdir

für die Dokumentation von readdir.
--
Björn Höhrmann · mailto:bjoern@hoehrmann.de · http://bjoern.hoehrmann.de
Weinh. Str. 22 · Telefon: +49(0)621/4309674 · http://www.bjoernsworld.de
68309 Mannheim · PGP Pub. KeyID: 0xA4357E78 · http://www.websitedev.de/

Re: Frage zu readdir+push

am 03.10.2007 22:06:32 von David Haller

guba@vi-anec.de wrote:
> code2:
>
> opendir(DIR, "$TempShapes_folder") || die "folder not found: $!";
> @File_list_TempShapes = grep(/\.png$/, readdir(DIR));
> @File_list_TempShapes2 = grep(/\.PNG$/, readdir(DIR));
> @File_list_TempShapes3 = grep(/\.jpg$/, readdir(DIR));
> @File_list_TempShapes4 = grep(/\.JPG$/, readdir(DIR));
> closedir(DIR);
> push(@File_list_TempShapes, @File_list_TempShapes2,
> @File_list_TempShapes3, @File_list_TempShapes4);

perldoc -f rewinddir

Ich würde dir aber folgendes empfehlen:

opendir(DIR, "$TempShapes_folder")
or die "folder '$TempShapes_folder' not found: $!";
@File_list_TempShapes = grep(/(?:\.png|jpg)$/i, readdir(DIR));
closedir(DIR);

HTH,
-dnh

--
I didn't know it was impossible when I did it.

Re: Frage zu readdir+push

am 04.10.2007 08:08:22 von Ferry Bolhar

David Haller:

> @File_list_TempShapes = grep(/(?:\.png|jpg)$/i, readdir(DIR));

Das findet auch Dateien, die z.B. mit "xxxjpg" (ohne Punkt) enden.
Daher besser

@File_list_TempShapes = grep /\.(?:png|jpg)$/i, readdir DIR;

Im Übrigen kann der OP seine Gründe gehabt haben, die jeweiligen
Sucherergebnisse in unterschiedlichen Arrays abzulegen (sonst hätte
er ja alle gleich in ein Array push-en können).

LG, Ferry

--
Ing Ferry Bolhar
Magistrat der Stadt Wien - MA 14
A-1010 Wien
E-Mail: bol@adv.magwien.gv.at