[Script] Formatter un fichier plat à partir d'une clause copy

Formatter un fichier plat à partir d'une clause copy [Script] - Shell/Batch - Programmation

Marsh Posté le 21-02-2016 à 17:41:41    

Hello,
 
J'ai en sortie d'un traitement un fichier plat ayant par exemple cette tête là :
toto25122015ParisBoulanger
 
et un masque (clause copy) avec cette tête :
Prenom x(20)
Date de naissance 9(8)
Ville X(20)
Metier X(10)
 
je souhaiterais communiquer le résultat de façon plus lisible (en format csv par exemple) et j'aurai besoin d'inserer des séparateurs sur chaque ligne pour avoir :
toto;25122015;Paris;Boulanger;
 
 
Une idée de script simple (unix/vba ...) pour avoir ce type de résultat ?

Reply

Marsh Posté le 21-02-2016 à 17:41:41   

Reply

Marsh Posté le 22-02-2016 à 08:35:38    

Oh du Cobol !  ;)  
 
En VBA, c'est relativement simple, si ta copy n'est pas trop longue et ne change pas souvent, tu en fais un tableau fixe à deux dimensions (position début de champ, longueur).
 
Pour chaque ligne de ton fichier en entrée, tu découpes avec l'instruction Mid(ligne, position, longueur).
 
En fait tout dépend quels langages tu connais ...

Reply

Marsh Posté le 24-02-2016 à 22:43:14    

exact !
le fichier est créé par un programme cobol.
 
par contre, je ne connais pas trop le VBA, je me voyais plus le faire via un script shell mais comme la description est assez longue (+ de 50 champs), je cherche à automatiser la solution

Reply

Marsh Posté le 25-02-2016 à 08:36:45    

Pour l'avoir déjà fait, même si ta description est un peu longue mais ne change pas souvent, tu gagneras énormément de temps à la saisir dans un tableau fixe en working de ton script (peu importe le langage).
 
Un scanner de copy Cobol est assez galère à faire, du fait des multiples manière de coder les formats, les occurs, les COMP et autres joyeusetés ! :pt1cable:  
 
Et je n'ai pour l'instant trouvé aucun autre langage micro (Unix, Windows etc..) qui permette d'appliquer une clause copy sur un fichier à la manière du Cobol.
 
En VBA, je passe par des instructions du style  
Donnée = Mid(LigneEntière, debutDonnée, finDonnée) après avoir déterminé la longueur de chaque donnée grâce à la copy.

Reply

Marsh Posté le 25-02-2016 à 22:48:09    

ok, je vais tester cette soluce  
 
:jap:

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed