SkÃ¥ne Sjælland Linux User Group - http://www.sslug.dk Forside   Tilmelding   Postarkiv   Forum   Kalender   Søg
MhonArc Dato: [Date Prev] [Kronologisk oversigt] [Date Next]   TrÃ¥d: [Date Prev] [Oversigt trÃ¥de] [Date Next]   MhonArc
 

Re: [PERL] Brug globbing til wild card emulering



Der spindes lige en ende mere:

Når jeg ønsker at have adgang til filer i directory strukturen og ikke
kun current directory så virker simpel regexp ikke, så Ole har ret i,
at jeg _ikke_ absolut _vil_ bruge regexp.

Jeg finder det mest formålstjenligt at benytte File::DosGlob, idet
den tillader backslash (såvel som slash).

For eventuelle interesserede indsætter jeg kode og output.
glb1 benytter File::DosGlob, og glb2 benytter eval.
Kun glb1 tillader backslash.
Wildcard '?' betyder i DOS åbenbart det samme som '*'.

_____________________________
#!perl -w

use File::DosGlob 'glob';

# main()
{
    glb1();
    glb2();
} # main

sub glb1()
{
    print "glb1\n";
    if ( 0 == scalar @ARGV ) { push @ARGV,"*"; }

    for ( $j=0; $j < scalar @ARGV; $j++ )
    {
 @files = glob "$ARGV[$j]";
 for ( sort @files ) { print "$_\n"; }
    } # for j
} # glb1

sub glb2()
{
    print "glb2\n";
    if ( 0 == scalar @ARGV ) { push @ARGV,"*"; }

    @e = @ARGV; @ARGV = ();
    for (@e) { push(@ARGV,<eval $_>); }
    for ( @ARGV ) { print "$_\n"; }
} # glb2


>tPerl\wildcard\glb.pl */w*/*j? *\w*/?l?.pl
glb1
tPerl/wildcard/jk-j
tPerl/wildcard/jk-jk
tPerl\wildcard/glb.pl
tPerl\wildcard/ls.pl
glb2
tPerl/wildcard/jk-j
tPerl/wildcard/jk-jk
_____________________________
mvh
Jan

Ole Tange wrote:

> On Wed, 17 May 2000, Jan Eggert Kofoed wrote:
>
> > Jeg har er ved at lave Perl programmer, som skal filtrere filer, og
> > dette
> > skulle gerne kunne lade sig gøre ved at benytte wild cards på samme
> > måde som en shell gør det. Jeg ville gerne undgå at stole på shellen,
> > for nogle af mine brugere har benytter ikke bash på Windows platformen.
>
> Da jeg skulle skrive noget perl til Windows fulgte der et program
> med i perl-pakken: glob.exe. Gør der stadig det?
>
> > Jeg kan godt få fat på filnavne (parse_dir). Hvordan checker jeg, om
> > filnavnet
> > opfylder regexp angivet ved wild card? For eksempel ville jeg godt kunne
> >
> > skrive noget i retning af
> >     perl -TSw jk.pl "*2*.pl"
>
> Hvis du bruger glob.exe, kan du som første linje skrive:
>
>   @ARGV=<eval $ARGV[0]>;
>
> Dette vil evaluere det første argument på kommandolinjen og derefter
> benytte csh eller glob.exe til at expande, slutteligt putte resultatet ind
> i @ARGV, så det for perl "ser ud som om" de stod på kommando linjen.
>
> Hvis du vil have lov at skrive:
>
>   perl -TSw jk.pl "*2*.pl" abc.txt "ole?????.pl" ...
>
> skal du ud i noget ala:
>
>   @sslug@sslug; @ARGV=();
>   for(@e) { push(@ARGV,<eval $_>); }
>
> Hvis glob.exe ikke længere findes til Windows, så prøv lige at checke CPAN
> om de ikke har en globbing-ting.
>
> Hvis du absolut _vil_ regexpe, så skal du konvertere alle globbings til
> regexps:
>
>   ?           = .
>   {a,bc}      = (a|bc)
>   *           = .*
>   [a-f]       = [a-f]
>   tegn        = \tegn
>
> Det overlades til en øvelse til læseren at få lavet en 100% korrekt
> implementation. Jeg lugter bøvl, når man skal finde ud af, om [ har en
> speciel betydning: [a-f] eller ingen speciel betydning: [a-f (uden ]).
>
> /Ole



 
Forside   Tilmelding   Postarkiv   Oversigt   Kalender   Søg

 
 
Henvendelse vedrørende websiderne til <www_admin>. Senest ændret 2005-08-10, klokken 19:52
Denne side vedligeholdes af MHonArc .