#!/usr/local/bin/perl -w # # ctd_jk_level2.pl # John Klinck CTD data file processing routine - level 2 $version = "V1.00/March 28, 2003"; # March 28, 2003. V1.00. R.C. Groman # Copywrite 2003 Woods Hole Oceanographic Institution # Reads the data file specified as $ARGV[1]. Actual field names # for this, lowest level, come from the data file and are only # output if they match what is expected. # Passed parameter # $ARGV[0] = configuration file # $ARGV[1] = CTD data file, # Asuumptions # 1. The first section of the data file contains the field names and # the field names. unshift (@INC, "/data/rgroman/perllib"); require ('sendmessage.pl'); require ('make_log_entry.pl'); require ('read_configuration_file.pl'); require ('bob_setup.pl'); require ('bob_unsetup.pl'); require ('valid_number.pl'); &bob_setup(); $i_am_level=2; $| = 1; unless ( defined $ARGV[0] ) { print STDOUT ("$error Displayed by $0, $version\n", "$error Required configuration file not specified.\n"); exit; } $configuration_file = $ARGV[0]; @required = ( ); &read_configuration_file($configuration_file); $debug = 'no'; if (exists $config_param{'debug'} and defined $config_param{'debug'} ) { if ($config_param{'debug'} =~ m/^y/i or $config_param{'debug'} =~ m/^1/ or $config_param{'debug'} =~ m/^t/i) {; $debug = "yes"; } elsif ($config_param{'debug'} =~ m/^keep/i ) { $debug = "keep"; } } &make_log_entry (">>>>>>>Begin Program=$0", "Date of run=$date\tVersion=$version", "Configuration file=$configuration_file"); print STDOUT ("#Displayed by $0, $version\n"); unless (defined $ARGV[1] ) { &make_log_entry("Data file not passed along"); &sendmessage($error, "Required data file name not passed along", "Cannot continue"); exit; } $data_file = $ARGV[1]; print STDOUT ("# Data file is $data_file\n"); $status = ' '; foreach (@required) { unless (exists $config_param{$_} and defined $config_param{$_} ) { $status = $status . ' ' . $_; } } unless ($status eq ' ') { &make_log_entry( "Required configuration parameters not defined=$status"); &sendmessage($error, "Required configuration parameters $status", "not defined."); exit; } unless (open DATA, "$data_file" ) { $status = $!; &make_log_entry("Could not open data file=$data_file", "Status=$status", "Data file=$data_file"); &sendmessage($error, "Could not open data file $data_file", "Status was $status"); exit; } # Read data header and save local field names $numb_values = ; chomp $numb_values; $numb_values =~ s/\s//g; unless (&valid_number($numb_values) ) { print STDOUT ("#***debug, valid_number($numb_values), =", &valid_number($numb_values), "\n") if $debug eq 'yes'; &make_log_entry("First CTD data record not legal value=$numb_values"); return "Illegal number of field names was $numb_values"; } for ($i=1; $i<=$numb_values; $i++) { $record = ; chomp $record; ($field_name, $units) = split / R /, $record; $field_name =~ s/^ //g; $field_name =~ s/ {1,}$//; $data_file_field_position{$field_name} = $i - 1; print STDOUT ("#***debug, data_file_field_position{$field_name}=", $i-1, "\n") if $debug eq 'yes'; } undef $units; @valid_pointers = (); @expected_field_names = split /,/, $config_param{"field_names_level_$i_am_level"}; # Create valid data pointers by comparing expected data with input data # and output field names for use by JGOFS format. $j = 0; foreach $expected_field_name (@expected_field_names) { foreach $data_field_name ( keys %data_file_field_position) { $data_field_name =~ s/ /%/g; if (exists $config_param{$data_field_name} and defined $config_param{$data_field_name} ) { $field_name = $config_param{$data_field_name}; } else { $field_name = $data_field_name; } print STDOUT ("\n#***debug, expected_field_name=$expected_field_name,", " field_name=$field_name\n") if $debug eq 'yes'; if ($expected_field_name eq $field_name ) { push @valid_pointers, $j; print STDOUT ("\n#***debug, for field name=$field_name, ", "pointer added to valid values=$j\n") if $debug eq 'yes'; $j++; print STDOUT ("$field_name\t"); last; } } } print STDOUT ("\n"); # Read in data and output valid values when available. print STDOUT ("#***debug, valid_pointers=@valid_pointers\n") if $debug eq 'yes'; foreach $record () { chomp $record; $record =~ s/^ {1,}//s; print STDOUT ("#***debug, record=$record\n") if $debug eq 'yes'; @record = split / {1,}/, $record; print STDOUT ("#***debug, array record=@record\n") if $debug eq 'yes'; if ($debug eq 'yes') { for ($j=0; $j <= $#record; $j++) { print STDOUT ("#***debug, record[$j]=$record[$j]\n"); } } foreach $i (@valid_pointers) { print STDOUT ("$record[$i]\t"); } print STDOUT ("\n"); } close DATA; &make_log_entry ("<<<<<<