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 :

Fichier multi zones vers mono zone


Sujet :

AS/400

  1. #1
    Nouveau Candidat au Club
    Inscrit en
    Juillet 2009
    Messages
    3
    Détails du profil
    Informations forums :
    Inscription : Juillet 2009
    Messages : 3
    Points : 1
    Points
    1
    Par défaut Fichier multi zones vers mono zone
    Bonjour,
    Je cherche à ecrire les enregistrements d'un fichier multi zones (le fichier est de longueur totale N) dans un fichier mono zone de même longueur N.
    Je ne peux le faire en CLP par cpyf avec *Nochk car j'aimerai rajouter
    un champ supplementaire en sortie pour garder la clé.
    Exemple:
    Fichier origine |zone1|zone2|zone3|zone4|zone5 longueur fmt= 100
    Fichier cible |Zone1|Zone 1,2,3,4,5 longueur fmt 105 (zone1 + toutes les zones)
    J'ai essayer quelques trucs mais je suis un peu rouillé. Comment adapté les cartes D pour faire un Eval ou un Move.
    Si vous pouvez m'aider?
    Merci

  2. #2
    Membre régulier
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    91
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 91
    Points : 93
    Points
    93
    Par défaut
    Bonjour.

    Si tu parle de carte D, c'est que tu dois vouloir faire cela en RPG.
    Je te conseille donc le Free-RPG (source en RPGLE)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    /free
       Read fichierA;
       Dow Not %Eof;
           Clear FormatB;
           zoneB1 = Zonea1 + Zonea2 + Zonea3;
           zoneB2 = mavaleur;
           Write FormatB;
        Read fichierA;
        EndDo;
    /End-Free

  3. #3
    Membre expérimenté

    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
    Points : 1 578
    Points
    1 578
    Par défaut
    Citation Envoyé par rjmll
    Je cherche à ecrire les enregistrements d'un fichier multi zones (le fichier est de longueur totale N) dans un fichier mono zone de même longueur N.
    Peut-on savoir pourquoi tu as besoin d'un tel fichier ? Est-ce pour pouvoir l'exploiter sous Windows ou autre chose ?

    Remarque : Si tu ajoutes la clé, le fichier "mono" ne peut pas avoir la même longueur que le fichier "multi".

    Tel que présenté dans ta question ou sur le schéma de programme de lva30, si concaténation des zones, que se passe-t-il si le fichier d'origine contient des zones packées (décimal condensé (genre 5P 0), voire binaires ? Vas-tu les convertir en alphanumérique pour pouvoir faire la concaténation ?

  4. #4
    Nouveau Candidat au Club
    Inscrit en
    Juillet 2009
    Messages
    3
    Détails du profil
    Informations forums :
    Inscription : Juillet 2009
    Messages : 3
    Points : 1
    Points
    1
    Par défaut
    Merci pour vos messages. En effet le probleme est la conversion des zones packées. J'ai trouve une solution rapide avec un ETL. Je recupere le format en Metada et change toutes les zones en String puis je fais une concatenation. Ca marche nickel. La longueur en effet est differente . J'avais mis dans mon explication fmt du fichier cible 105 (Un champ cle de 5 + les 100 de toutes les autres zones. Je l'utilise pour faire du controle CRC (Comparaison de champ a champ et j'ai besoin de le manipule avec du SQL.
    Merci a vous tous

  5. #5
    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
    Create table qtemp/newtable as (select zone1, zone1 concat zone2 concat zone3 concat .... from monfichier where ..... order by zone1) with data

  6. #6
    Membre expérimenté

    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
    Points : 1 578
    Points
    1 578
    Par défaut
    En effet, SQL est certainement la meilleure solution, du moins la plus légère.
    Pour les zones packées, utilise la fonction sql DIGITS() qui convertit les zones décimal condensé en caractère.

    Si par exemple zone1 et zone3 sont packées, j'écrierais :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Create table MaBib/MaTable as (select DIGITS(zone1), zone1 concat zone2 concat DIGITS(zone3) concat .... from monfichier where ..... order by 1 ) with data

  7. #7
    Membre régulier
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    91
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 91
    Points : 93
    Points
    93
    Par défaut
    Citation Envoyé par Mercure Voir le message
    En effet, SQL est certainement la meilleure solution, du moins la plus légère.
    Pour les zones packées, utilise la fonction sql DIGITS() qui convertit les zones décimal condensé en caractère.

    Si par exemple zone1 et zone3 sont packées, j'écrierais :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Create table MaBib/MaTable as (select DIGITS(zone1), zone1 concat zone2 concat DIGITS(zone3) concat .... from monfichier where ..... order by 1 ) with data
    Qu'en est-il des zones spéciales genre horodatage ?

  8. #8
    Membre expérimenté

    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
    Points : 1 578
    Points
    1 578
    Par défaut
    Citation Envoyé par lva30
    Qu'en est-il des zones spéciales genre horodatage ?
    Tu indiques CHAR(MyTimestamp) au lieu de digits(MyTimestamp).

    En ce qui concerne les zones packées, DIGITS() les convertit en alphanumérique et cadre à gauche la zone en supprimant les zéros non significatifs alors que CHAR() les conserve.

  9. #9
    Nouveau Candidat au Club
    Inscrit en
    Juillet 2009
    Messages
    3
    Détails du profil
    Informations forums :
    Inscription : Juillet 2009
    Messages : 3
    Points : 1
    Points
    1
    Par défaut Merci a tous
    Bonjour,
    Merci pour vos reponses. J'ai fait des tests avec SQL mais je chercais une solution rapide car se faire des tables avec plus de 300 zones et affiner
    les requetes.....C'est fastidieux.

  10. #10
    Membre expérimenté

    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
    Points : 1 578
    Points
    1 578
    Par défaut
    Et si tu nous disais exactement pourquoi tu veux faire cette concaténation de zones, on pourrait probablement t'aider à trouver une solution facile à mettre en oeuvre, ce ne sont pas les options qui manquent...

    Tu parles de contrôle CRC. Peux-tu développer là-dessus ?

  11. #11
    Expert confirmé
    Homme Profil pro
    ANCIEN Consultant/Formateur/Développeur AS/400, iSeries, System i et Cobol
    Inscrit en
    Juin 2007
    Messages
    2 096
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : ANCIEN Consultant/Formateur/Développeur AS/400, iSeries, System i et Cobol
    Secteur : Conseil

    Informations forums :
    Inscription : Juin 2007
    Messages : 2 096
    Points : 4 155
    Points
    4 155
    Par défaut
    Bonjour.

    Si tu ne veux pas faire du SQL ni du RPG ni de QUERY, essaie cette méthode, elle a l'air de marcher :

    Fichier F1 de départ :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    0001.00      A*                                     
    0002.00      A          R FMT1                                             
    0003.00      A            Z1             2S                                   
    0004.00      A            Z2             1A                                   
    0005.00      A            Z3             5P 2                                 
    0006.00      A*                                                               
    0007.00      A          K Z1
    Fichier F2 pour dépacker Z3.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    0001.00      A*                                     
    0002.00      A          R FMT2                                             
    0003.00      A            Z1             2S                                   
    0004.00      A            Z2             1A                                   
    0005.00      A            Z3             5S 2                                 
    0006.00      A*                                                               
    0007.00      A          K Z1
    ==> CRTPF F2.
    ==> CPYF F1 dans F2 avec *MAP * DROP.

    Fichier F3 monozone sans clé avec long ZT = long Z1 + long Z2 + long Z3 (étendue).
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    0001.00      A*                                     
    0002.00      A          R FMT3                                             
    0003.00      A            ZT             8A
    ==> CRTPF F3.
    ==> CPYF F2 dans F3 avec *NOCHK.

    Fichier LOGIQUE F4 monozone plus la clé Z1P
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    0001.00      A          R FMT4                      PFILE(F3)
    0002.00      A*                                                               
    0003.00      A            Z1P                I      SST(ZT 1 2)               
    0004.00      A            ZT                                                  
    0005.00      A          K Z1P
    ==> CRTLF F4.
    ==> CPYF F4 dans F5 avec CRTFILE = *YES.

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

Discussions similaires

  1. Réponses: 5
    Dernier message: 09/07/2007, 19h07
  2. [VBA Word] Créer un lien vers une zone d'un fichier Excel
    Par hirochirak dans le forum VBA Word
    Réponses: 7
    Dernier message: 19/12/2006, 12h26
  3. [HTML] Supprimer le multi ligne d'une zone de text
    Par Furius dans le forum Balisage (X)HTML et validation W3C
    Réponses: 9
    Dernier message: 29/11/2005, 14h49
  4. Multi Format dans une zone de texte ou active x
    Par nowick dans le forum Access
    Réponses: 5
    Dernier message: 22/10/2005, 20h23
  5. Réponses: 11
    Dernier message: 24/07/2003, 09h24

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