#!/usr/local/bin/perl -w # # nepctd_level0.pl # Serve NEP ctd data. Based on mocness_ctd scripts. # Sets up level 2 for CTD data object. # Bob Groman # October 18, 1999. V1.0 $version="v1.00/October 18, 1999"; # Passed parameters: # $ARGV[0] = datatype, e.g. NEP1 # $ARGV[1] - data file to process #some definitions $| = 1; $error="&x"; $warning="#"; $i_am_level = 2; print STDOUT "#Displayed by $0, $version\n"; $fieldnames_level[2]="/data/NEP/Support/fieldnames_level2"; $datafile=$ARGV[1]; print STDOUT "# Using data file $datafile\n"; # Read fieldnames allowed and save for later use if ($i_am_level != $#fieldnames_level) { $message0 = "At level $i_am_level rather than $#fieldnames_level"; $message1 = "\tin routine $0. Cannot continue."; &sendmessage ($error, $message0, $message1); exit 0; } for ($i=$i_am_level; $i <= $#fieldnames_level; $i++) { # print "STDOUT #**debug, fieldnames_level[$i]=$fieldnames_level[$i]\n"; unless (open FIELDNAMES, $fieldnames_level[$i]) { $message0 = "Could not get field names from $fieldnames_level[$i]"; $message1 = "Error=$!"; &sendmessage ($error, $message0, $message1); exit 0; } $j = 0; while ( ) { if ( m/^#/ ) { next; } chomp; $fieldnames[$j] = $_; $j++; } close FIELDNAMES; } # Remove field name attributes if present for ($i=0; $i <= $#fieldnames; $i=$i+1) { $qualifier[$i] = $fieldnames[$i]; $fieldnames[$i] =~ s/^(.*)\[.*/$1/; $qualifier[$i] =~ s/^.*(\[.*)/$1/; $fieldnames[$i] =~ s/\s+//g; $qualifier[$i] =~ s/\s+//g; if ($fieldnames[$i] eq $qualifier[$i]) {$qualifier[$i]="";} # print STDOUT ("#**debug, fieldnames[$i]=", $fieldnames[$i], ";", # " qualifier[$i]=", "$qualifier[$i];", "\n"); } # Read data file for comments and field names. unless (open CTDDATA, $datafile ) { &sendmessage( $error, "Could not open CTD data file $datafile", "Error=$!"); exit; } while ( ) { if (m/^#/ ) {next; } chomp; $record = $_; if ( m/^h *Comment/) { $record =~ s/^h *Comment:(.*)/$1/; $record =~ s/^\s//g; print STDOUT ("#",$record,"\n") if $record =~ m/\S/; next; } if ( m/^h *P/ ) { # Edit field names to replace blanks with underscores $record =~ s/POT T/POT_T/; $record =~ s/SP V AN/SP_V_AN/; $record =~ s/DYN HT/DYN_HT/; $record =~ s/ SIGMA / SIGMA_THETA /; $record =~ s/^h +//; # print STDOUT ("#**debug, record=$record;\n"); @fields_in_data = split /\s+/, $record; # for ($i=0; $i <= $#fields_in_data; $i=$i+1) { # $fields_in_data[$i] =~ s/\s//g; # print STDOUT ("#**debug, fields_in_data[$i]=", # "$fields_in_data[$i];\n"); # } last; } } # Determine field names that I know about and provide feedback if missing some @notuse = (); NAMES: for ($i=0; $i <= $#fields_in_data; $i=$i+1) { $fields_in_data[$i] =~ s/\s//g; if ($fields_in_data[$i] eq "" ) { &sendmessage ($warning, "Null field name in data", "in file $datafile. DMO contacted."); next NAMES; } foreach $name (@fieldnames) { # print STDOUT # "#**debug, compare # $i, $name with $fields_in_data[$i]\n"; next NAMES if $name eq $fields_in_data[$i]; } $message0 = "Cannot use field name $fields_in_data[$i]."; $message1 = "The Data Management Office has been contacted."; &sendmessage ($warning, $message0, $message1); 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/^#/ or m/^h/ ) { next; } @data = split /\s+/, $_; for ($i=0; $i <= $#data; $i=$i+1) { $data[$i] =~ s/\s//g; # print STDOUT "#**debug, 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 ; print STDOUT ("$data[$i]\t"); last; } } print STDOUT "\n"; } close CTDDATA; undef $error; undef $warning; exit 0; #--------------------------------------------------------------------------- sub sendmessage { #Send a message to the user. #The message sent will be in the strings $_[1] and $_[2] #The prefix string is in $_[0] my ( @args, $mailfile, $message0, $message1, $prefix, $who); my ($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst); $prefix=$_[0]; $message0=$_[1]; $message1=$_[2]; ($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst)=localtime(time); if ($year > 97 and $year < 100 ) {$year = $year + 1900; } $mon++; if ($mon < 10) { $mon = "0" . $mon; } if ($mday < 10) {$mday = "0" . $mday; } if ($hour < 10) { $hour = "0" . $hour; } if ($min < 10) { $min = "0" . $min; } if ($sec < 10) { $sec = "0" . $sec; } $mailfile=">/tmp/sendmess" . $year . $yday . $hour . $min . $sec . ".tmp"; if ( open TEMPFILE, $mailfile) { if ( exists $ENV{'REMOTE_HOST'} ) {$who=$ENV{'REMOTE_HOST'} ; } elsif (exists $ENV{'REMOTE_ADDR'} ) {$who=$ENV{'REMOTE_ADDR'} ; } else {$who="not available"; } print TEMPFILE ("Message from $0\n"); print TEMPFILE (" Date of message: $year/$mon/$mday $hour:$min\n"); print TEMPFILE (" From: $who\n"); print TEMPFILE (" $message0\n"); print TEMPFILE (" $message1\n"); close TEMPFILE; `/usr/bin/mail -w dmo\@globec.whoi.edu <$mailfile`; unlink $mailfile; } print STDOUT ($prefix,"Message from $0\n"); print STDOUT ($prefix," Date of message: $year/$mon/$mday $hour:$min\n"); print STDOUT ($prefix," $message0\n"); print STDOUT ($prefix," $message1\n"); return; }