This archive contains answers to questions sent to Unidata support through mid-2025. Note that the archive is no longer being updated. We provide the archive for reference; many of the answers presented here remain technically correct, even if somewhat outdated. For the most up-to-date information on the use of NSF Unidata software and data services, please consult the Software Documentation first.
Alex, > I have to read a NetCDF file in which a variable (LONGITUDE) is defined, with > attributes, but in the values part of the file there is no data for this > variable (the variable doesn't exist in fact) > > The code I user is : > > $l_varId = NetCDF::varid($p_file, $p_variable); > $l_status = NetCDF::varinq($p_file, $l_varId, \$l_name, \$l_datatype, > \$l_dimCount, \@l_dimIds, \$l_atts); > if ($l_status == -1) > { > Print "$p_variable doesn't exist\n"; > } > else > { > $l_status = $TRUE; > $l_dimSizes[$l_dimCount - 1] = undef; > NetCDF::diminq($p_file, $l_dimIds[0], \$l_name, \$l_dimSizes[0]); > NetCDF::varget($p_file, $l_varId, [0], [$l_dimSizes[0]], \@l_fileValues); > } > > And I get the following message : "ncvarget: ncid 10; varid 20: Index exceeds > dimension bound" and the script stops immediately. > > I tried the same with an "eval block" like ths : > > $l_varId = NetCDF::varid($p_file, $p_variable); > $l_status = NetCDF::varinq($p_file, $l_varId, \$l_name, \$l_datatype, > \$l_dimCount, \@l_dimIds, \$l_atts); > if ($l_status == -1) > { > Print "Error reading $p_variable\n"; > } > else > { > $l_status = $TRUE; > $l_dimSizes[$l_dimCount - 1] = undef; > NetCDF::diminq($p_file, $l_dimIds[0], \$l_name, \$l_dimSizes[0]); > eval > { > NetCDF::varget($p_file, $l_varId, [0], [$l_dimSizes[0]], \@l_fileValues); > }; > if($@) > { > CoScrReport::SendError("Variable $p_variable has no values : $@"); > } > } > > But I still have the same error message and the script stops. > > Questions : how can I catch the error to write an user friendly error > message and that the script doesn't stops immediately ? You have to use the NetCDF::opts(i) function to tell the netCDF library not to exit if an error occurs. Valid values are 0, NetCDF::FATAL (1), NetCDF::VERBOSE (2), or a bitwise OR of these values. I would call NetCDF::opts(0). > Thanks for your response. > > Best regards > > Alex THEPAUT Regards, Steve Emmerson Ticket Details =================== Ticket ID: GTU-862479 Department: Support netCDF Perl Priority: Normal Status: Closed