Frage zu readdir+push
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: $!";
[at] File_list_TempShapes =3D grep(/\.png$/, readdir(DIR));
closedir(DIR);
opendir(DIR, "$TempShapes_folder") || die "folder not found: $!";
[at] File_list_TempShapes2 =3D grep(/\.PNG$/, readdir(DIR));
closedir(DIR);
push( [at] File_list_TempShapes, [at] File_list_TempShapes2);
opendir(DIR, "$TempShapes_folder") || die "folder not found: $!";
[at] File_list_TempShapes3 =3D grep(/\.jpg$/, readdir(DIR));
closedir(DIR);
push( [at] File_list_TempShapes, [at] File_list_TempShapes3);
opendir(DIR, "$TempShapes_folder") || die "folder not found: $!";
[at] File_list_TempShapes4 =3D grep(/\.JPG$/, readdir(DIR));
closedir(DIR);
push( [at] File_list_TempShapes, [at] File_list_TempShapes4);
code2:
opendir(DIR, "$TempShapes_folder") || die "folder not found: $!";
[at] File_list_TempShapes =3D grep(/\.png$/, readdir(DIR));
[at] File_list_TempShapes2 =3D grep(/\.PNG$/, readdir(DIR));
[at] File_list_TempShapes3 =3D grep(/\.jpg$/, readdir(DIR));
[at] File_list_TempShapes4 =3D grep(/\.JPG$/, readdir(DIR));
closedir(DIR);
push( [at] File_list_TempShapes, [at] File_list_TempShapes2,
[at] File_list_TempShapes3, [at] File_list_TempShapes4);
Re: Frage zu readdir+push
* guba [at] 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: $!";
> [at] File_list_TempShapes = grep(/\.png$/, readdir(DIR));
> [at] 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 [at] 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
guba [at] vi-anec.de <guba [at] vi-anec.de> wrote:
> code2:
>
> opendir(DIR, "$TempShapes_folder") || die "folder not found: $!";
> [at] File_list_TempShapes = grep(/\.png$/, readdir(DIR));
> [at] File_list_TempShapes2 = grep(/\.PNG$/, readdir(DIR));
> [at] File_list_TempShapes3 = grep(/\.jpg$/, readdir(DIR));
> [at] File_list_TempShapes4 = grep(/\.JPG$/, readdir(DIR));
> closedir(DIR);
> push( [at] File_list_TempShapes, [at] File_list_TempShapes2,
> [at] File_list_TempShapes3, [at] File_list_TempShapes4);
perldoc -f rewinddir
Ich würde dir aber folgendes empfehlen:
opendir(DIR, "$TempShapes_folder")
or die "folder '$TempShapes_folder' not found: $!";
[at] 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
David Haller:
> [at] File_list_TempShapes = grep(/(?:\.png|jpg)$/i, readdir(DIR));
Das findet auch Dateien, die z.B. mit "xxxjpg" (ohne Punkt) enden.
Daher besser
[at] 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 [at] adv.magwien.gv.at