![]() |
XSM : eXtended Sort/Merge utility
by Henri Henault |
|
|
XSM Download Current stable release : 6.79 Beta release : n/a
Check XSM ChangeLog for last features and bug fixes.
CHANGE LOG | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
----------------------------------------------------------------------------
Notes for Version 6.79 :
18-Apr-2012
Bugs fixed:
1) SUN SPARC Solaris 5.8/5.10, IBM Power AIX 5.3, 6.1 : Wrong Memory allocation. Fixed.
2) SORTOFn for selective output (all systems). Fixed.
Misc:
Performance improvement again and again ...
/usr/bin/sort sz=1GB Elapse: 314 sec.
hxsm671_64 sz=1GB Elapse: 113 sec.
hxsm679_64 sz=1GB Elapse: 77 sec.
(IBM p510 lcpu=4 mem=7168MB ent=0.30 AIX6.1)
----------------------------------------------------------------------------
Notes for Version 6.78 :
05-Dec-2012
Bugs fixed:
1) SUN SPARC Solaris 5.8/5.10 : XSM007E_0174 Cannot open Input file. Fixed.
2) IBM Power AIX 5.3, 6.1 : Wrong Memory allocation when low available free memory. Fixed.
----------------------------------------------------------------------------
Notes for Version 6.77 :
01-Apr-2011
Bugs fixed:
1) OUTREC FIELDS format incorrectly parsed.
2) inputfile read error could occur on +30GB (SPARC Solaris)
Misc:
Performance improvement on Multitasking and I/O operations
Ex: sort 10 GB (100 millions records x 100 bytes, no sortwork), Intel Core2 E8500, 2GB Ram
Linux-64:
V671 : total 370 sec.
V677 : total 300 sec.
W32:
V671 : total 850 sec.
V677 : total 550 s.
New features:
API released. Included as part of XSM Software licence.
Delivered as static and dynamic libs + C/C++ header.
Compatible with all programing languages which are standard Link Edit compliant
(C, C++, VB, .Net, Pascal, ...)
----------------------------------------------------------------------------
Notes for Version 6.71 :
18-Feb-2010
Bugs fixed:
1) Text records too long and IOERROR IGNORE could cause a crash in sort operation.
2) Too many long file names in INPFIL statements caused a crash.
Buffer for input filenames was 4K, too short for +100 long pathnames.
Now use dynamic allocation : no more limit on number of input files.
3) VFIELDS (all systems) : on large files, following error could randomly occur:
"XSM063E The file xxxxx/srtw3254.03a is not sorted at record # yyy"
4) minor correction in INCLUDE/EXCLUDE operation precedence
New features added:
--skip-head=n : will drop the first n records of the first input file
Usefull to throw away a header/title
Minor updates :
1) Linux : no more need to be root to install hxsm
2) Any unknown parameter is flagged as an error [instead of ignored],
and the job is cancelled
3) if RECFM=V, the record length is automatically increased by 2,
thus permitting the user to give a LRECL without dealing with
'carriage-return' and 'line-feed' chars.
4) Memory, sortworks, threads optimization for huge files (+100GB)
----------------------------------------------------------------------------
Notes for Version 6.68 :
01-Apr-2009
Port to HP-UX 11i v3 IA64 Itanium (uname says: HP-UX B.11.31 U ia64 HP-UX)
----------------------------------------------------------------------------
Notes for Version 6.68 :
15-Mar-2009
Bug fixed:
- VFIELDS (all systems)
Major performance improvement. We now sort 1 Gigabyte in less than a minute on an inexpensive PC!
v6.62 : XSM031I END OF JOB 1gt.xsm 10000000 rec.: 80 SEC.
v6.68 : XSM031I END OF JOB 1gt.xsm 10000000 rec.: 42 SEC.
(Intel Core2 2.2Ghz, 2GB RAM, 1 x IDE 7500rpm, Solaris 10 x86)
----------------------------------------------------------------------------
Notes for Version 6.64 :
19-Feb-2009
Bug fixed:
- Free storage detection (AIX, Solaris)
- Thread stack size allocation (AIX)
- dynamic STORAGE allocation (all systems), affecting sortworks size + quantity
New features added:
Verbose mode (-vv) now shows real memory + working dirs + threads being used.
----------------------------------------------------------------------------
Notes for Version 6.62 :
07-Feb-2009
Bug fixed:
- OUTREC option
With this option, one can reformat the final output records with padding and constant fields,
and with selected fields from the sorted records.
Option may be speciped in 3 ways :
format #1 : command line option : --outrec=(specs[,specs...])
format #2 : Parameter file : OPTION OUTREC=(specs[,specs...])
format #3 : Parameter file : OUTREC FIELDS=(specs[,specs...])[,RECFM=...][,LRECL=...]
where specs ::= start,length[,type,offset]
start = field start in input record (mandatory, from 1)
length = field length (mandatory, may be < 0 for last field if RECFM T)
type = field type (optionnal)
offset = field offset in output record (optionnal, from 1)
If is omitted in 1st spec, they must be omitted in all specs,
and fields are concatened in output record
Example
hxsm ... '--outrec=(14,20,1,,..6)'
OPTION OUTREC=(14,20,1,6,...)
OUTREC FIELDS=(14,20,1,6,...)
are equivalent to :
hxsm ... '--outrec=(14,20,C,1,1,6,C,21,...)'
OPTION OUTREC=(14,20,C,1,1,6,C,21,...)
OUTREC FIELDS=(14,20,C,1,1,6,C,21,...)
---------------------------------------------------------------------------
Padding and constant fields:
The output record may include fields that are not in the corresponding input record.
These fields may be :
alpha-numeric fields, padded with a letter, a digit, a space, or any other byte
zoned-numeric fields, padded with a digit (most of time 0)
packed-numeric fields, padded with a digit (most of time 0)
In this case, 'specs' syntax are as follows:
1) any_char,length,S,offset : alpha field padded with spaces
example:
OPTION OUTREC=(...,X,10,S,42,...) # cols 42 to 51 padded with spaces
'--outrec=(...,X,10,S,42,...)' # same
2) letter,length,C,offset : alpha field padded with 'letter'
example:
OPTION OUTREC=(...,Z,10,C,42,...) # cols 42 to 51 padded with letter 'Z'
3) digit,length,N,offset : numeric field padded with 'digit'
example:
OPTION OUTREC=(...,0,10,N,42,...) # cols 42 to 51 padded with '0'
4) value,length,B,offset : alphanumeric field padded with byte decimal 'value' (0..255)
example:
OPTION OUTREC=(...,0,8,B,42,...) # cols 42 to 49 padded with binary zero
OPTION OUTREC=(...,20,8,B,42,...) # cols 42 to 49 padded with (ascii) space
OPTION OUTREC=(...,255,8,B,42,...) # cols 42 to 49 padded with HIGH-VALUE (255)
5) digit,length,P,offset : packed numeric field value 'digit'
example:
OPTION OUTREC=(...,0,3,P,42,...) # cols 42 to 44 = x'00000C' (packed 0)
OPTION OUTREC=(...,-1,3,P,42,...) # cols 42 to 44 = x'00001D' (packed -1)
6) digit,length,Z,offset : zoned numeric field value 'digit'
example:
OPTION OUTREC=(...,0,3,Z,42,...) # cols 42 to 44 = x'F0F0C0' (zoned ebcdic +0)
x'30307B' (zoned ascii +0)
OPTION OUTREC=(...,9,3,Z,42,...) # cols 42 to 44 = x'F0F0C9' (zoned ebcdic +9)
x'303043' (zoned ascii +9)
OPTION OUTREC=(...,-1,3,Z,42,...) # cols 42 to 44 = x'F0F0D1' (zoned ebcdic -1)
= x'303071' (zoned ascii -1)
----------------------------------------------------------------------------
hxsm V658 - Multitasking - Nov 2007 -
Supported platforms:
IBM pSeries RS6000 Power3-Power5 - AIX 4.3 AIX 5.2 : 32 bits
IBM pSeries RS6000 Power3-Power5 - AIX 5.3 : 32/64 bits
IBM Z-series - zLinux-390 (Suse 9) : 32 bits kernel=2.6.5
IBM Z-series - zLinux-390 (Suse 9) : 64 bits kernel=2.6.5
Intel Pentium - Linux 2.6 (>FC4) : 32 bits kernel>=2.6.11 glibc>=2.3.5
Intel Pentium - Win32 x86 (NT4, W2K, XP) : 32 bits
Sun SPARC Solaris 8, solaris 9, solaris 10 : 32/64 bits
Notes for Version 6.58 :
26-Oct-2007
Several bugs fixed:
- sortwork allocation (Solaris 8)
- dynamic STORAGE allocation (all systems)
- KEEP_ORDER (all Systems)
- improved traces for debug mode (All Systems)
----------------------------------------------------------------------------
Notes for Version 6.56 :
Nov-2006
This version is a major enhancement of XSM
A) New features added :
========================
1 - Almost all options can be used in a command line, using GNU style long options
(i.e. --lrecl=250 instead of -l 250 )
2 - New field types :
numeric ('N') : fixed length numeric fields with a leading floating sign
(-ie +1 -124 ....)
zoned decimal ('Z' or 'ZD') : fixed length numeric fields with a trailing sign
on the last digit ( "PIC S99999 USAGE IS DISPLAY" ) ...
Both methods (Microfocus-like and ACU COBOL-like) are supported.
Note: This is different from 'packed decimal' ('P' or 'PD', COBOL "COMP-3")
3 - Support of MicroFocus COBOL special variable format (known as "MFCOBOL" or "MFVariable") : RECFM=M
4 - Support of multiple format for all input files and the output file :
each input file may have its own record format (F,T,M) and its own record length
the output file may have its own record format (F,T,M) and its own record length
5 - Aditionnal parameter for OUTFILE :
DISP=O if output file exists, then overwrite (default)
DISP=A if output file exists, then append, else create
DISP=N if output file exists, then abort job (same as JCL's DD DISP=NEW)
7 - New 'OUTREC' parameter : records written to the output file may be rebuilt
from the input record, all or some fields, with a different order
8 - Bunch of new options :
--activation-key=your-activ-key # if you don't want to 'install' hxsm
--keep-order # if you want a Non-Destructive sort
--throw-empty-records # as you can expect ...
B) Bugs fixed:
===================
1) Option '-q' (new fashion : '--quiet') will cause XSM to exit silently
with a return code, whatever the cause of the error.
2) INCLUDE/EXCLUDE expressions containing constant C' ' (a blank) :
This caused stopping expression analysis.
This is now fixed
3) Fixed files : in some cases, XSM was writing the output file with blank records.
This is now fixed
C) New syntax for options and command line switches :
=====================================================
+--------------------------------------+---------------------------+------------------------------------------+
| Inside a Parmfile | Old switch | New switch |
| | | |
| SORT FIELDS=(s1,l1,typ1,A/D, ...) | -ks1,l1[,A/D[,typ1] -k... | [--sort] --key=s1,l1[A/D[,typ1] --key=...|
| | | |
| MERGE FIELDS=(...) | -m -k... -k... | --merge --key=.... --key=... |
| | | |
| RECORD RECFM=x,LRECL=nnnn | -rx -lnnnn | --recfm=x --lrecl=nnnn |
| | | |
| OUTFILE name[,RECFM=x[,LRECL=nnnn | -ooutfile | --outfile=name[,RECFM=x[,LRECL=nnnn |
| [,DISP=O/A/N]]] | | [,DISP=O/A/N]]] |
| | | |
| INFILE name[,RECFM=x[,LRECL=nnnn] | name name ...(last parms) | --infile=name[,RECFM=x[,LRECL=nnnn] ... |
| | | |
| SORTWORK dir1[,dir2...] | -tdir1[,dir2..] | --sortwork=dir1 --sortwork=dir2 ... |
| | | |
| STORAGE nnnK/M/G | -ynnnK/M/G | --storage=nnnK/M/G |
| | | |
| COLLATE=ASCII/EBCDIC | (none) | --collating-sequencxe=Ascii/Ebcdic |
| | | |
| OMIT DUPLICATE KEYS | -uk | --unique-key |
| OMIT DUPLICATE RECORDS | -ur | --unique-record |
| | | |
| INCLUDE COND=(s,l,op,const...) | (none) | --include=s,l,op,const[,AND/OR,...] |
| EXCLUDE COND=(s,l,op,const...) | (none) | --include=s,l,op,const[,AND/OR,...] |
| | | |
| IOERROR IGNORE | (none) | --throw-empty-records |
| | | |
| OPTION COPY | (none) | --copy |
| | | |
| OPTION NORUN | (none) | --norun |
| | | |
| OPTION KEEP_ORDER (*) | (none) | --keep-order |
| | | |
| OUTREC FIELDS=(fr_src,len,to_dst, | (none) | --outrec=fr_src,len,to_tgt,type,... |
| (*) typ[,fr_src,len,...)) | | |
+--------------------------------------+---------------------------+------------------------------------------+
(*) : new in version 6.5x
D) Sort/Merge Keys :
====================
FIELDS=(start,len,type,A/D,...) or --key=start,len,A/D,type --key=...
where type may be :
C or CH : Bytes, value 0..255 per byte
I : alpha-numeric field, mixed, where case (upper, lower) must be ignored
B or BI : same as CH in this version, but to avoid :
in future versions, BI may be used for binary values in half-words, words, double-words.
Z or ZD : 'Zoned' decimal, from COBOL 'PIC S99999... USAGE DISPLAY'
set of ascii digits '0'..'9', the last digit holds the sign, and is an ascii char.
P or PD : 'Packed' decimal, from COBOL 'PIC S99999... USAGE COMP-3'
set of BCD pairs of digits, the last pair holds the last digit and the sign.
N : 'Numeric' field, fixed length, with leading blanks and a floating (optional) sign '+/-'
E) Microfocus 'variable' files :
================================
An internal Microfocus 128 bytes header, plus a set af records.
Each record is prefixed by a 2-bytes length (Big Endian, 3xxx),
and is padded to an even number of bytes
Note : fields are defined from col. 1 = first significant bytes of the record (2-bytes length is dropped)
Those files are processed with RECFM=M (max length=4095)
F) Support of mixed files formats and logical records lengths :
===============================================================
For each input file or for the output file, you can specify its own record format (RECFM),
and its own logical record length :
INPFIL pathname,RECFM=F/T/M,LRECL=nnnn # parmfile
--infile=pathname,RECFM=F/T/M,LRECL=nnnn # command line
OUTFIL pathname,RECFM=F/T/M,LRECL=nnnn # parmfile
--outfile=pathname,RECFM=F/T/M,LRECL=nnnn # command line
You can also define a default record format and a default logical record length :
RECORD RECFM=F/T/M,LRECL=nnnn # parmfile
--recfm=F/T/M --lrecl=nnnn # command line
Rules :
if RECFM and/or LRECL is specified for a file, then they are taken in account as expected,
else
if there is a default RECFM and /or a default LRECL, then they are taken in account as expected,
else
default will be RECFM=T,LRECL=250
G) 'OUTREC' parameter :
=======================
This parameter allows building output records with selected fields in the input record.
OUTREC FIELDS=(start_in,length,start_out,type[,start_in...]) # parmfile
--outrec=start_in,length,start_out,type,... # command line
where :
start_in : offset (from 1) in the input record
length : field length, in byte
start_out: offset (from 1) in the output record
type : ignored, compatibility purpose
examples :
Building a 30 bytes output record with contiguous fields from cols. 12-14, 1-10, 14-30
from input record :
OUTREC FIELDS=(12,3,1,C,1,10,4,C,14,17,14,C) # parmfile
--outrec=12,3,1,C,1,10,4,C,14,17,14,C # command line
Building a 80 bytes output record with non-contiguous fields from cols. 12-14, 1-10, 14-30
from input record :
OUTREC FIELDS=(12,3,1,C,1,30,4,C,14,17,64,C) # parmfile
--outrec=12,3,1,C,1,10,4,C,14,17,14,C # command line
Note : 'holes' will be padded with blanks.
H) Non-destructive sort :
=========================
For each set of output records sharing the same sort keys, the original input order will be preserved.
This is done internally by adding the input record number as the last ('minor') sort key.
OPTION KEEP_ORDER # parmfile
--keep-order # command line
Note : this option is NOT compatible with '--unique-record', or '--unique-key'
K) Activation key :
====================
If you don't want to 'install' the hxsm program once for all using the supplied 'hhnsinst',
you may specify your activation at each run time :
OPTION KEY=XXXX-XXXX-XXXX-XXXX-K # parmfile
--activation-key=XXXX-XXXX-XXXX-XXXX-K # command line
This feature will be usefull when the XSM API will be released (soon ...), to run home-brewed
sort/merge applications on different workstations.
L) Multitasking ('Multi-threading') :
=====================================
This feature is usefull when sorting (not merging nor copying) large files.
Its purpose is to 'parallelize' the process of reading the input files by chunks,
then sorting and writing each chunk onto a sortwork file.
It gives pretty good performances when several sortwork physical drives are available.
XSM launch one subtask ('thread') per sortwork directory available, when specified.
If you have only one sortwork directory, or did not specify any (default = current directory),
XSM will NOT start multitasking.
You can force multitasking (for your own curiosity satisfaction) by specifying :
OPTION PROCS=n # parmfile
--procs=n # command line
where "n" is the the number of subtasks that XSM will launch (n=2..4 are good numbers)
When physical drives are managed by 'SAN-like', 'RAID-2', or 'VG/LV' subsystems, it may work well.
M) Following soon :
API (Application Programming interface)
Support of C-Isam Files
Feedback is welcome (support@hhns.fr)
HHNS XSM : Extended Sort/Merge Program,
PROfessionnal version multi-threading (V6)
PROfessionnal version (V5)
Basic version (V4)
Current versions: V5.30 (Pro) / V4.70 (Basic) - Fev 2006
Supported platforms :
IBM PowerPC - AIX 5.3 : 32/64 bits
Intel Pentium - Linux 2.6 (FC4) : 32 bits kernel=2.6.11 glibc=2.3.5
Intel Pentium - Linux 2.6 (FC2) : 32 bits kernel=2.6.5 glibc=2.3.3
Intel Pentium - Linux 2.4 (RH9) : 32 bits kernel=2.4.11 glibc=2.3.2
Intel Pentium - WXP/2K : 32 bits
IBM zNNNN - zLinux 2.6 (Suse9) : 32/64 bits kernel=2.6 glibc=2.3.3
Bug fixed:
===============
EXCLUDE/INCLUDE : last block of data was dropped when recfm=F
----------------------------------------------------------------------------
Notes for Version 4.66 / 5.26 :
30-Sep-2005
Supported platforms :
Linux-x86 - kernel 2.2, glibc 2.2.4 (RedHat 7.2)
(==== should run on ALL linux-i386 versions ===)
Linux-x86 - kernel 2.4, glibc 2.3.2 (RedHat 9)
Linux-x86 - kernel 2.6, glibc 2.3.3 (Fedora Core 2)
Win32 - NTFS (NT, 2K, XP) and FAT32 (NT, 2K, XP, 95, 98)
AIX-powerpc-4.3 32-bits
AIX-powerpc-5.3 32-bits
AIX-powerpc-5.3 64-bits
zLinux-S390 32-bits - kernel 2.6, glibc 2.3.3 (Suse 9)
zLinux-S390 64-bits - kernel 2.6, glibc 2.3.3 (Suse 9)
Sunos-sparc-5.8 32 bits
improved OUTFIL parameter (for compatibility with some SORT feature on Main Frames) :
1) Usage : you want to get multiple output files, depending on a selection
in the final output stream;
2) Syntax :
OUTFIL FILE=nn,INCLUDE=(startcol,length,type,operator,value)
or OUTFIL FILE=nn,EXCLUDE=(startcol,length,type,operator,value)
or OUTFIL FILE=nn,INCLUDE=ALL
where :
nn : 01 .. 99 = output file number, to be appended to the
ddname 'SORTOF' ( = system variable 'SORTOF')
startcol,length : field definition
type : always 'CH'
operator : one of 'EQ' 'NE' 'GT' GE' 'LT' 'LE'
value : C'...' = constant to be matched against the field
(You indeed may have several occurences of the same output record in different output files)
3) Example :
UNIX :
SORTIN="/indir/the_big_file" ; export SORTIN
SORTOF1="/outdir/code_01" ; export SORTOF1
SORTOF2="/outdir/code_02" ; export SORTOF2
SORTOF99="/outdir/code_03_99" ; export SORTOF99
Windows :
set SORTIN=D:\indir\the_big_file.dat
set SORTOF1=E:\outdir\code_01.dat
set SORTOF2=E:\outdir\code_02.dat
set SORTOF99=E:\outdir\code_03_99.dat
Parm file (all Oper.Systems) :
SORT FILEDS=(1,10,CH,A) ; --- sort input by costumer number
RECORD RECFM=V,LRECL=250
INPFIL DD:SORTIN ; --- define input file as a 'ddname'
; --- define 3 output files, depending on zip code col.37-38
OUTFIL FILE=1,INCLUDE=(37,2,CH,A,EQ,C'01') ; = ddname SORTOF1
OUTFIL FILE=2,INCLUDE=(37,2,CH,A,EQ,C'02') ; = ddname SORTOF2
OUTFIL FILE=99,INCLUDE=(37,2,CH,A,GE,C'03') ; = ddname SORTOF3
Run XSM (all Oper.Systems) :
hxsm526 -v myparms.xsm
The result will be ordered by col. 1-10 (for example, a costumer number),
and divided into 3 files, depending on col. 37-38 (for example, a zip code)
- 1st file ('code_1') will hold all records with code '01'
- 2nd file ('code_2') will hold all records with code '02'
- 3rd file ('code_03_99') will hold all other records.
WARNING :
IN THIS VERSION, THE OPTION "FILE=01 [02 .. 09]" WILL BE HELD AS "FILE=1 [2 .. 9]"
SO, LET YOU DEFINE THE VARIABLES AS 'SORTOF1', 'SORTOF2' ... 'SORTOF9'
AND NOT AS 'SORTOF01', 'SORTOF02' ... 'SORTOF09'
----------------------------------------------------------------------------
Notes for Version 4.65 / 5.25 :
01-Jul-2005
Bug fixed:
internal loop during merge operation on RECFM=F files
New OPTIONS subparameter:
OPTIONS NORUN
This will prevent XSM to really do the job.
Use it to check your parmfile.
Change in the format of the VFIELDS Parameter :
VFIELDS=.....,FIELDSEP=....
The FIELDSEP Subparameter value can be a symbolic name, or an hexadecimal value
Symbolic names accepted :
BAR = the '|' char
TAB = the Tabulation (X'09') char
COMMA = the ',' char
COLUMN = the ':' char
DIARESIS = the '#' char
SLASH = the '/' char
BACKSLASH = the '\' char
SEMICOLUMN or SEMI-COLUMN = the ';' char
SINGLEQUOTE or SINGLE-QUOTE = the "'" char
DOUBLEQUOTE or DOUBLE-QUOTE = the '"' char
Hexadecimal value : X'hh' (UPPERCASE X, SINGLEQUOTE, 2 Hex digits, SINGLEQUOTE)
Examples :
VFIELDS=(.....),FIELDSEP=SEMI-COLUMN
VFIELDS=(.....),FIELDSEP=X'7C'
By default, the FIELDSEP value is TAB (X'09')
----------------------------------------------------------------------------
Notes for Version 4.59 / 5.19 :
18-Nov-2004
Performances enhanced for large files (> 10GB)
Bugs fixed:
- INCLUDE/EXCLUDE/OMIT : new format
ex :
INCLUDE COND=(1,5,CH,EQ,C'AB CD',AND,21,2,LE,X'F2B3')
EXCLUDE COND=(11,6,CH,EQ,C'XYZ AB')
(note : previous format is obsolete)
- when binary files (RECFM F) are piped to hxsm's standard input,
a premature EOF was set on UNIX platforms
----------------------------------------------------------------------------
Notes for Version 4.57 / 5.17 :
18-Jul-2004
Bugs fixed:
- outfile not written when input file size = storage - epsilon
----------------------------------------------------------------------------
Notes for Version 4.56 / 5.16 :
26-Aug-2004
Several bugs fixed:
- 'out of memory' when sorting 'worst case' files (All systems).
- Seek error on some very large files (W32 only)
- improved performances on very large files (All Systems)
----------------------------------------------------------------------------
Notes for Version 4.55 / 5.15 :
14-May-2004
1) the documentation is updated (www.hhns.fr/products/xsm/fr/xqmqref.php
www.hhns.fr/products/xsm/en/xqmqref.php)
2) New OPTION statements
OPTION COPY
INCLUDE/EXCLUDE COND=(cond)
(see below for '(cond)' )
3) New OUTFIL statement
OUTFIL FILE=1,INCLUDE/EXCLUDE=(cond)
OUTFIL FILE=2,INCLUDE/EXCLUDE=(cond)
...
with :
FILE=n : the program will search an environment variable ('DDNAME')
of the form : SORTOFn=outfile_name (i=1,2,...)
and (cond) looking like :
(start,len,CH,OP,C'aaa...aaa',AND/OR,cond.... )
with 'OP' = one of EQ/NE/LT,LE,GT,GE
4) bugs fixed:
options OMIT DUPLICATE RECORDS/KEYS did not drop the first duplicate record/key
----------------------------------------------------------------------------
Notes for Version 4.51 / 5.11 :
25-Nov-2003
1) the documentation is updated (www.hhns.fr/products/xsm/fr/xqmqref.php
www.hhns.fr/products/xsm/en/xqmqref.php)
2) New OPTION statement
OPTION COLLATING=EBCDIC : will respect EBCDIC Collating sequence for :
- lower-case
- upper-case
- digits
3) Bug fixed:
Bad sort order for packed decimal fields when sign is xF instead xC or xD
----------------------------------------------------------------------------
Notes for Version 4.50 / 5.10 :
24-Aug-2003
1) the documentation is updated (www.hhns.fr/products/xsm/fr/xqmqref.php
www.hhns.fr/products/xsm/en/xqmqref.php)
2) New parameters for the SORT/MERGE statement
a) SORT FIELDS=all : will sort the entire records (no key definition)
(you must provide max len. record in LRECL=...)
b) SORT FIELDS=(start1,len1,A/D,start2,len2,A/D,...),FORMAT=BI
(if all fields are of the same type : BI, CH, ...)
3) DDNAME for INPFIL/OUTFIL :
the filenames in INPFIL/OUTFIL statements can be given as 'DD:somename'.
XSM will get the actual filename via the corresponding environment variable.
Ex :
INPFIL DD:SORTIN1,DD:SORTIN2
OUTFIL DD:SORTOUT
those two statements will cause XSM to search the actual filenames via a 'getenv'
for the environment variables "SORTIN1", "SORTIN2", "SORTOUT"
----------------------------------------------------------------------------
Notes for Version 4.48 / 5.08 :
19-May-2003
The version 5.08 can sort files larger than 2/4 GB.
The STORAGE parameter is no more needed : it is computed dynamically,
at best.
But when sorting very huge files ( > 64 GB ), it is safe to give a
STORAGE parameter less or equal to (total real storage - (64MB or 128MB)),
in order to avoid heavy paging.
----------------------------------------------------------------------------
Notes for Version 4.45 / 5.05 :
04-Feb-2003
Correct a bug giving some 'INTERNAL ERRORS' when sorting huge files
of small records, with 'IOERROR IGNORE' and keys larger than the
smallest record.
----------------------------------------------------------------------------
Notes for Version 4.44 / 5.04 :
18-Jan-2003
Correct a bug involving VFIELD's processing
----------------------------------------------------------------------------
Notes for Version 4.43 / 5.03 :
03-Jan-2003
Correct a bug in memory allocation when sorting more than one file
----------------------------------------------------------------------------
Notes for Version 4.42 / 5.02 :
11-Dec-2002
the 'STORAGE' parameter is computed dynamically. For most jobs, the
parameter is not needed.
You may override the result with your own 'STORAGE' parameter,
in case of very large files to sort, when you think you don't
have enough available storage, in order to avoid paging.
----------------------------------------------------------------------------
Notes for Version 4. / 5. :
Oct-2002
==> SUPPORT OF FILES LARGER THAN 2GB / 4GB :
tested with a 5 GB file on
- WinNT/4, sp6
- Win2k, sp1
- Linux 386, Kernel 2.4.13, glibc-6
- Linux 390, Kernel 2.4.17, glibc-6
Note : should run on W9x with a NTFS Driver (www.Winternals.com)
Please send bugs reports, or feelings to :
support@hhns.fr or mail@hhns.fr
Enjoy fast sort.
Henri Henault
| Contact | Company Info | Site map | Trademarks | Design Stéphane HENAULT © HH&S 1994-2010 | ![]() |