XSM FAQ

  1. Pourquoi le programme XSM s'appelle-t-il hxsm ?
  2. Problèmes communs d'activation de clé
  3. Activation de clé sous LPAR AIX, POWER6 Live Partition Mobility
  4. Comment connaitre la date d'expiration d'un programme XSM activé ?
  5. Dans un script, comment passer les noms de fichiers sous forme de variables ?
  6. Dans un script, comment passer les paramètres de tri sous forme de variables ?
  7. Peut-on combiner des options en ligne de commande et un fichier paramètre ?
  8. Peut-on combiner FILE=n et noms de fichier statiques dans un fichier paramètre ?
  9. Combien de fichiers maximum peut-on traiter avec FILE=n, SORTOFn ?
  10. Quand doit-on utiliser l'option KEEP_ORDER ?
  11. Dans un parmfile, les lignes d'instructions FIELDS, INCLUDE, EXCLUDE sont longues, peut-on les écrire sur plusieurs lignes ?
  12. Lorsque le fichier en entrée est vide, XSM fait une erreur XSM083E. Comment contourner ?
  13. Peut-on définir la ligne supprimée dans le cas d'un dédoublonage de fichier, par exemple prendre toujours la deuxième ?
  14. A quoi sert et comment fonctionne l'option Y2K ?
  15. Le séparateur de champs virgule 'FIELDSEP=,' provoque une confusion ; comment contourner ?
  16. Comment supprimer les informations écrites sur stderr ?
  17. Comment utiliser le multi-threading (XSM version 6) ?
  18. Peut-on utiliser XSM en réseau ?
  19. Comment désintaller XSM ?

REPONSES :

  1. Pourquoi le programme XSM s'appelle-t-il hxsm ?
    Pour ne pas induire de confusion avec le programme X11 Session Manager "xsm" d'UNIX
    

    Top of page
  2. Problèmes communs d'activation de clé
    XSM s'active avec une clé d'activation délivrée sur l'extranet XSM à partir d'un Serial Number.
    
    Lorsque vous téléchargez/copiez XSM sur une nouvelle machine, XSM affiche son Serial Number 
    en passant les commandes :
        ./hhnsinst[VER] ./hxsm[VER]     ( VER=version  exemple: hhnsinst656 hxsm656)
        ./hxsm[VER] 
    
    Exemple :
    
        [root@srv1 tmp]# ./hhnsinst656  hxsm656
        Program 'hxsm656' successfully installed
        [root@srv1 tmp]# ./hxsm656
        Thanks for testing the 'HHNS Sort/Merge Program MultiPRO - V.6' Program
        If you wish to register for the 'HHNS Sort/Merge Program MultiPRO - V.6' Product on THIS machine,
        just contact HHNS with the following registration (serial number) key :
    
                        0013-3432-1505-M
        For further informations : http://www.hhns.fr, email:support@hhns.fr
    
        Please press Enter to continue...
    
    Il faut alors générer sur l'Extranet une clé d'activation pour cette plateforme
    (une plateforme = hostname + Operating System + Serial Number).
    Puis activer XSM avec la clé d'activation obtenue, en passant la commande :
        ./hhnsinst[VER] ./hxsm[VER] cle_d_activation  ( VER=version  exemple: hhnsinst656 hxsm656)
    
    Exemple :
    
        [root@srv1 tmp]# ./hhnsinst656  hxsm656 1234-5678-9012-A
        Program 'hxsm656' successfully installed
    
    XSM est alors opérationnel. Lorsque vous le lancez sans aucun paramètre, il affiche son mode d'emploi.
    
    Problèmes fréquents : 
    • Lorsque vous passez la commande hhnsinst, vous n'indiquez pas le bon pathname du programme XSM ; par exemple, vous n'êtes pas positionné sur le répertoire contenant XSM, ou vous avez probablement mal tapé le nom du programme
    • Vous avez plusieurs programmes XSM dans le PATH ; lorque vous appelez XSM, c'est une version non activée qui se lance car elle est prioritaire dans le PATH
    • [UNIX] Vous n'avez pas les droits R/W sur le programme hxsm. dans ce cas, le programme d'installation hhnsinst fait une erreur.
    • Sur certains UNIX/Linux, il faut être superuser "root" pour passer les commandes d'activation.
    • L'Extranet refuse de générer une clé car le Serial Number est déjà dans sa base : Vérifiez que vous n'avez pas déjà déclaré une plateforme avec ce Serial Number. Si oui, il suffit de reconduire la clé, pour obtenir une nouvelle clé d'ativation (30 jours). Si non, contactez-nous.
    • L'Extranet refuse de générer une clé d'activation car vous avez déjà généré 3 clés d'activation : Contactez-nous.

    Top of page
  3. Activation de clé sous LPAR AIX, POWER6 Live Partition Mobility
    Up to version 6.79, XSM Serial Number is based on software and hardware details.
    Thus when an XSM binary is activated on a LPAR system, it is NOT possible to move LPAR to another
     hardware p/System without re-activating XSM (it will display a new Serial Number).
    
    From version 6.80, XSM Serial Number is no longer based on hardware.
    Once activated on a LPAR system, XSM will continue running when LPAR is moved to another hardware.
    
    

    Top of page
  4. Comment connaitre la date d'expiration d'un programme XSM activé ?
    
    $ hhnsinstVVV  -q  [pathname/]hxsmVVV    (VVV = la version)
    
    Exemple:
    
    $ hhnsinst680 -q /usr/local/bin/hxsm680
    0024-1095-6502-U D=18092012
     !                 !
     !                 +- expiration : 18 septembre 2012
     +-Serial Number
    
    Attention:
     - ne pas mélanger un hhnsinst 64-bits avec un XSM 32-bits XSM, et vice-versa.
     - indiquer le pathname correct de XSM si le binaire n'est pas sur le répertoire courant.
    
    

    Top of page
  5. Dans un script, comment passer les noms de fichiers sous forme de variables ?
    a) Avec un parmfile (fichier contenant les paramètres), utiliser les variables d'environnement
     SORTIN et SORTOUT associées au ordres INPFIL et OUTFIL : 
    
      myparm.xsm contient : 
        SORT     FIELDS=(14,7,B,A)
        RECORD   RECFM=V,LRECL=200
        INPFIL   DD:SORTIN
        OUTFIL   DD:SORTOUT
    
      Le script affecte les valeurs de SORTIN et SORTOUT avant l'appel à XSM :
        export SORTIN=/a/b/c/myinputfile
        export SORTOUT=/d/e/f/myoutputfile
        # Windows:  set SORTIN=/a/b/c/myinputfile
        # Windows:  set SORTOUT=/d/e/f/myoutputfile
        hxsm myparm.xsm
    
    b) En mode commande,
     
        A=/a/b/c/myinputfile
        B=/d/e/f/myoutputfile
        # Windows:  set A=/a/b/c/myinputfile
        # Windows:  set B=/d/e/f/myoutputfile
    
        # Ancienne forme : 
        hxsm -rF -l180 -k14,10,A,C  -o$B $A
        # Windows: hxsm -rF -l180 -k14,10,A,C  -o%B% %A%
    
        # Nouvelle forme : 
        hxsm --recfm=F --lrecl=180 --key=14,10,A,C --infile=$A --outfile=$B
        # Windows: hxsm --recfm=F --lrecl=180 --key=14,10,A,C --infile=%A% --outfile=%B%
    
        # On peut aussi utiliser les redirections UNIX stdin et stdout :
        hxsm --recfm=F --lrecl=180 --key=14,10,A,C < $A > $B
        # Windows: hxsm --recfm=F --lrecl=180 --key=14,10,A,C < %A% > %B%
        
       Nota Bene : XSM est plus performant si l'on spécifie le fichier en entrée car il peut déterminer
       dynamiquement la valeur optimale STORAGE. Si l'on utilise le standard input, XSM ne peut pas
       déterminer la taille du fichier en entrée et le STORAGE optimal.
    
       Dans un parmfile, on ne peut utiliser DD:SORTIN que s'il n'y a qu'un seul fichier en entrée.
       Autrement, il faut indiquer les noms de fichiers sous forme statique :
        SORT     FIELDS=(14,7,B,A)
        RECORD   RECFM=V,LRECL=200
        INPFIL   /a/b/c/myinputfile1
        INPFIL   /a/b/c/myinputfile2
        INPFIL   /a/b/c/myinputfile3
    

    Top of page
  6. Dans un script, comment passer les paramètres de tri sous forme de variables ?
    a) en mode commande, on suppose que le script a au préalable calculé les variables nécessaires
    
        RECFM=...
        LRECL=...
        KEYS=...
        hxsm --recfm=$RECFM --lrecl=$LRECL --key=$KEYS  --infile=$A --outfile=$B
    
    b) en construisant dynamiquement un fichier temporaire parmfile avant de lancer XSM
    
        # Creation du parmfile temporaire
        echo "
        **** parmfile temporaire /tmp/myparm.$$ ****
        SORT     FIELDS=($start1,$len1,C,A,$start2,$len2,C,A)
        RECORD   RECFM=$recfm,LRECL=$lrecl
        INPFIL   $A
        OUTFIL   $B
        "  > /tmp/myparm.$$
    
        # appel XSM
        hxsm /tmp/myparm.$$
    
        # suppression du temporaire si RC=0
        if [ $? -eq 0 ] ; then rm /tmp/myparm.$$ ; fi
    
    Nota : la méthode b) est recommandée pour faciliter la mise au point et la maintenance.
    

    Top of page
  7. Peut-on combiner des options en ligne de commande et un fichier paramètre ?
    Les options suivantes peuvent être ajoutées dans la commande : 
      -q, --quiet    : quiet
      -v, --verbose  : verbose
      -c, --check    : don't sort, just checks that a previous result is correctly sorted
    
    Les autres options qui définissent les noms de fichiers en entrée, en sortie, les clés de tri, les
    options de tri, les fichiers temporaires peuvent être passés en mode commande à condition que ces
    options ne figurent pas dans le parmfile.
    
    Nota bene : le parmfile doit être le dernier paramètre de la commande.
    
    Exemples :
    
     Le parmfile ne contient que les clés de tri et le format des fichiers en entrée et en sortie ; 
    les noms de fichers sont indiqués dans la commande :
    
      parmfile : 
        SORT     FIELDS=(10,8,,C,A)
        RECORD   RECFM=F,LRECL=100
    
      ligne de commande :
        hxsm -v myparm.xsm < /a/b/c/myinputfile > /d/e/f/myoutputfile 
    
     Le parmfile contient les clés de tri, le format des fichiers, et le nom du fichier en entrée ;
    le nom du fichier en sortie est indiqué dans la commande : 
    
      parmfile : 
        SORT     FIELDS=(10,8,,C,A)
        RECORD   RECFM=F,LRECL=100
        INPFIL   /a/b/c/myinputfile
    
      ligne de commande :
        hxsm -v -o /d/e/f/myoutputfile myparm.xsm
    
    
     Cet exemple de peut pas fonctionner : le fichier en sortie est spécifié à la fois en mode 
    commande et dans le parmfile !
    
      parmfile : 
        SORT     FIELDS=(10,8,,C,A)
        RECORD   RECFM=F,LRECL=100
        INPFIL   /a/b/c/myinputfile
        OUTFIL   /d/e/f/myoutputfile
    
      ligne de commande :
        hxsm -v -o /d/e/f/myoutputfile myparm.xsm
    

    Top of page
  8. Peut-on combiner FILE=n et noms de fichier statiques dans un fichier paramètre ?
    Non : dans un même parmfile, le ou les fichiers en sortie sont spécifiés par des ordres
        OUTFIL  nom_de_fichier
     ou OUTFIL  FILE=n
    mais on ne peut pas combiner ces deux formes dans un même parmfile.
    
    La forme OUTFIL FILE=n sert à indiquer des noms de fichiers qui ont été affectés par des variables
    d'environnement SORTOFn.
    
    Exemple : 
      parmfile : 
        SORT FIELDS=(3,3,CH,A,51,11,CH,A)
        RECORD RECFM=F,LRECL=402
        INPFIL /tmp/worldclients.inp
        OUTFIL /tmp/clients.fr,INCLUDE=(19,3,CH,EQ,C'.fr')
        OUTFIL /tmp/clients.uk,INCLUDE=(19,3,CH,EQ,C'.uk')
        OUTFIL /tmp/clients.de,INCLUDE=(19,3,CH,EQ,C'.de')
    
      ligne de commande :
        hxsm -v myparm.xsm
    
      équivalent à 
    
      parmfile : 
        SORT FIELDS=(3,3,CH,A,51,11,CH,A)
        RECORD RECFM=F,LRECL=402
        INPFIL /tmp/worldclients.inp
        OUTFIL FILE=1,INCLUDE=(19,3,CH,EQ,C'.fr')  # affeter la variable SORTOF1
        OUTFIL FILE=2,INCLUDE=(19,3,CH,EQ,C'.uk')  # affeter la variable SORTOF2
        OUTFIL FILE=3,INCLUDE=(19,3,CH,EQ,C'.de')  # affeter la variable SORTOF3
    
      ligne de commande :
        SORTOF1=/tmp/clients.fr
        SORTOF2=/tmp/clients.uk
        SORTOF3=/tmp/clients.de
        hxsm -v myparm.xsm
    

    Top of page
  9. Combien de fichiers maximum peut-on traiter avec FILE=n, SORTOFn ?
    99 fichiers. 
    
    Nota #1 : la première variable SORTOFn est toujours SORTOF1
    
    Nota #2 : l'ordre des variables doit être consécutif :
    
     Correct :
        SORTOF1=/tmp/clients.fr
        SORTOF2=/tmp/clients.uk
        SORTOF3=/tmp/clients.de
        hxsm -v myparm.xsm
    
     Incorrect :
        SORTOF1=/tmp/clients.fr
        SORTOF2=/tmp/clients.uk
        SORTOF4=/tmp/clients.de
        hxsm -v myparm.xsm
    
    Nota #3 : Si cela n'est pas suffisant, signalez-le nous et nous augmenterons la valeur.
    

    Top of page
  10. Quand doit-on utiliser l'option KEEP_ORDER ?
    cf. tris desctuctifs et non-destructifs
    

    Top of page
  11. Dans un parmfile, les lignes d'instructions FIELDS, INCLUDE, EXCLUDE sont longues, peut-on les écrire sur plusieurs lignes ?
    Oui : on peut écrire une instruction sur plusieurs lignes à condition de terminer par une virgule.
    
    Exemple :
    
        SORT  FIELDS=(011,003,CH,A,
                      001,010,CH,A,
                      015,114,CH,A,
                      014,001,CH,A)
        RECORD  RECFM=V,LRECL=263 
        EXCLUDE COND=(030,002,CH,EQ,C'L1',AND,
                      032,001,CH,EQ,C'1',
                      OR,
                      030,002,CH,EQ,C'L2',AND,
                      032,001,CH,EQ,C'2')
        INPFIL  DD:SORTIN
        OUTFIL  DD:SORTOUT
    
    Nota : dans l'expression COND=, l'opérateur booléen 'AND' est proritaire sur l'opérateur 'OR'.
           Vous pouvez rajouter des parenthèses pour une meilleure lisibilité : 
    
        EXCLUDE COND=((030,002,CH,EQ,C'L1',AND,
                       032,001,CH,EQ,C'1'),
                      OR,
                      (030,002,CH,EQ,C'L2',AND,
                       032,001,CH,EQ,C'2'))
    
    

    Top of page
  12. Lorsque le fichier en entrée est vide, XSM fait une erreur XSM083E. Comment contourner ?
    Que les données en entrées proviennent de stdin (standard input) ou d'un fichier nommé, XSM 
    attend des données à traiter.
    S'il peut arriver dans un traitement régulier que le fichier en entrée soit vide, alors il 
    convient de tester ce fichier avant de lancer XSM. Cela est trivial en Shell UNIX : 
    
        #
        # ... some step of a batch process .. 
        #
        INPUT=/a/b/c/myinputfile
        OUTPUT=/d/e/f/myoutputfile
        # input file is size 0 or does not exists:
        if [ -s $INPUT ] ; then
             echo "input file is empty ; nothing to do !"
             # if you need the output files anyway, then pretend they exist:
             > $OUTPUT
        # file is okay for processing:
        else
             hxsm --recfm=F --lrecl=180 --key=14,10,A,C --infile=$INPUT --outfile=$OUTPUT
        fi
        if [ $? -ne 0 ] ; then
            echo "error in SORT step"
        fi
    
    
    Pour le batch command processor Windows "cmd.exe", cela necessite quelques outils "UNIX-like" ; Dans 
    notre cas 'test.exe', une implemantation Windows de l'utilitaire UNIX 'test'.
    Nota: Perl est une bonne solution pour les scripts Windows (et facilement portable UNIX/Windows).
    
        Rem 
        Rem ... some step of a batch process .. 
        Rem
        set INPUT=C:\a\b\c\myinputfile
        set OUTPUT=C:\d\e\f\myoutputfile
        Rem input file is size 0 or does not exists:
        test -s %INPUT%
        if %ERRORLEVEL% 0 goto OK
        goto KO
    
        :KO
             echo input file is empty ; nothing to do !
             Rem if you need the output files anyway, then pretend they exist:
             ver 1>nul 2>OUTPUT
             goto NEXT
        :OK
        Rem file is okay for processing:
             hxsm --recfm=F --lrecl=180 --key=14,10,A,C --infile=%INPUT% --outfile=%OUTPUT%
             goto NEXT
    
    

    Top of page
  13. Peut-on définir la ligne supprimée dans le cas d'un dédoublonage de fichier, par exemple prendre toujours la deuxième ?
    Non, cela est impossible.
    

    Top of page
  14. A quoi sert et comment fonctionne l'option Y2K ?
    Le type Y ou Y2K indique qu'une clé de tri de type date contient des dates à la fois antérieures et
    postérieures à l'an 2000. XSM utilise alors l'année 70 (1970) comme année pivot pour déterminer si
    les dates sont du XXe ou du XXIe siècle. 
    
    Exemple : 
        120186 : 86 > pivot -> 12/01/1986
        120271 : 71 > pivot -> 12/02/1986
        120370 : 70 ≤ pivot -> 12/03/2070
        120468 : 68 < pivot -> 12/04/2086
        120507 : 68 < pivot -> 12/05/2007
        120601 : 68 < pivot -> 12/06/2001
    
    L'option Y2KSTART permet de choisir un autre pivot que 1970.
    
    Exemple: 
        OPTION Y2KSTART=1930
        SORT FIELDS=(11,2,Y2C,D,9,2,CH,D,7,2,CH,D,1,6,CH,A)
        RECORD RECFM=V,LRECL=80
        INPFIL clients.inp
        OUTFIL clients.out
    

    Top of page
  15. Le séparateur de champs virgule 'FIELDSEP=,' provoque une confusion ; comment contourner ?
    En effet, dans l'exemple suivant, XSM interprète la virgule comme un séparateur d'instruction et
    considère que le séparateur de champs est vide FIELDSEP=
    
        SORT VFIELDS=(4,5,N,A,1,20,C,D),FIELDSEP=,
        RECORD RECFM=V,LRECL=100
        INPFIL clients.csv
        OUTFIL clients.out
    
    Indiquer alors les mots-clés suivants : 
    
        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
     ou SEMI-COLUMN   = the ';' char
        SINGLEQUOTE
     ou SINGLE-QUOTE  = the "'" char
        DOUBLEQUOTE
     ou DOUBLE-QUOTE  = the '"' char
    
    ou indiquer la valeur hexadécimale : X'hh'   
    
    Exemples :
        SORT VFIELDS=(4,5,N,A,1,20,C,D),FIELDSEP=COMMA
        SORT VFIELDS=(4,5,N,A,1,20,C,D),FIELDSEP=X'2C'
    
    Si FIELDSEP n'est pas indiqué dans un ordre SORT VFIELDS, sa valeur par défaut est la tabulation
    (X'09').
    

    Top of page
  16. Comment supprimer les informations écrites sur stderr ?
    En utilisant l'option -q ou --quiet.
    L'intérêt du mode "Quiet" par rapport à la redirection 2>/dev/null est que dans le premier cas seuls
    les messages d'erreurs réels apparaitrons ; dans le second cas, tous les messages d'erreur seront 
    supprimés.
    
    Utilisateurs Windows : la redirection s'écrit 2>NUL
    
    Mode "Verbose" :
        ~/dev/ $ hxsm658 -v littlef.xsm
        XSM056I HXSM V6.58 - (c) HHNS 1996-2006
        XSM027I Initializing
        XSM028I Reading
        XSM073I 000000080 RECORDS PROCESSED, 000000080 so far.            :    0 SEC.
        XSM031I END OF JOB littlef.xsm                             80 rec.:    1 SEC.
        ~/dev/ $
    
    Mode normal : 
        ~/dev/ $ hxsm658  littlef.xsm
        XSM031I END OF JOB littlef.xsm                             80 rec.:    0 SEC.
        ~/dev/ $
    
    Mode "Quiet" : 
        ~/dev/ $ hxsm658 -q littlef.xsm
        ~/dev/ $
    

    Top of page
  17. Comment utiliser le multi-threading (XSM version 6) ?
    Par défaut, XSM fonctionne en mono-thread et n'utilise qu'un seul processeur à un instant donné.
    Si l'on déclare plusieurs sortworks (sous-entendu sur plusieurs disques différents), XSM fonctionnera
    en multi-threading et délivrera les meilleurs performances. C'est le système d'exploitation qui 
    associe alors dynamiquement les threads aux processeurs disponibles ("processor bind").
    
    Pour forcer le multi-threading, utiliser soit
        OPTIONS PROCS=n
    
    soit déclarer plusieurs sortworks (même si vous n'en avez pas plusieurs) :
        SORTWORKS dir1,dir2[,dir3 ...]
    
    Supposons par exemple que vous ayez une machine quadri-processeur, le plus interessant est de trouver 
    4 disques physiques différents pour les sortworks. Les I/O disques sont plus longues que les 
    traitements CPU, il n'est donc pas interessant d'exécuter XSM en multi-threading sur un même sortwork
    (ou sur des sortworks du même dique physique) : en effet, les threads seront bloqués par des
    contentions I/O disque et le résultat sera équivalent à un traitement mono-threading.
    

    Top of page
  18. Peut-on utiliser XSM en réseau ?
    Non : XSM ne fonctionne que sur le système sur lequel il a été activé. Un partage de disque contenant 
    le programme XSM vers une autre machine du réseau ne permet pas à cette autre machine d'utiliser XSM.
    D'autre part, il est déconseillé pour des raisons de performances de trier depuis une machine des
    fichiers sur des disques partagés d'une autre machine.
    Dans certains cas, il peut être plus performant de compresser / copier / décompresser ces fichiers.
    Cela dépend :
    - des performances du réseau
    - des performances des disques
    - des performances du processeur.
    

    Top of page
  19. Comment désinstaller XSM ?
    supprimez les 2 fichiers:
    
     UNIX:    rm  hxsm[numero_de_version] hhnsinst[numero_de_version]
    
     Windows: del hxsm[numero_de_version] hhnsinst[numero_de_version]
    
     Et voila!
    

    Top of page
Pour toute question, contactez-nous.