Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.
Icône de la ressource

CSV_FB_2TS :: Transformer un fichier de longueur fixe en tableau structuré 1.0

Cet outil fait suite à celui permettant d'importer un fichier avec séparateur dans un tableau structuré Excel disponible ici : https://excel-downloads.com/resources/cvs2ts-import-csv.1463/

En effet certains progiciels mettent à disposition des fichiers avec des champs de longueur fixe sans séparateur et sans titre de colonne. Ceci est aussi le cas pour certains fichiers issus de Mainframe (site centraux).
Ils peuvent se présenter comme ceci - exemple :



Bien entendu Excel fourni des outils pour effectuer un découpage mais cela reste artisanal. Il y a un bien entendu la solution de lire le fichier texte ligne à ligne en VBA puis effectuer le découpage de l'enregistrement et l'insérer dans les cellules. Ca c'était une des solutions avant PowerQuery.

PowerQuery va donc nous sauver. Faut-il encore le maîtriser ou en avoir quelques connaissances

Cet outil vous simplifie la tâche et il réalise le code M de PowerQuery automatiquement.

Il se présente comme suit :


Cet écran représente la description du fichier donné en exemple plus haut.

Fonctionnement de l'outil

--> Sélection du fichier à traiter


--> Le nom du fichier en sortie est calculé automatiquement

Après avoir sélectionner à traiter il est obligatoire de décrire sa structure :
- Nom des champs
- Longueur

comme suit


La colonne [POS] est calculée automatiquement en fonction de la longueur du champ saisie via cette formule =SI($B15="LONGUEUR";0;B15+C15). Le noms des champs doivent fournis dans l'ordre selon l'enregistrement se trouvant dans le fichier.

Egalement il peut y avoir des enregistrements de contrôles (en-tête, en-queue) [produits par les mainframe en général] et nous n'avons pas besoin. Si tel est le cas cochez ces options

Ces enregistrements seront supprimés par requête PowerQuery.

Dès la description du fichier effectuée il est nécessaire de lancer les traitement PowerQuery afin de récupérer le fichier dans l'onglet .
Les traitements PowerQuery sont lancés par







et voici le résultat


Ensuite deux modes d'utilisation :
- soit on conserve l'outil en l'état et vous nommez le fichier sous un autre nom puis vous traitez vos données préparées dans l'onglet RQ_IMPORT_CSV_FB
- soit vous exporter le contenu de cet onglet dans le fichier en sortie qui a été calculé au moment de la sélection

Dans le cas de l'option 2 il faudra activer choisir



Si le fichier est déjà présent



Résultat :



Résultat du fichier produit



PowerQuery : comment ?



TB_DESCRIPEUR



Au moment de l'importation PowerQuery attribue des noms de champs par défaut (Column1...n)
Cette table les calcule automatiquement via la colonne Index afin de procéder au renommage dans la requête RQ_IMPORT_CSV_FB

let
// Table où on retrouve la description de l'enregistrement avec les noms de champs et les longueurs de chacun
TB_DESC = TB_DESCRIPTEUR,
// On récupère la position de chaque champs dans le tableau descripteur d'enregistrement
L_POSITIONS = TB_DESC[POS],
// On récupère le nombre de champs que comporte l'enregistrement
NB_COL=Table.RowCount(TB_DESC),
// On récupère le nom du fichier à importer
FILENAME = getParameters("TB_PARAMS","PARAM_FICHIER_INPUT"),
// Ligne de contrôle
CTRL_TETE = getParameters("TB_PARAMS","PARAM_LIGNE_CONTROLE_TETE"),
CTRL_QUEUE = getParameters("TB_PARAMS","PARAM_LIGNE_CONTROLE_QUEUE"),
Source = Csv.Document(File.Contents(FILENAME),NB_COL,L_POSITIONS,ExtraValues.Ignore,1252),
// Via la table Descripteur on construit la liste {[ancien nom de champ], [nouveau nom de champ]}
// Par défaut les noms de champs sont nommés Column1 à Column(n)
// Ces noms de champs sont calculés automatiquement dans la table Descripteur
// La table Descripteur comporte les noms de champs décrits dans l'onglet Accueil
AddedCustom = Table.AddColumn(TB_DESC, "NestedLists", (_)=> {_[OLD_NAME],_[NOM_COLONNE]})[NestedLists],
// A travers la liste construite on procède au remplacement des noms par défaut par ceux définis dans l'onglet Accueil
Promote = Table.RenameColumns(Source,AddedCustom),
Suppr_Lig_Ctrl_Tete = if CTRL_TETE then Table.Skip(Promote,1) else Promote,
Suppr_Lig_Ctrl_Queue = if CTRL_QUEUE then Table.RemoveLastN(Suppr_Lig_Ctrl_Tete,1) else Suppr_Lig_Ctrl_Tete
in
Suppr_Lig_Ctrl_Queue


L'astuce pour le renommage est ci-dessous :
AddedCustom = Table.AddColumn(TB_DESC, "NestedLists", (_)=> {_[OLD_NAME],_[NOM_COLONNE]})[NestedLists],
puis on l'applique
Promote = Table.RenameColumns(Source,AddedCustom),


Enfin tout est piloté par la table de paramètres
Auteur
OGURUMA
Version
1.0
Réactions: HONORE M.A.H.J
Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…