anoniem Geplaatst: 17 januari 2003 Delen Geplaatst: 17 januari 2003 Beste mensen, Ik zit nu een beetje vast met Perl. Ik moet met een programma een map lezen en alle bestanden in een scalar gooien. Maar hoe doe ik dit. Ik heb op www.perldoc.com lopen zoeken en ik heb een vermmoeden dat het iets met readdir() is, alleen ik heb hier nog nooit mee gewerkt. Zo moet je dan samen met opendir() werken, alleen dan moet je een map opgeven. Maar hoe doe je dat dan met een map waar je al inzit, bijv: Ik zit nu in /home/wwizzkidd en ik heb het programma in die map zitten. Dus ik wil dan alles in /home/wwizzkidd lezen. Maar ik kan dus dit niet opgeven: opendir(DIR,"/home/wwizzkidd"); want dit is niet overal hetzelfde :). Hoe los ik zoiets op? grtz, wwizzkidd Quote Link naar reactie
anoniem Geplaatst: 17 januari 2003 Auteur Delen Geplaatst: 17 januari 2003 opendir DIR, './'; @array = readdir DIR; closedir DIR; print @array; Quote Link naar reactie
anoniem Geplaatst: 28 januari 2003 Auteur Delen Geplaatst: 28 januari 2003 Dat in een scalar gooien is wel ok, maar dan krijg je al die bestanden achter elkaar zoals: test.plhallo.plbin.exe enz. Hoe kun je die dan scheiden en dan in bijv. in een array ofzo gooien? ZOdat ik elk bestand later kan gebruiken.. grtz, wwizzkidd Quote Link naar reactie
anoniem Geplaatst: 28 januari 2003 Auteur Delen Geplaatst: 28 januari 2003 Ik zou zeggen: lees eens een perl tutorial of zo, dit is zo basic. while (@array){ print shift @array, "<br>\n"; } Quote Link naar reactie
anoniem Geplaatst: 29 januari 2003 Auteur Delen Geplaatst: 29 januari 2003 Ugh, shift? :-? [code:1:381ddea9c4]# Behind door number 1, we have.... for (@files) { print "$_\n"; } # .... behind door number 2.... print "$_\n" for @files; # .... and behind door number 3.... print join "\n" => @files; # Pick a door and win a trip (or a fridge)![/code:1:381ddea9c4] Quote Link naar reactie
anoniem Geplaatst: 30 januari 2003 Auteur Delen Geplaatst: 30 januari 2003 Och, er zijn vele wegen die naar Rome leiden, in dit geval tientallen. :) Quote Link naar reactie
anoniem Geplaatst: 30 januari 2003 Auteur Delen Geplaatst: 30 januari 2003 Die weg met shift is dan wel een van de lelijkste, bochtigste wegen... De snelweg: [code:1:df9e779d92]$ perl -wle 'print for <*>'[/code:1:df9e779d92] Quote Link naar reactie
anoniem Geplaatst: 30 januari 2003 Auteur Delen Geplaatst: 30 januari 2003 Ach, er is voor alle mogelijkheden iets te zeggen. Print join werkt goed, maar neemt onnodig geheugenruimte in beslag. En printen vanaf de command line is leuk, maar niet echt praktisch in een script. Of je moet system calls gaan doen, en of dat nou de weg is. Maar deze thread verandert ondertussen in een wedstrijdje ver pissen, en als jij die graag wilt winnen, dan gun ik je die eer van harte. Quote Link naar reactie
anoniem Geplaatst: 30 januari 2003 Auteur Delen Geplaatst: 30 januari 2003 [quote:d85cda08f8="gerben"]Ach, er is voor alle mogelijkheden iets te zeggen. Print join werkt goed, maar neemt onnodig geheugenruimte in beslag.[/quote:d85cda08f8] Alhoewel dat technisch natuurlijk volkomen waar is, is de opmerking wat vreemd aangezien je niet met de volgende lus kwam: [code:1:d85cda08f8]while (readdir(DIR)) { print "$_\n"; }[/code:1:d85cda08f8] De bestandsnamen in een array stoppen alleen om ze vervolgens een voor een er weer uit te gooien is nou niet echt in lijn met je bezorgdheid om een paar bytes geheugen. Die join was bedoeld als uitleg aan iemand die niet veel van Perl weet (als wwizzkidd dat wel wist zou hij geen probleem hebben gehad). Het printen van een array zonder lus, join of het (tijdelijk) veranderen van $, zet zo iemand weer voor een vraag: "waarom staan alle bestandsnamen aan elkaar vast?" Het kromme van die shift is dat je op die manier maar 1 keer over de bestanden kunt loopen (en waarom zou je ze dan nog in een array stoppen?). Ook nogal verwarrend voor iemand zonder veel ervaring met Perl. [quote:d85cda08f8]En printen vanaf de command line is leuk, maar niet echt praktisch in een script. Of je moet system calls gaan doen, en of dat nou de weg is.[/quote:d85cda08f8] Wat hebben system-calls hiermee te maken? Maar goed, voor jou dan compleet uitgekauwd: [code:1:d85cda08f8]#!/usr/bin/perl -w print "Files in current directory:\n"; print "$_\n" for <*>;[/code:1:d85cda08f8] Het gaat trouwens niet om "winnen", het ging erom dat die shift brak is en een beginner alleen van de wal in de sloot helpt. Quote Link naar reactie
anoniem Geplaatst: 30 januari 2003 Auteur Delen Geplaatst: 30 januari 2003 Pssst: je hebt al gewonnen hoor... :-) Quote Link naar reactie
anoniem Geplaatst: 31 januari 2003 Auteur Delen Geplaatst: 31 januari 2003 Whatever. Quote Link naar reactie
Aanbevolen berichten
Om een reactie te plaatsen, moet je eerst inloggen