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 :

"cat" et les fichiers DB2


Sujet :

AS/400

  1. #1
    Nouveau membre du Club
    Inscrit en
    Mai 2008
    Messages
    17
    Détails du profil
    Informations forums :
    Inscription : Mai 2008
    Messages : 17
    Points : 33
    Points
    33
    Par défaut "cat" et les fichiers DB2
    Bonjour,

    j'ai un soucis avec la commande "cat" de QSH ...
    Elle affiche très bien certains fichiers DB2, et d'autres non.
    Après divers tests la piste s'orientait vers le CCSID du fichier, mais le problème vient du fichier lui-même : "cat" ne peut lire les fichiers à description externe (DDS)
    Débutant dans la maitrise de QSH, qui pourrait me dire quel utilitaire similaire à cat pourrait faire cela ?
    En espérant que ça existe ...

    Amicalement,

    James

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

    Informations forums :
    Inscription : Mai 2008
    Messages : 821
    Points : 1 084
    Points
    1 084
    Par défaut
    Je pense que ta demande est confuse.
    Tu sais faire un "cat" pour visualiser le contenu d'un fichier stream de l'IFS. OK.
    Tu cherches à utiliser "cat" pour regarder le contenu d'une table DB2 ?
    Quel est ton but exactement ?

  3. #3
    Nouveau membre du Club
    Inscrit en
    Mai 2008
    Messages
    17
    Détails du profil
    Informations forums :
    Inscription : Mai 2008
    Messages : 17
    Points : 33
    Points
    33
    Par défaut
    Bonjour K2R400,

    c'est bien ça, je cherche à faire un cat sur un fichier DB2 pour en voir le contenu depuis QSH.
    cat /qsys.lib/mylib.lib/myfile.file/mymbr.mbr

    Cela fonctionne bien pour les fichiers à CCSID 65535 non créés à partir de DDS.
    Mon but est de pouvoir en lire le contenu depuis QSH pour le rediriger via le pipe ( | ) vers le STDIN d'une commande de compression, afin d'obtenir un fichier compressé exploitable depuis un environnement Windows, QSH permettant une conversion EBCDIC / ASCII "à la volée" ...

    J'ai résolu cela en créant un fichier temporaire (CRTPF) qui donne les attributs adéquats à la lecture via la commande CAT. Je fais un CPYF NOCHK pour avoir les données du fichier original, et j'obtiens bien les données au format ASCII, compressées et lisibles depuis un serveur Windows.

    J'avais auparavent essayé touch -c xxx où xxx représente le CCSID du fichier IFS créé, mais la copie DB2 -> IFS est bien trop longue (cpytostmf, cpytoimpf, commande DB2, commande SQL, etc ...) et les fonctions de type SQL tronquent les 0 non significatifs présents dans mes fichiers DB2 ...

    Le plus rapide et fiable (au niveau données) que j'ai trouvé à ce jour reste le CPYF : on reste en DB2 / EBCDIC.

    Mais je reste ouvert à d'autres cheminements, si ils sont plus rapides / fiables / etc ... Notamment l'existence d'une commande "magique" qui permette de lire le contenu de fichiers créés à partir de DDS, depuis QSH :-)
    Cela m'éviterais le CRTPF et le CPYF, ce qui n'est pas négligeable en terme de temps et de nombre d'I/O, car forcément, les fichiers à zipper sont conséquents ...

    Amicalement,

    James

  4. #4
    Membre éprouvé
    Homme Profil pro
    Responsable de service informatique
    Inscrit en
    Octobre 2006
    Messages
    691
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Jura (Franche Comté)

    Informations professionnelles :
    Activité : Responsable de service informatique
    Secteur : Distribution

    Informations forums :
    Inscription : Octobre 2006
    Messages : 691
    Points : 996
    Points
    996
    Par défaut
    Pourquoi ne pas utiliser la commande CPYTOIMPF pour générer un fichier en ASCII et zipper alors le fichier résultant ?

  5. #5
    Nouveau membre du Club
    Inscrit en
    Mai 2008
    Messages
    17
    Détails du profil
    Informations forums :
    Inscription : Mai 2008
    Messages : 17
    Points : 33
    Points
    33
    Par défaut
    Bonjour m4k-Hurrican,

    Sauf erreur, cpytostmf ne permet de transformer un fichier DB2 à description externe vers un fichier plat dans l'IFS ...
    J'obtiens l'erreur CPDA082

    Amicalement,

    James

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

    Informations forums :
    Inscription : Mai 2008
    Messages : 821
    Points : 1 084
    Points
    1 084
    Par défaut
    Tu peux utiliser DB2 pour lire une table ex :

    Je recherche dans tous les membres sources du système la chaîne "FTP"

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     db2 "SELECT '#' X, '/QSYS.LIB/' concat trim(DBXLIB) concat '.LIB/' 
          concat trim(DBXFIL) concat '.FILE'      
          FROM QSYS.QADBXREF WHERE DBXTYP = 'S'"
    | while read -r line; do grep '^#' | S=$(sed s/#//g); 
    find $S -name '*.MBR' |xargs grep -l -y "FTP";
    done;
    ou encore du genre :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    A=$(db2 "select count(*) Nombre from qsys2.systables" 
        | sed -n '/--/{n; p;}')                           
    echo $A                                      
    4156

    Tu peux aussi utiliser rfile

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    rfile -r /qsys.lib/jsmiths.lib/numbers.file/numbers.mbr
    One
    Two
    Three
    Four
    Five
    
    rfile -br /qsys.lib/jsmiths.lib/numbers.file/numbers.mbr
    One Two Three Four Five
    
    rfile -r /qsys.lib/jsmiths.lib/numbers.file/numbers.mbr | od -tx1c
    0000000 000 000 000 001 0d6 095 085 025 000 000 000 002 0e3 0a6 096 025
    000 000 000 001 O n e 045 000 000 000 002 T w o 045
    0000020 000 000 000 003 0e3 088 099 085 085 025 000 000 000 004 0c6 096
    000 000 000 003 T h r e e 045 000 000 000 004 F o
    0000040 0a4 099 025 000 000 000 005 0c6 089 0a5 085 025
    u r 045 000 000 000 005 F i v e 045
    0000054
    
    rfile -r /qsys.lib/jsmiths.lib/numbers.file/numbers.mbr | tr '/[\000-\011]/' '/[0-9]/'
    0001 One
    0002 Two
    0003 Three
    0004 Four
    0005 Five

  7. #7
    Membre éprouvé
    Homme Profil pro
    Responsable de service informatique
    Inscrit en
    Octobre 2006
    Messages
    691
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Jura (Franche Comté)

    Informations professionnelles :
    Activité : Responsable de service informatique
    Secteur : Distribution

    Informations forums :
    Inscription : Octobre 2006
    Messages : 691
    Points : 996
    Points
    996
    Par défaut
    Citation Envoyé par James_uc Voir le message
    ...Sauf erreur, cpytostmf ne permet de transformer un fichier DB2 à description externe vers un fichier plat dans l'IFS ...
    Ce serait quand même fort que cette commande qui à la base est justement destinée à çà ne fonctionne pas ! Notre serveur principal en lance des dizaines chaque nuit pour exporter des tables.
    Exemple :
    CPYTOIMPF FROMFILE(MaBibl/MonFichierDB2)
    TOSTMF('\Repertoire\NomDuFichier.csv')
    MBROPT(*REPLACE)
    RCDDLM(*CRLF)
    FLDDLM(';')

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