nextwd |
Table of contents
ProcedureNEXTWD ( Next word in a character string ) SUBROUTINE NEXTWD ( STRING, NEXT, REST ) AbstractReturn the next word in a given character string, and left justify the rest of the string. Required_ReadingNone. KeywordsCHARACTER PARSING WORD DeclarationsIMPLICIT NONE CHARACTER*(*) STRING CHARACTER*(*) NEXT CHARACTER*(*) REST Brief_I/OVARIABLE I/O DESCRIPTION -------- --- -------------------------------------------------- STRING I Input character string. NEXT O The next word in the string. REST O The remaining part of STRING, left-justified. Detailed_InputSTRING is the input string to be parsed. Each word of this string is a maximal sequence of consecutive non-blank characters. Detailed_OutputNEXT is the first word in STRING. It is called the "next" word because NEXTWD is typically called repeatedly to find the words of the input string in left-to-right order. A word is a maximal sequence of consecutive non-blank characters. NEXT is always returned left-justified. If STRING is blank, NEXT is blank. NEXT may NOT overwrite STRING. REST is the remaining part of STRING, left-justified after the removal of NEXT. REST may overwrite STRING. ParametersNone. ExceptionsError free. 1) If the declared lengths of NEXT and REST are not large enough to hold the output strings, they are truncated on the right. FilesNone. ParticularsNEXTWD is used primarily for parsing input commands consisting of one or more words, where a word is defined to be any sequence of consecutive non-blank characters. Successive calls to NEXTWD, each using the previous value of REST as the input string, allow the calling routine to neatly parse and process one word at a time. NEXTWD cuts the input string into two pieces, and returns them separately. The first piece is the first word in the string. (Leading blanks are ignored. The first word, which is returned in the output argument NEXT, runs from the first non-blank character in the string up to the first blank that follows it.) The second piece is whatever is left after the first word is removed. The second piece is left justified, to simplify later calls to NEXTWD. ExamplesThe numerical results shown for this example may differ across platforms. The results depend on the SPICE kernels used as input, the compiler and supporting libraries, and the machine specific arithmetic implementation. 1) Given a character string, get the sequence of words within. Example code begins here. PROGRAM NEXTWD_EX1 IMPLICIT NONE C C SPICELIB functions. C LOGICAL EQSTR C C Local parameters. C INTEGER LINZS PARAMETER ( LINZS = 47 ) INTEGER WRDSZ PARAMETER ( WRDSZ = 5 ) C C Local variables. C CHARACTER*(WRDSZ) NEXT CHARACTER*(LINZS) REST CHARACTER*(LINZS) STRING REST = ' Now is the time, for all good men to come.' WRITE(*,'(A)') 'Next Rest of the string' WRITE(*,'(A)') '----- ---' . // '---------------------------------------' DO WHILE ( .NOT. EQSTR ( REST, ' ' ) ) STRING = REST CALL NEXTWD ( STRING, NEXT, REST ) WRITE(*,'(A5,2X,A)') NEXT, REST END DO END When this program was executed on a Mac/Intel/gfortran/64-bit platform, the output was: Next Rest of the string ----- ------------------------------------------ Now is the time, for all good men to come. is the time, for all good men to come. the time, for all good men to come. time, for all good men to come. for all good men to come. all good men to come. good men to come. men to come. to come. come. RestrictionsNone. Literature_ReferencesNone. Author_and_InstitutionN.J. Bachman (JPL) J. Diaz del Rio (ODC Space) K.R. Gehringer (JPL) W.L. Taber (JPL) I.M. Underwood (JPL) VersionSPICELIB Version 1.3.0, 19-MAY-2021 (JDR) (NJB) Added IMPLICIT NONE statement. Edited the header to comply with NAIF standard. Added complete code example based on the existing fragment. Updated header documentation. Added entry #1 in $Exceptions section. SPICELIB Version 1.2.0, 04-APR-1996 (KRG) Fixed a problem that could occur when STRING and REST are the same character string. Simplified the algorithm a bit while I was at it. Single character comparisons now make use of ICHAR to perform the comparisons as integers for speed. 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 (IMU) |
Fri Dec 31 18:36:35 2021