zilore mumba wrote:
 > Thanks all who assisted, especially Bill for the rewriting part and
 > others for the regex syntax.
 > The script rewrites the files but nothing is replaced. When I escape the
 > space as \s+ or \s it signals an error of unrecognized escape \s.
 >
 > Could it be the regex are written or is it impossible to do the required
 > substitution?

You're not indicating much about what went wrong.  I works for me, so
it would seem there is something different there like maybe a lowercase
H on the filename.  Run with debug on and see if it compares to my output.

Try this version - changes marked:

use strict;
use warnings;
use POSIX;
use File::Path;
use File::Copy;

my $debug = 1;
my $Grib_dir = 'grib_files';

opendir DIR, $Grib_dir or die "opendir failed on $Grib_dir: $! ($^E)";
while (my $file = readdir DIR) {

        next if -d $file;

        # Extra filtering, to copy only grib files ending in H
        next unless $file =~ /H$/i;     # can they be lowercase too ? added /i

        print "Doing $file\n" if $debug;
        my @lines = ();
        open IN, "+<$Grib_dir/$file" or die "open '$file': $! ($^E)";
        binmode IN;
        while (<IN>) {

                my $cnt = 0;            # added subst count next 6 lines
                print "$cnt: $_" if $debug;
                s/nxny 5041 \d{4}/nxny 5041/g && ++$cnt;
                s/ nx \d{4}/ nx 71/g && ++$cnt; # added leading space to
                s/ ny 1/ ny 71/g && ++$cnt;     # avoid conflict with nxny
                s/\(\d{4} x 1\)/\(71 x 71\)/g && ++$cnt;
                print "$cnt: $_" if $debug;

                push @lines, $_;
        }
        print "lines: @lines\n" if $debug;
        seek IN, 0, SEEK_SET;   # rewind file - reversed last 2 args
        truncate IN, 0;         # added in case we shorten file - truncate to 0
        print IN @lines;
        close IN;
}
closedir DIR;

__END__

Test data:

rec 1:0:date 2009072900 UGRD kpds5=33 kpds6=100 kpds7=850 levels=(3,82) 
grid=255 850 mb 24hr fcst:
   UGRD=u wind [m/s]
   timerange 0 P1 24 P2 0 TimeU 1  nx 1380 ny 1 GDS grid 0 num_in_ave 0 missing 0
   center 98 subcenter 0 process 110 Table 1
   latlon: lat  90.000000 to 0.000000 by 2.500000  nxny 1380
           long -90.000000 to 0.000000 by 2.500000, (1380 x 1) scan 0 mode 128 
bdsgrid 1
   min/max data -21.0971 -5.09805  num bits 14  BDS_Ref -21.0971  DecScale 0 
BinScale -10
   latlon: lat  90.000000 to 0.000000 by 2.500000  nxny 5041 1380

   nxny 5041 1380       # test nxny 5041 \d{4}
   nx 1380              # test nx \d{4}
   ny 1                 # test nx 1
   (1380 x 1)           # \(\d{4} x 1\)

end


Results of run with debug on:

Doing test.H
0: rec 1:0:date 2009072900 UGRD kpds5=33 kpds6=100 kpds7=850 levels=(3,82) 
grid=255 850 mb 24hr fcst:
0: rec 1:0:date 2009072900 UGRD kpds5=33 kpds6=100 kpds7=850 levels=(3,82) 
grid=255 850 mb 24hr fcst:
0:   UGRD=u wind [m/s]
0:   UGRD=u wind [m/s]
0:   timerange 0 P1 24 P2 0 TimeU 1  nx 1380 ny 1 GDS grid 0 num_in_ave 0 
missing 0
2:   timerange 0 P1 24 P2 0 TimeU 1  nx 71 ny 71 GDS grid 0 num_in_ave 0 
missing 0
0:   center 98 subcenter 0 process 110 Table 1
0:   center 98 subcenter 0 process 110 Table 1
0:   latlon: lat  90.000000 to 0.000000 by 2.500000  nxny 1380
0:   latlon: lat  90.000000 to 0.000000 by 2.500000  nxny 1380
0:           long -90.000000 to 0.000000 by 2.500000, (1380 x 1) scan 0 mode 
128 bdsgrid 1
1:           long -90.000000 to 0.000000 by 2.500000, (71 x 71) scan 0 mode 128 
bdsgrid 1
0:   min/max data -21.0971 -5.09805  num bits 14  BDS_Ref -21.0971  DecScale 0 
BinScale -10
0:   min/max data -21.0971 -5.09805  num bits 14  BDS_Ref -21.0971  DecScale 0 
BinScale -10
0:   latlon: lat  90.000000 to 0.000000 by 2.500000  nxny 5041 1380
1:   latlon: lat  90.000000 to 0.000000 by 2.500000  nxny 5041
0:
0:
0:   nxny 5041 1380     # test nxny 5041 \d{4}
1:   nxny 5041  # test nxny 5041 \d{4}
0:   nx 1380            # test nx \d{4}
1:   nx 71              # test nx \d{4}
0:   ny 1                       # test nx 1
1:   ny 71                      # test nx 1
0:   (1380 x 1)         # \(\d{4} x 1\)
1:   (71 x 71)          # \(\d{4} x 1\)
0:
0:
0: end
0: end
0:
0:
lines: rec 1:0:date 2009072900 UGRD kpds5=33 kpds6=100 kpds7=850 levels=(3,82) 
grid=255 850 mb 24hr fcst:
    UGRD=u wind [m/s]
    timerange 0 P1 24 P2 0 TimeU 1  nx 71 ny 71 GDS grid 0 num_in_ave 0 missing 0
    center 98 subcenter 0 process 110 Table 1
    latlon: lat  90.000000 to 0.000000 by 2.500000  nxny 1380
            long -90.000000 to 0.000000 by 2.500000, (71 x 71) scan 0 mode 128 
bdsgrid 1
    min/max data -21.0971 -5.09805  num bits 14  BDS_Ref -21.0971  DecScale 0 
BinScale -10
    latlon: lat  90.000000 to 0.000000 by 2.500000  nxny 5041

    nxny 5041    # test nxny 5041 \d{4}
    nx 71                # test nx \d{4}
    ny 71                        # test nx 1
    (71 x 71)            # \(\d{4} x 1\)

  end




















_______________________________________________
ActivePerl mailing list
ActivePerl@listserv.ActiveState.com
To unsubscribe: http://listserv.ActiveState.com/mailman/mysubs

Reply via email to