Index of Functions: A  B  C  D  E  F  G  H  I  J  K  L  M  N  O  P  Q  R  S  T  U  V  W  X 
Index Page
nparsi

Table of contents
Procedure
Abstract
Required_Reading
Keywords
Declarations
Brief_I/O
Detailed_Input
Detailed_Output
Parameters
Exceptions
Files
Particulars
Examples
Restrictions
Literature_References
Author_and_Institution
Version

Procedure

     NPARSI ( Integer parsing of a character string)

     SUBROUTINE NPARSI (  STRING,  N, ERROR, PNTER)

Abstract

     Parse a character string that represents a number and return
     the FORTRAN-truncated integer value.

Required_Reading

     None.

Keywords

     ALPHANUMERIC
     CONVERSION
     PARSING

Declarations

     IMPLICIT NONE

     CHARACTER*(*)    STRING
     INTEGER          N
     CHARACTER*(*)    ERROR
     INTEGER          PNTER

Brief_I/O

     VARIABLE  I/O  DESCRIPTION
     --------  ---  ---------------------------------------------------
     STRING     I   Character string representing a numeric value.
     N          O   Translated integer value of STRING.
     ERROR      O   Message indicating what errors have occurred.
     PNTER      O   Position in character string where an error
                    occurred.

Detailed_Input

     STRING   is a character string that represents a numeric value.
              Commas and spaces may be used in this string for
              ease of reading and writing the number. They
              are treated as insignificant but non-error-producing
              characters.

              For exponential representation and of the characters
              'E','D','e','d' may be used.

              The following are legitimate numeric expressions

               +12.2 e-1
               -3. 1415 9276
               1e12
               E10

              The program also recognizes the following  mnemonics
              'PI', 'pi', 'Pi', 'pI'
              '+PI', '+pi', '+Pi', '+pI'
              '-PI', '-pi', '-Pi', '-pI'
              and returns the value ( + OR - ) 3 as appropriate.

Detailed_Output

     N        integer parsed value of input string  ( with
              the implied limits on precision).  If an error is
              encountered, N is not changed from whatever the
              input value was. If the input string has a fractional
              part, the fractional part will be truncated. Thus
              3.18 is interpreted as 3.  -4.98 is interpreted as -4.

     ERROR    this is a message indicating that the string could
              not be parsed due to ambiguous use of symbols or
              due to a string representing a number too large for
              VAX double precision or integer variables. If no
              error occurred, ERROR is blank.

              In particular, blank strings, or strings that do not
              contain either a digit or exponent character will
              be regarded as errors.

     PNTER    this indicates which character was being used when
              the error occurred. If no error occurred, PNTER is 0.

Parameters

     None.

Exceptions

     Error free.

     1)  If the string is non-numeric, PNTER indicates the location in
         the string where the error occurred, and ERROR contains a
         descriptive error message.

     2)  If the string is blank, ERROR is returned with a message
         indicating the problem and PNTER will have a non-zero value.

     3)  If the string represents a number that is outside the range of
         representable integers, as defined by INTMIN() and INTMAX(),
         ERROR is returned with a message and PNTER is set to the value
         1, as the entire numeric string is at fault.

Files

     None.

Particulars

     Basically, all this routine does is pass the input string to
     NPARSD which does the parsing in double precision. If nothing
     goes wrong in the double precision parsing of the number, the
     returned value is checked to determine whether or not it will fit
     into a VAX integer. If it doesn't, an error message is returned.

Examples

     Let   LINE = 'DELTA_T_A       =   32'

     The following code fragment parses the line and obtains the
     integer value.


        CALL NEXTWD ( LINE,  FIRST,  REST )
        CALL NEXTWD ( REST, SECOND,  REST )
        CALL NEXTWD ( REST,  THIRD,  REST )

        CALL NPARSI (  THIRD,  VALUE, ERROR, POINTR )

Restrictions

     None.

Literature_References

     None.

Author_and_Institution

     J. Diaz del Rio    (ODC Space)
     K.R. Gehringer     (JPL)
     H.A. Neilan        (JPL)
     W.L. Taber         (JPL)

Version

    SPICELIB Version 2.2.0, 12-AUG-2021 (JDR)

        Added IMPLICIT NONE statement.

        Edited the header to comply with NAIF standard. Removed
        unnecessary $Revisions section.

    SPICELIB Version 2.1.0, 29-APR-1996 (KRG)

        This subroutine was modified to return a non-zero value of
        PNTER when the value returned by NPARSD is not a representable
        integer, as defined by INTMIN() and INTMAX(). The value
        returned is one (1), since the entire input string was not
        correct.

        The test for an error from NPARSD was also changed. It now
        uses the integer PNTER returned from NPARSD rather then the
        character string ERROR. This should pose no problems because
        PNTER is non-zero if and only if there was an error and an
        error message was assigned to ERROR.

        Some extra, and unnecessary, assignments were deleted. The
        assignments were:

           X = DBLE ( N )

           ERROR = ' '

        which converted the input argument into a double before
        calling NPARSD with X and initialized the error message
        to be blank. NPARSD sets the value for X, ERROR, and PNTER
        unless an error occurs, in which case X is not changed.
        So, it is not necessary to initialize ERROR, PNTER, or X.

        Finally, the values of INTMIN and INTMAX are only set on the
        first call to the routine. They are now SAVEd.

    SPICELIB Version 2.0.0, 15-OCT-1992 (WLT)

        The abstract of this routine was modified to reflect what
        the routine actually does---truncate the value to an
        integer.

        In addition, a blank string is no longer considered to be
        valid input.

        Finally the instances of DFLOAT in the previous version were
        replaced by the standard intrinsic function DBLE and the
        function DINT was replaced by IDINT in one place to make types
        match up on both sides of an assignment.

    SPICELIB Version 1.0.1, 10-MAR-1992 (WLT)

        Comment section for permuted index source lines was added
        following the header.

    SPICELIB Version 1.0.0, 31-JAN-1990 (WLT) (HAN)
Fri Dec 31 18:36:35 2021