#!/usr/local/bin/perl -w # # mocpro_level3.pl # mocness tow data file manipulation routine - level 3 # For version, see $version $version="V1.31/Apr. 5, 1999"; # October 17, 1997 rcg # November 4, 1997. Change to level 3. rcg # November 10, 1997. Fix code for outputing comments. rcg # November 14, 1997 rcg Change output message to say displayed by. # May 13, 1998 rcg Eliminate warning message when qualifier did not exist # December 7, 1998. Display date and time correctly for old cruises. # March 24, 1999. Change location of files. rcg. # April 5, 1999. Skip lines that have leading "#" character. These # are JGOFS-style comment lines, typically hand-edited in. rcg # Looks at all the file $ARGV[2] and outputs level 3 data # Passed parameters: # $ARGV[0] - data type # $ARGV[1] - file type # $ARGV[2] - data file to process #some definitions #$script_loc="/data/cashjian"; # not used $| = 1; $i_am_level = 3; print STDOUT "#Displayed by $0, $version\n"; $fieldnames_level[3]="/data/cashjian/fieldnames_level3"; $datafile=$ARGV[2]; print STDOUT "# Using data file $datafile\n"; # Read fieldnames allowed and save for later use if ($i_am_level != $#fieldnames_level) { print STDOUT ("# At level $i_am_level rather than $#fieldnames_level\n", "#\tin routine $0. Cannot continue.\n"); exit 0; } for ($i=$i_am_level; $i <= $#fieldnames_level; $i++) { # print "STDOUT #**debug, fieldnames_level[$i]=$fieldnames_level[$i]\n"; open FIELDNAMES, $fieldnames_level[$i] or die "#Could not get field names from $fieldnames_level[$i], $!"; @fieldnames=; close FIELDNAMES; chomp (@fieldnames); } # Remove field name attributes if present for ($i=0; $i <= $#fieldnames; $i=$i+1) { if (index ($fieldnames[$i], "#") >= 0 ) { #comment line, drop out $fieldnames[$i]=""; next; } $qualifier[$i]=$fieldnames[$i]; $fieldnames[$i]=~ s/(^.*)\[.*/$1/; $qualifier[$i]=~ s/^.*(\[.*)/$1/; if ($fieldnames[$i] eq $qualifier[$i]) {$qualifier[$i]="";} # print STDOUT ("#**debug, fieldnames[$i]=",$fieldnames[$i], # ", qualifier[$i]=",$qualifier[$i], "\n"); } # Read data file open MOCDATA, $datafile or die "# Could not open CTD from MOCNESS data file $datafile, $!"; $_=; chomp; @notuse=(); push @save_for_comments, $_ ; #print STDOUT " **debug, array save_for_comments=@save_for_comments\n"; #print STDOUT "#**debug, before old/new determination _=$_\n"; if ( m/^\d{1,}.*/ ) { # old form found, with one field or value per line $format='old'; $numbfields=$_ - 1; # print STDOUT "# **debug, numbfields=$numbfields\n"; for ($k=0; $k <= $numbfields; $k++) { $fields_in_data[$k] = ; chomp $fields_in_data[$k]; # print STDOUT ("# **debug, fields_in_data[", # $k,"]=$fields_in_data[$k]\n"); } @save_for_comments=("#Note: local times may be in error. 12/8/98 rcg", "Thinks there are field names here"); } else { # new format with field names and data on per line basis $format="new"; $numbfields=0; while ($numbfields == 0) { $_=; # print STDOUT "# **debug, _=$_\n"; push @save_for_comments, $_; unless (defined $_ ) { print STDOUT "#Error found in $0\n"; print STDOUT "# Reached end of file in $datafile without\n"; print STDOUT "# finding list of variables expected.\n"; print STDOUT ("#", "Contact the DMO"); exit 0; } chomp; @fields_in_data = split /\s+/, $_ ; for ($i=0; $i <= $#fields_in_data; $i++) { $fields_in_data[$i] =~ s/ //g; # print STDOUT # "**debug, fields_in_data[$i]=$fields_in_data[$i]\n"; } if ($fields_in_data[0] eq "" ) {shift @fields_in_data; } if ($fields_in_data[0] eq "time" ) { $numbfields = -1; if ($numbfields != $#fields_in_data) { print STDOUT ("#Error found in $0\n", "# in datafile $datafile\n", "# Number of fields expected was ", $numbfields, " but see", $#fields_in_data, " instead.\n"); exit 0; } } } } for ($i=0; $i <= $#fields_in_data; $i=$i+1) { $fields_in_data[$i] =~ s/\s//g; # print STDOUT ("#**debug, redefine variable names, ", # "fields_in_data[$i]=",$fields_in_data[$i], "\n"); if ( $fields_in_data[$i] eq "time" and $format eq "new") { $fields_in_data[$i] = "yrday_local"; } elsif ( $fields_in_data[$i] eq "time" and $format eq "old") { $fields_in_data[$i] = "time_local"; } elsif ( $fields_in_data[$i] eq "pres" ) { $fields_in_data[$i] = "press"; } } # Output file comments if available (from new format only) if ($#save_for_comments >= 0 ) { pop @save_for_comments; #Remove line of field names foreach $comment (@save_for_comments) { # print STDOUT "# **debug, comment=$comment\n"; print STDOUT ("#",$comment,"\n"); } } # Determine field names that I know about and provide feedback if missing some NAMES: for ($i=0; $i <= $#fields_in_data; $i=$i+1) { foreach $name (@fieldnames) { # print STDOUT # "#**debug, compare # $i, $name with $fields_in_data[$i]\n"; next NAMES if $name eq ""; next NAMES if $name eq $fields_in_data[$i]; } print STDOUT ("#Warning in $0, for file $datafile\n", "# Cannot use field name $fields_in_data[$i]\n", "#", "Call the DMO\n"); push @notuse, $i; } push @notuse, -1; #In case all field names are okay # Output valid field names SKIP1: for ($i=0; $i <= $#fields_in_data; $i++) { foreach $j (@notuse) { if ($j == $i) {next SKIP1; } print STDOUT ($fields_in_data[$i]); if ( defined $qualifier[$i] ) {print STDOUT ($qualifier[$i]); } print STDOUT ("\t"); last; #printed out valid field name, end inner loop } } print STDOUT "\n"; #Read data from file and output while () { chomp; if ( m/^#/ ) { next; } # print STDOUT "#**debug, format=$format, next data read=$_\n"; if ($format eq "old") { $data[0]=$_; $data[0] =~ s/\s//g; for ($i=1; $i <= $numbfields; $i=$i+1) { $data[$i]=; $data[$i] =~ s/\s//g; # print STDOUT "#**debug -old fmt, data[$i]=$data[$i]\n"; } } else { # newformat @data = split /\s+/, $_; for ($i=0; $i <= $#data; $i=$i+1) { $data[$i] =~ s/\s//g; # print STDOUT "#**debug -new fmt, data[$i]=$data[$i]\n"; } if ($data[0] eq "" ) {shift @data; } } # output only valid field values SKIP2: for ($i=0; $i <= $#data; $i=$i+1) { foreach $j (@notuse) { next SKIP2 if $j == $i ; if ($fields_in_data[$i] eq "time_local" and $format eq "old") { $hour = int($data[$i]); if ( $hour < 1 ) {$hour='00'; } elsif ($hour < 10) {$hour='0' . $hour; } $min = ($data[$i] - $hour)*60 ; $min = sprintf "%6.2f", $min; $min =~ s/ //g; if ( $min < 10 ) {$min='0' . $min; } #has leading 0 # print STDOUT ("#**debug, data[$i]=$data[$i]\n"); $data[$i] = $hour . $min ; # print STDOUT ('#**debug, hour=', $hour, # ' min=', $min, " data[$i]=", # $data[$i], "\n"); print STDOUT "$data[$i]\t"; } else { print STDOUT "$data[$i]\t"; } last; } } print STDOUT "\n"; } close MOCDATA; exit 0;