|
Publicité ' | |||||||||||||||||||||||
|
|
#1 |
|
Invité de passage
![]() damien rabich Inscription : novembre 2010 Messages : 7 ![]() |
Sur MVS.
A partir d'un fichier séquentiel qui a cette forme : Info1 texte1=données1,texte2,texte3 texte1=données2,texte4,texte5 Info2 texte1=données3,texte4,texte3 Info3 texte1=données4,texte2,texte6 texte1=données5,texte2,texte6 texte1=données6,texte2,texte6 ... Je voudrai à l'aide de procédure en REXX (j'ai essayé avec des dfsort,iceman, icetool etc.. je n'ai pas réussi à obtenir ce que je voulais) obtenir un fichier de sortie de la forme ci-dessous : Info1,données1,données2 Info2,données3 Info3,données4,données4,données5 ... Auriez-vous des idées,solutions? J'ai cherché des docs sur le REXX mais il n'y en a pas tant que ça et je suis novice en la matière. NB : les champs info* sont de type variable tout comme données* le champ texte1= est fixe (13 caractères) Merci d'avance. |
|
|
00
|
|
|
#2 |
|
Membre actif
![]() Baptiste GRISEL Inscription : novembre 2009 Messages : 153 ![]() |
Bonjour,
Si tu as des délimiteurs dans tes données, c'est plutôt simple à faire. Il suffit de trouver la position de celui-ci et d'extraire tes données pour les concaténer et les écrire dans un fichier en sortie. |
|
00
|
|
|
#3 |
|
Invité de passage
![]() damien rabich Inscription : novembre 2010 Messages : 7 ![]() |
Pour trouver le champ Info*, il se trouve toujours après les caractéres * (astérisque et blanc) en position 1 et 2
=> donc Info* est en position 3 de longueur variable. Pour les champs données*, ils se trouvent toujours entre texte1= et , Auriez-vous une idée du code à utiliser en sachant cela? |
|
|
00
|
|
|
#4 |
|
Membre actif
![]() Baptiste GRISEL Inscription : novembre 2009 Messages : 153 ![]() |
Ca ne me parait pas insurmontable comme rexx à faire. Quelques ordres pos, length et substr ainsi que quelques boucles do et des if. Je pense que ça peut faire l'affaire.
Es-tu novice en programmation, connais-tu le langage REXX? J'aurai un peu de temps la semaine prochaine pour t'orienter de façon plus précise sur le code sauf si quelqu'un passe avant. |
|
00
|
|
|
#5 |
|
Invité de passage
![]() Antoine Inscription : janvier 2011 Messages : 3 ![]() |
Bonjour Damien.
A priori vous n'êtes pas un spécialiste du REXX sinon votre demande, banale en ce domaine, n'aurait pas lieu d'être. Pour faire court, REXX manipule des piles, votre fichier résultat doit donc être "monté" dans une pile. Ensuite chaque ligne de cette pile doit être manipulée pour conserver en mémoire les éléments (données) à extraire, afin de constituer un enregistrement composite. Plusieurs fonctions permettent de manipuler les lignes de façon à extraire les éléments cherchés (PARSING). Tip: WVAR1=WORD(FI.1,1) retourne dans WVAR1 le 1er mot de la 1ère ligne de la pile traitée (FI.1). Remarque: Dans une boucle si I est l'indice de balayage, on codera FI.I pour traiter la ligne I de la pile, sachant que FI.0 contient le nombre de lignes de la pile... Bref, à voir votre fichier, voici l'algo qu'on pourrait écrire Pour I=1 à FI.0 SI le caractère "=" n'est pas dans la ligne FI.I SI WINFO n'est pas vide ALORS écrire WINFO concaténé avec WDATA1 ... RàB des données de travail (W...) Récupération de WINFO Init de l'indice de données (j) FINSI SINON Eclater la ligne par rapport au signe "=" et au signe "," (donne donnéesx) ; j++; sauver dans la variable WDATA indicée par j FINSI FINPOUR Ecriture de la pile de travail sur le fichier en sortie... FIN Mais je peux comprendre que vous restiez sur votre faim. Allez, je suis inscrit sur ce forum pour aider tout un chacun. De ce fait, je vous propose de vous donner demain le code complet de cette routine REXX (je ne travaille plus en télé-travail le soir, 30 ans ça suffit, donc il vous faudra attendre demain soir...). Je dis ça mais après manger, je vais me connecter sur le Z-os du boulot et je vais me taper cette routine... Que voulez-vous, on ne se refait pas ;=) A plus tard... |
|
|
00
|
|
|
#6 |
|
Invité de passage
![]() damien rabich Inscription : novembre 2010 Messages : 7 ![]() |
Merci pour ce début de réponse, mais j'avoue ne pas tout comprendre dans ta réponse BiTonio car effectivement je suis totalement novice dans ce langage.
Auriez-vous un exemple de code sur lequel je puisse m'appuyer..? Toutes ces explications me semblent abstraites et j'avoue avoir besoin de pratiquer pour comprendre... Désolé pour cette réponse tardive mais si vous pouviez me donner un dernier coup de main... |
|
|
00
|
|
|
#7 | ||
|
Membre du Club
![]() Bernard Développeur et formateur Mainframe Inscription : février 2007 Messages : 39 ![]() |
Bonjour,
Voici un REXX qui devrait fonctionner (si j'ai bien compris la structure du fichier à traiter) Code :
N'hésitez pas à me dire si je n'ai pas été assez clair. |
||
|
|
00
|
Copyright © 2000-2012 - www.developpez.com