Difference between revisions of "AskPlus Release Information"

From Vital Soft Wiki
Jump to: navigation, search
>Johno
>Johno
Line 1: Line 1:
==AskPlus 8.4.0==
+
==AskPlus==
 +
 
 +
=== Version 8.4.0 - Beta Version Released August 25th, 2016 ===
 +
 
 +
:'''Enhancements:'''
 +
:* '''Updated''' Special Operators:
 +
::* '''!isdate(parm[, "format"])'''
 +
:::* Now returns True/False (K1) if parm is a valid date.  (Previously the actual date was returned when true.)
 +
:::* The format is now optional.  If not specified a CYMD format is assumed.
 +
:::* The original version is still available with the name '''!isdateorig'''
 +
 
 +
::* '''!isnum(parm)'''
 +
:::* Now returns True/False (K1) if parm is numeric.  (Previously the return value was the actual number, or 0.)
 +
:::* Any numeric '''parm''' returns True
 +
:::* An ASCII value that contains only digits and optional sign and decimal point returns True.
 +
::::(At least one digit is required.)
 +
:::* The original version is still available with the name '''!isnumorig'''
 +
 
 +
::* '''!getstr(str, "off, len") - See '''!mid''' (below)
 +
:::* Len is no longer required, default is the rest of the str (starting at off).
 +
:::* Offset can be passed as a numeric value (since len is no longer required).
 +
 
 +
::* '''!datext''' - new formats for displaying dates
 +
 
 +
:* '''New''' Special Operators:
 +
::* '''!isint(parm)'''
 +
:::* Similar to '''!isnum''' returns True/False (K1) if parm is '''integer'''.
 +
:::* If '''parm''' is type E or R - return False
 +
:::* If parm is any other numeric type - return True
 +
:::* An ASCII value that contains only digits and an optional sign returns True.
 +
::::(At least one digit is required.)
 +
 
 +
::* '''!mid(str, "off[,len]")''' - return a substring
 +
:::* Return the '''middle''' part of '''str''' for the specified '''off''' and '''len'''. ('''off''' is 1 based.)
 +
:::* If the '''len''' is not specified, the remainder of '''str''' is returned (starting at '''off'''.)
 +
:::* Functionally equivalent to '''!getsr()'''.
 +
 
 +
::* '''!left(str, len)''' - return a '''first''' len characters of a string
 +
:::* Return the '''left''' part of '''str''' for the specified '''len''' (off = 1).
 +
 
 +
::* '''!right(str, len)''' - return the '''last''' len characters of a string.
 +
:::* Return the '''right''' part of '''str''' for the specified '''len'''.
 +
:::* Trailing blanks are counted.  Use !right(!rtrim(str), len) to eliminate trailing blanks.
 +
 
 +
::* '''!trim(str)''' - return a  trimmed string
 +
:::* Trim leading & trailing blanks (and control characters < BLANK) from '''str'''.
 +
 
 +
::* '''!ltrim(str)''' - return a trimmed string
 +
:::* Trim all leading (left) blanks (and control characters < BLANK) from '''str'''.
 +
 
 +
::* '''!rtrim(str)''' - return a trimmed string
 +
:::* Trim all trailing (right) blanks (and control characters < BLANK) from '''str'''.
 +
 
 +
::* '''!upper(str)''' - return an upshifted string
 +
:::* '''Upshift''' all characters in '''str'''.
 +
:::* Functionally equivalent to '''!shift(str, "U")'''
 +
 
 +
::* '''!lower(str)''' - return an downshifted string
 +
:::* '''Downshift''' all characters in '''str'''.
 +
:::* Functionally equivalent to '''!shift(str, "D")'''
 +
 
 +
::* '''!initcap(str)''' - return an string using InitCap logic
 +
:::* '''Upshift''' the first character after each non letter in '''str'''  (Downshift all of the other characters.)
 +
:::* Similar to '''!shift(str, "I")''', except shift only upshifts after a BLANK, whereas initcap upshifts after every non alpha character.
 +
 
 +
          !initcap("PATRICK O'BRIEN") = "Patrick O'Brien"
 +
          !shift("PATRICK O'BRIEN", "I") = "Patrick O'brien"
 +
 
 +
::* '''!keepchar(str, chars)''' - return a string '''keeping''' only certain chars
 +
:::* Parse '''str''' and only '''keep''' the characters present in '''chars''' (all other characters are '''purged'''.)
 +
 
 +
::* '''!purgechar(str, chars)''' - return a string '''purging''' certain chars
 +
:::* Parse '''str''' and '''purge/drop''' any characters present in '''chars''' (all other characters are '''kept'''.)
 +
 
 +
          !purgechar(NAME, """'")  will purge all double and single quotes in NAME.
 +
 
 +
::* '''!replacechar(str, "c1c2")''' - return a string replacing chars
 +
:::* Parse '''str''' and replace all occurrences of '''c1''' with '''c2'''.
 +
:::* Only the first two characters of parm2 are used.
 +
 
 +
          !replacechar(NAME, """'")  will replace all double quotes in NAME with a single quote.
 +
 
 +
::* '''!minval(parm1, parm2)''' - return the min value using a '''numeric''' comparison
 +
:::* Return the smaller value (numerically) between '''parm1''' and '''parm2'''
 +
:::* Any ASCII parms are converted to P24 before the compare is done.
 +
 
 +
::* '''!maxval(parm1, parm2)''' - return the max value using a '''numeric''' comparison
 +
:::* Return the larger value (numerically) between '''parm1''' and '''parm2'''
 +
:::* Any ASCII parms are converted to P24 before the compare is done.
 +
 
 +
::* '''!minstring(parm1, parm2)''' - return the min value using a '''string/ASCII''' comparison
 +
:::* Return the smaller value (using a string comparison) between '''parm1''' and '''parm2'''
 +
:::* Any numeric parms are converted to ASCII before the compare is done.
 +
 
 +
::* '''!maxstring(parm1, parm2)''' - return the max value using a '''string/ASCII''' comparison
 +
:::* Return the larger value (using a string comparison) between '''parm1''' and '''parm2'''
 +
:::* Any numeric parms are converted to ASCII before the compare is done.
 +
 
 +
* New !DatExt Formats for Dates:
 +
    * Support a new !DatExt format to print formatted dates like Excel
 +
{{{
 +
!datext(intdate, "Ddd Mmmm d, yyyy") = "Wed August 3, 2016"
 +
!datext(intdate, "DDD MMM dd, yy") = "WED AUG 03, 16"
 +
}}}
 +
      * d & dd:  day (in month) in digits, dd will display leading 0 when day <= 9
 +
      * ddd & dddd: day name, ddd first 3 letters, dddd full name
 +
      * m & mm:  month in digits, mm will display leading 0 when month <= 9
 +
      * mmm & mmmm: month name, mmm first 3 letters, mmmm full name
 +
      * If DDD, DDDD, MMM, MMMM is all upper, then name will also be '''all upper case'''
 +
      * yy & yyyy:  year in digits, yy is two digit year, yyyy is 4 digit year
 +
 
 +
* New Format (Edit Mask) for Dates:
 +
    * The new !DatExt format described above can be used directly as a print format for dates (CYMD date format is assumed.)
 +
{{{
 +
D1, LOAN-FILE.DUE-DATE, "Ddd Mmmm d, yyyy", tab1
 +
}}}
 +
 
 +
:'''Fixes:'''
 +
:* Convert Bug (Float to Int), for example, "67.71" * 100 did not work. 
 +
:: In a few instances, reading a float from an ASCII file and converting to INT has a rounding error.
 +
:* Limit error messages in the selection to print a maximum of 50 times.
 +
:: Previously available in Report/Save, now also in Find.
 +
  * Rename !isnum() and !isdate() to !isnumorig() and !isdateorig()
 +
  * Create new versions of !isnum() and !isdate()
 +
      * Both !isnum() and !isdate() now return K1 ($FALSE or $TRUE)
 +
      * !isnum() uses !match internally.
 +
  * Fix !Even() on Itanium.
 +
      * Had to change a declaration from long to int32 (apparently long on Itanium is not int32)
 +
  * Fix !cymd_diff_mnths when one of the dates is EOM??
  
 
==AskPlus 8.3.3==
 
==AskPlus 8.3.3==

Revision as of 17:58, 24 August 2016

AskPlus

Version 8.4.0 - Beta Version Released August 25th, 2016

Enhancements:
  • Updated Special Operators:
  • !isdate(parm[, "format"])
  • Now returns True/False (K1) if parm is a valid date. (Previously the actual date was returned when true.)
  • The format is now optional. If not specified a CYMD format is assumed.
  • The original version is still available with the name !isdateorig
  • !isnum(parm)
  • Now returns True/False (K1) if parm is numeric. (Previously the return value was the actual number, or 0.)
  • Any numeric parm returns True
  • An ASCII value that contains only digits and optional sign and decimal point returns True.
(At least one digit is required.)
  • The original version is still available with the name !isnumorig
  • !getstr(str, "off, len") - See !mid (below)
  • Len is no longer required, default is the rest of the str (starting at off).
  • Offset can be passed as a numeric value (since len is no longer required).
  • !datext - new formats for displaying dates
  • New Special Operators:
  • !isint(parm)
  • Similar to !isnum returns True/False (K1) if parm is integer.
  • If parm is type E or R - return False
  • If parm is any other numeric type - return True
  • An ASCII value that contains only digits and an optional sign returns True.
(At least one digit is required.)
  • !mid(str, "off[,len]") - return a substring
  • Return the middle part of str for the specified off and len. (off is 1 based.)
  • If the len is not specified, the remainder of str is returned (starting at off.)
  • Functionally equivalent to !getsr().
  • !left(str, len) - return a first len characters of a string
  • Return the left part of str for the specified len (off = 1).
  • !right(str, len) - return the last len characters of a string.
  • Return the right part of str for the specified len.
  • Trailing blanks are counted. Use !right(!rtrim(str), len) to eliminate trailing blanks.
  • !trim(str) - return a trimmed string
  • Trim leading & trailing blanks (and control characters < BLANK) from str.
  • !ltrim(str) - return a trimmed string
  • Trim all leading (left) blanks (and control characters < BLANK) from str.
  • !rtrim(str) - return a trimmed string
  • Trim all trailing (right) blanks (and control characters < BLANK) from str.
  • !upper(str) - return an upshifted string
  • Upshift all characters in str.
  • Functionally equivalent to !shift(str, "U")
  • !lower(str) - return an downshifted string
  • Downshift all characters in str.
  • Functionally equivalent to !shift(str, "D")
  • !initcap(str) - return an string using InitCap logic
  • Upshift the first character after each non letter in str (Downshift all of the other characters.)
  • Similar to !shift(str, "I"), except shift only upshifts after a BLANK, whereas initcap upshifts after every non alpha character.
         !initcap("PATRICK O'BRIEN") = "Patrick O'Brien"
         !shift("PATRICK O'BRIEN", "I") = "Patrick O'brien"
  • !keepchar(str, chars) - return a string keeping only certain chars
  • Parse str and only keep the characters present in chars (all other characters are purged.)
  • !purgechar(str, chars) - return a string purging certain chars
  • Parse str and purge/drop any characters present in chars (all other characters are kept.)
         !purgechar(NAME, """'")  will purge all double and single quotes in NAME.
  • !replacechar(str, "c1c2") - return a string replacing chars
  • Parse str and replace all occurrences of c1 with c2.
  • Only the first two characters of parm2 are used.
         !replacechar(NAME, """'")  will replace all double quotes in NAME with a single quote.
  • !minval(parm1, parm2) - return the min value using a numeric comparison
  • Return the smaller value (numerically) between parm1 and parm2
  • Any ASCII parms are converted to P24 before the compare is done.
  • !maxval(parm1, parm2) - return the max value using a numeric comparison
  • Return the larger value (numerically) between parm1 and parm2
  • Any ASCII parms are converted to P24 before the compare is done.
  • !minstring(parm1, parm2) - return the min value using a string/ASCII comparison
  • Return the smaller value (using a string comparison) between parm1 and parm2
  • Any numeric parms are converted to ASCII before the compare is done.
  • !maxstring(parm1, parm2) - return the max value using a string/ASCII comparison
  • Return the larger value (using a string comparison) between parm1 and parm2
  • Any numeric parms are converted to ASCII before the compare is done.
* New !DatExt Formats for Dates:
   * Support a new !DatExt format to print formatted dates like Excel

{{{ !datext(intdate, "Ddd Mmmm d, yyyy") = "Wed August 3, 2016" !datext(intdate, "DDD MMM dd, yy") = "WED AUG 03, 16" }}}

     * d & dd:  day (in month) in digits, dd will display leading 0 when day <= 9
     * ddd & dddd: day name, ddd first 3 letters, dddd full name
     * m & mm:  month in digits, mm will display leading 0 when month <= 9
     * mmm & mmmm: month name, mmm first 3 letters, mmmm full name
     * If DDD, DDDD, MMM, MMMM is all upper, then name will also be all upper case
     * yy & yyyy:  year in digits, yy is two digit year, yyyy is 4 digit year
* New Format (Edit Mask) for Dates:
   * The new !DatExt format described above can be used directly as a print format for dates (CYMD date format is assumed.)

{{{ D1, LOAN-FILE.DUE-DATE, "Ddd Mmmm d, yyyy", tab1 }}}

Fixes:
  • Convert Bug (Float to Int), for example, "67.71" * 100 did not work.
In a few instances, reading a float from an ASCII file and converting to INT has a rounding error.
  • Limit error messages in the selection to print a maximum of 50 times.
Previously available in Report/Save, now also in Find.
  * Rename !isnum() and !isdate() to !isnumorig() and !isdateorig()
  * Create new versions of !isnum() and !isdate()
     * Both !isnum() and !isdate() now return K1 ($FALSE or $TRUE)
     * !isnum() uses !match internally.
  * Fix !Even() on Itanium.
     * Had to change a declaration from long to int32 (apparently long on Itanium is not int32)
  * Fix !cymd_diff_mnths when one of the dates is EOM??

AskPlus 8.3.3

Released to patch a critical bug dealing with database updates potentially causing data loss in older releases.

It is highly recommended to upgrade to AskPlus e.8.3.3 as soon as possible on any HPUX systems that run older versions and where UPDATES are run on eloquence data.

Along with the patches, several performance improvements where included when dealing with date comparisons.