Précédent   Forum des professionnels en informatique > Systèmes > Autres systèmes > AS/400
AS/400 Le Forum d'entraide sur IBM AS/400 - iSeries. RPG.
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 08/09/2011, 17h56   #1
Nouveau Membre du Club
 
Inscription : mai 2008
Messages : 16
Détails du profil
Informations forums :
Inscription : mai 2008
Messages : 16
Points : 25
Points : 25
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
James_uc est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/09/2011, 18h13   #2
Membre Expert
 
Patrick
Inscription : mai 2008
Messages : 821
Détails du profil
Informations personnelles :
Nom : Patrick
Âge : 42
Localisation : France, Hérault (Languedoc Roussillon)

Informations forums :
Inscription : mai 2008
Messages : 821
Points : 1 041
Points : 1 041
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 ?
K2R400 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/09/2011, 09h57   #3
Nouveau Membre du Club
 
Inscription : mai 2008
Messages : 16
Détails du profil
Informations forums :
Inscription : mai 2008
Messages : 16
Points : 25
Points : 25
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
James_uc est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/09/2011, 14h02   #4
Membre régulier
 
Inscription : octobre 2006
Messages : 111
Détails du profil
Informations forums :
Inscription : octobre 2006
Messages : 111
Points : 92
Points : 92
Pourquoi ne pas utiliser la commande CPYTOIMPF pour générer un fichier en ASCII et zipper alors le fichier résultant ?
m4k-Hurrican est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/09/2011, 16h34   #5
Nouveau Membre du Club
 
Inscription : mai 2008
Messages : 16
Détails du profil
Informations forums :
Inscription : mai 2008
Messages : 16
Points : 25
Points : 25
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
James_uc est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/09/2011, 22h33   #6
Membre Expert
 
Patrick
Inscription : mai 2008
Messages : 821
Détails du profil
Informations personnelles :
Nom : Patrick
Âge : 42
Localisation : France, Hérault (Languedoc Roussillon)

Informations forums :
Inscription : mai 2008
Messages : 821
Points : 1 041
Points : 1 041
Tu peux utiliser DB2 pour lire une table ex :

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

Code :
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 :
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 :
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
K2R400 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/09/2011, 07h24   #7
Membre régulier
 
Inscription : octobre 2006
Messages : 111
Détails du profil
Informations forums :
Inscription : octobre 2006
Messages : 111
Points : 92
Points : 92
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 :
Citation:
CPYTOIMPF FROMFILE(MaBibl/MonFichierDB2)
TOSTMF('\Repertoire\NomDuFichier.csv')
MBROPT(*REPLACE)
RCDDLM(*CRLF)
FLDDLM(';')
m4k-Hurrican est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 20h06.


 
 
 
 
Partenaires

Hébergement Web