1
|
1 |
#!/usr/bin/perl
|
|
2 |
#======================================================================
|
|
3 |
# S P L I T R D I
|
|
4 |
# doc: Sat Aug 21 22:20:27 2010
|
18
|
5 |
# dlm: Wed Mar 19 16:35:45 2014
|
1
|
6 |
# (c) 2010 A.M. Thurnherr
|
18
|
7 |
# uE-Info: 36 43 NIL 0 0 72 2 2 4 NIL ofnI
|
1
|
8 |
#======================================================================
|
|
9 |
|
|
10 |
# split RDI files based on list of ensemble numbers (e.g. from yoyo -t)
|
|
11 |
|
|
12 |
# HISTORY:
|
|
13 |
# Aug 21, 2010: - created
|
7
|
14 |
# Jun 24, 2011: - replaced -b, -n by -o
|
14
|
15 |
# Feb 13, 2014: - updated doc
|
18
|
16 |
# Mar 19, 2014: - added -s)kip small files
|
1
|
17 |
|
|
18 |
# NOTES:
|
14
|
19 |
# - it is assumed that the input file begins with ensemble #1
|
|
20 |
# - turning-point ensembles are written to preceding profile,
|
|
21 |
# for compatibility with [yoyo]
|
1
|
22 |
|
7
|
23 |
# FILE NAME CONVENTION:
|
14
|
24 |
# - in order to assign individual yoyo casts numerical station numbers,
|
|
25 |
# by default, the yoyo cast number is inserted after the station number
|
7
|
26 |
|
14
|
27 |
# EXAMPLES:
|
|
28 |
# splitRDI 017DL000.000 `mkProfile 017DL000.000 | yoyo -QFens -ut`
|
7
|
29 |
|
1
|
30 |
$0 =~ m{(.*/)[^/]+};
|
|
31 |
require "$1RDI_BB_Read.pl";
|
|
32 |
use Getopt::Std;
|
|
33 |
|
|
34 |
die("Usage: $0 " .
|
7
|
35 |
"[-o)ut-file <fmt[e.g. 017%02dDL000.000]>] " .
|
18
|
36 |
"[require -m)in <ens> to produce output] " .
|
1
|
37 |
"<RDI file> <ens> <ens[...]>\n")
|
18
|
38 |
unless (&getopts('o:m:') && @ARGV>=3);
|
1
|
39 |
|
7
|
40 |
$opt_o = substr($ARGV[0],0,3) # default output filename format
|
|
41 |
. '%02d'
|
|
42 |
. substr($ARGV[0],-9)
|
|
43 |
unless defined($opt_o);
|
18
|
44 |
|
|
45 |
$opt_m = 0 unless defined($opt_m); # default: produce tiny files as well
|
7
|
46 |
|
1
|
47 |
readHeader($ARGV[0],\%hdr); shift; # get length of ensembles
|
|
48 |
$ens_len = $hdr{ENSEMBLE_BYTES} + 2;
|
|
49 |
|
|
50 |
$first_ens = $ARGV[0]+1; shift; # initialize loop
|
|
51 |
$last_ens = $ARGV[0]; shift;
|
|
52 |
$cnr = 0;
|
|
53 |
|
|
54 |
do { # split data
|
18
|
55 |
sysseek(WBRF,($first_ens-2)*$ens_len,0) || # read next block of data
|
1
|
56 |
die("$WBRcfn: $!");
|
|
57 |
$last_ens++ unless defined($ARGV[0]);
|
|
58 |
$nBytes = ($last_ens-$first_ens+1) * $ens_len;
|
|
59 |
sysread(WBRF,$buf,$nBytes) == $nBytes ||
|
|
60 |
die("$WBRcfn: file truncated");
|
|
61 |
|
18
|
62 |
if ($last_ens-$first_ens+1 > $opt_m) { # produce file only if sufficient # of ensembles
|
|
63 |
$fn = sprintf($opt_o,$cnr++);
|
|
64 |
open(F,">$fn") || die("$fn: $!\n");
|
|
65 |
syswrite(F,$buf,$nBytes) == $nBytes ||
|
|
66 |
die("$fn: $!\n");
|
|
67 |
close(F);
|
|
68 |
printf(STDERR "$fn: %d ensembles ($nBytes bytes)\n",$last_ens-$first_ens+1);
|
|
69 |
}
|
1
|
70 |
|
|
71 |
$first_ens = $last_ens+1;
|
|
72 |
$last_ens = $ARGV[0]; shift;
|
|
73 |
} while defined($last_ens);
|
|
74 |
|
|
75 |
exit(0);
|
|
76 |
|
|
77 |
|