IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

AS/400 Discussion :

Modification de Zone dans QUERY400


Sujet :

AS/400

  1. #1
    Nouveau membre du Club
    Inscrit en
    Janvier 2009
    Messages
    7
    Détails du profil
    Informations forums :
    Inscription : Janvier 2009
    Messages : 7
    Par défaut Modification de Zone dans QUERY400
    Bonjour à tous,

    voici mon problème: J'ai un fichier (long 9) dans lequel j'ai une zone alphanumérique "TRUC". Dans cette zone, je cherche à récupérer les 2 derniers chiffres.
    Dans Query je défini une zone de résultat : zonetoto = substr(digits(TRUC), 8, 2)
    Il me faut absolument dans mon fichier de sortie que ma zonetoto soit numérique: comment convertir "zonetoto" en numérique???? Query semble ne pas connaitre la fonction DECIMAL. Comment faire????

    Merci pour votre aide!!!

  2. #2
    Membre Expert

    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    1 298
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 1 298
    Par défaut
    Citation Envoyé par cegedim
    ...comment convertir "zonetoto" en numérique????
    La fonction DIGITS() convertit du numérique en caractère et non pas l'inverse.
    La fonction DECIMAL() ou DEC() n'est pas supportée par Query/400.
    La seule façon que je connaisse pour convertir une zone caractère en numérique consiste à passer par une zone timestamp. C'est un artifice bien connu des vieux routards du Query/400.

    Règle :

    1/ Il ne faut pas que le nombre de chiffres à convertir dépasse 6.
    2/ Si la zone à convertir contient autre chose que des chiffres, le résultat est imprévisible.

    Méthode :

    Dans Query/400, sur l'écran "Definir les zones résultats" :

    1/ Isoler les deux derniers caractères
    CHIFFRES = substr(ALPHA, 8, 2)

    2/ Créer une nouvelle zone timestamp avec CHIFFRES
    TS = TIMESTAMP('2009-01-23-11.00.00.0000' !! CHIFFRES)

    3/ Convertir les microsecondes en numérique
    NUM = MICROSECOND(TS)

    La zone NUM contiendra alors les deux derniers caractères de la zone ALPHA convertis en décimal condensé (9P0).

  3. #3
    Membre émérite
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    821
    Détails du profil
    Informations personnelles :
    Âge : 55
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Mai 2008
    Messages : 821
    Par défaut strqm
    Ou aussi transformer ton Query/400 en Query Manager et ainsi tu pourras utiliser toutes les fonctions SQL existantes, dont la conversion en numérique, tout en gagnant en performance et avec un meilleur rendu des états spools.

  4. #4
    Nouveau membre du Club
    Inscrit en
    Janvier 2009
    Messages
    7
    Détails du profil
    Informations forums :
    Inscription : Janvier 2009
    Messages : 7
    Par défaut
    Merci à toi Mercure!!!
    J'ai testé cette astuce de vieux routard du Query, et c'est nickel. Je l'ai testé sur 2 caractères et je récupère bien le bon résultat.
    Par contre, sur 6 caractères j'obtient des caractères de remplacement "++++++++++++++++++++" comme si la zone ne peut etre convertie, calculée ou affichée???

    Merci également à K2R400 pour son astuce bien que je ne connaisse pas Query Manager (vous l'avez compris, j'suis dévoilé, j'suis novice....)

  5. #5
    Membre Expert

    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    1 298
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 1 298
    Par défaut
    Citation Envoyé par cegedim
    ...Par contre, sur 6 caractères j'obtiens des caractères de remplacement "++++++++++++++++++++" comme si la zone ne peut etre convertie, calculée ou affichée???
    Colle ici les définitions des zones résultats telles que tu les as construites, stp.

    Je pressens l'os...

  6. #6
    Nouveau membre du Club
    Inscrit en
    Janvier 2009
    Messages
    7
    Détails du profil
    Informations forums :
    Inscription : Janvier 2009
    Messages : 7
    Par défaut
    Voici les définitions de zones résultats:

    Zone Expression En-tête de colonne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    IMPUT           substr(bpfil1, 1, 6)                   IMPUT                
                                                                                
    HDA             substr(digits(bpcadh), 2, 6)           HDA 
    
    ATC             substr(digits(bpcadh), 8, 2)     
                                          
    CTA             TIMESTAMP('2009-01-23-11.00.00.0000' !! ATC)                      
    
    CONTRAT         MICROSECOND(CTA)                 
                                                 
    ADH             TIMESTAMP('2009-01-23-11.00.00.0000' !! HDA)   
    
    ADHERENT        MICROSECOND(ADH)
    Voila.

  7. #7
    Nouveau membre du Club
    Inscrit en
    Janvier 2009
    Messages
    7
    Détails du profil
    Informations forums :
    Inscription : Janvier 2009
    Messages : 7
    Par défaut
    En complément :
    bpfil1 est sur 8 caractères et bpcadh est sur 9 caractères (que des chiffres)

    La zone CONTRAT est bien sur 2 caractères mais le numéro d'adhérent (sur 6 caractères) me donne des "++++++++"

  8. #8
    Membre Expert

    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    1 298
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 1 298
    Par défaut
    C'est bien l'erreur que j'avais pressentie.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    HDA substr(digits(bpcadh), 2, 6) HDA  <-- ok
    ADH TIMESTAMP('2009-01-23-11.00.' !! HDA) <-- corrigé : 
    HDA fait 6 de long et remplace donc les microsecondes.
    ADHERENT MICROSECOND(ADH) <-- ok
    Une fois corrigé comme ci-dessus, ça va marcher...

    Un timestamp fait toujours 26 caractères de long et se compose de :
    • la date et l'heure au format ISO : YYYY-MM-DD-HH.MM.SS.
    • des microsecondes (1/1000000 de seconde) sur 6 caractères : MSMSMS

    As-tu compris pourquoi ça ne pouvait pas fonctionner comme tu l'avais écrit ?

  9. #9
    Nouveau membre du Club
    Inscrit en
    Janvier 2009
    Messages
    7
    Détails du profil
    Informations forums :
    Inscription : Janvier 2009
    Messages : 7
    Par défaut
    Merci Mercure,

    je pense avoir compris ton explication. Par contre, j'ai toujours le même résultat????

    I
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    MPUT   HDA        ADHERENT       CONTRAT 
    200902  000088  ++++++++++++            2 
    200902  000091  ++++++++++++            2 
    200902  000102  ++++++++++++            2 
    200902  000107  ++++++++++++            2 
    
    
    HDA             substr(digits(bpcadh), 2, 6)
    ADH   TIMESTAMP('2009-01-23-11.00.' !!  HDA)
    
    ADHERENT        MICROSECOND(ADH)

  10. #10
    Membre Expert

    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    1 298
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 1 298
    Par défaut
    Colle ici la définition de la zone BPCADH définie dans le fichier.

    Es-tu sûr que la colonne (la zone) BPCADH ne contient que des chiffres de la position 2 à la position 7 ?

    Pour t'en assurer, sélectionne les positions 2 à 7 de BPCADH dans ton Query/400 et contrôle le résultat.

    Tiens-nous au courant, please.

  11. #11
    Nouveau membre du Club
    Inscrit en
    Janvier 2009
    Messages
    7
    Détails du profil
    Informations forums :
    Inscription : Janvier 2009
    Messages : 7
    Par défaut
    BPCADH est une zone de mon fichier de départ. J'ai contrôlé, il n'y a que des chiffres.

    Voici son formatage de colonne:


    Zone avant col En-tête de colonne Long Déc

    BPCADH 2 CODE ADH/ENTRE/TP 9 0


    Séq Zone Texte Long Déc
    1 BPCADH CODE ADH/ENTRE/TP 9 0

    Le dessin de la zone BPCADH donne:
    CODE ADH/ENTRE/TP
    999.999.999

  12. #12
    Membre Expert

    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    1 298
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 1 298
    Par défaut
    ADH TIMESTAMP('2009-01-23-11.00.00.' !! HDA)

    J'ai oublié d'insérer les secondes (en rouge ci-dessus), voici pourquoi ça ne marche pas, caramba !

    Tu aurais pu rectifier de toi-même si tu avais vraiment compris l'astuce, non ?

  13. #13
    Nouveau membre du Club
    Inscrit en
    Janvier 2009
    Messages
    7
    Détails du profil
    Informations forums :
    Inscription : Janvier 2009
    Messages : 7
    Par défaut
    Effectiviement . J'avais pas fait gaffe...
    En tout cas : ça......MARCHEEEEEEEE!!!!!!!!
    Super et merci pour tout MERCURE!!!!

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Modif du '.' en ',' dans une zone de saisie
    Par pc400 dans le forum AS/400
    Réponses: 7
    Dernier message: 22/12/2010, 18h41
  2. Modification de lignes dans un fichier...
    Par Life Hunter dans le forum Langage
    Réponses: 11
    Dernier message: 25/08/2005, 01h37
  3. [JAR]Modification de fichier dans un jar
    Par vberetti dans le forum Général Java
    Réponses: 14
    Dernier message: 13/06/2005, 17h56
  4. Edition et modification d'icones dans firmware demodulateurs
    Par cachousam dans le forum Langages de programmation
    Réponses: 1
    Dernier message: 23/04/2005, 15h16
  5. [VB6] Modification objet OLE dans Word sous VB
    Par zworg dans le forum VB 6 et antérieur
    Réponses: 2
    Dernier message: 23/02/2004, 08h20

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo