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

Scripts/Batch Discussion :

Transformation de données de CSV vers TXT


Sujet :

Scripts/Batch

  1. #1
    Membre habitué
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Juin 2004
    Messages
    153
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2004
    Messages : 153
    Points : 172
    Points
    172
    Par défaut Transformation de données de CSV vers TXT
    Bonjour,

    Voici ma problématique : je reçois un fichier Excel qui contient sur les 10 premières lignes des infos simples sur deux colonnes qui correspondent aux infos de l'établissement, ensuite sur les lignes 11 et 12 des entêtes de colonnes, puis enfin des infos d'enregistrements personne par personne (avec un UserID donc et surtout une seule ligne pour chaque personne, jamais deux lignes pour la même personne) avec différentes valeurs dans chacune des colonnes. Or moi j'ai besoin derrière d'obtenir un fichier au format TXT assez simple dans lequel je vais avoir ligne par ligne les valeurs des colonnes pour chaque personne. J’aimerais SVP savoir s'il est possible avec un fichier batch arriver à passer de l'un à l'autre. Je vais mettre ci-dessous un exemple plus parlant pour être plus clair ainsi que le fichier au format XLS en PJ.

    ---------------------------------------------------------
    -------------> Fichier reçu : <-----------------
    ---------------------------------------------------------

    Wsdf Report;;;;;;;;;;
    Report Date and Time;2024/03/28 12:22;;;;;;;;;
    Country Code;BE;;;;;;;;;
    Company Name;;;;;;;;;;
    Entity ID;8756;;;;;;;;;
    Entity Name;ABC SARL;;;;;;;;;
    Currency;BDS;;;;;;;;;
    Res Cycle;2024/03/01 - 2024/03/31;;;;;;;;;
    ;;;;;;;;;;
    ;;;;;;;;;;
    User ID;User Name;Entry Date;Centre;001 Prix Objet;002 Prix Retour;005 Indice1;006 Indice2;007 Indice3;008 Indice4;total
    English description;;;;PxOBJ;PxBCK;;;;;
    00000101;NOMA Prenoma;2013/02/04;;522,00;50,00;0,00;0,00;12,00;0,00;584,00
    00000102;NOMB Prenomb;2015/03/16;;745,00;0,00;25,00;0,00;56,00;0,00;826,00
    00000103;NOMC Prenomc;2012/01/02;;285,00;12,00;5,00;0,00;0,00;0,00;302,00
    ;company total;;;1 552,00;62,00;30,00;0,00;68,00;0,00;1 712,00



    ---------------------------------------------------------
    -------------> Fichier attendu : <-----------------
    ---------------------------------------------------------

    TABLE_DESTINATION'^'ABC'^'1'^'900555'^'00000101'^'01/03/2024'^'0'^'001'^'*'^'1'^''^'522.00'^'0.00'^'0.00'
    TABLE_DESTINATION'^'ABC'^'1'^'900555'^'00000101'^'01/03/2024'^'0'^'002'^'*'^'1'^''^'50.00'^'0.00'^'0.00'
    TABLE_DESTINATION'^'ABC'^'1'^'900555'^'00000101'^'01/03/2024'^'0'^'007'^'*'^'1'^''^'12.00'^'0.00'^'0.00'
    TABLE_DESTINATION'^'ABC'^'1'^'900555'^'00000102'^'01/03/2024'^'0'^'001'^'*'^'1'^''^'745.00'^'0.00'^'0.00'
    TABLE_DESTINATION'^'ABC'^'1'^'900555'^'00000102'^'01/03/2024'^'0'^'005'^'*'^'1'^''^'25.00'^'0.00'^'0.00'
    TABLE_DESTINATION'^'ABC'^'1'^'900555'^'00000102'^'01/03/2024'^'0'^'007'^'*'^'1'^''^'56.00'^'0.00'^'0.00'
    TABLE_DESTINATION'^'ABC'^'1'^'900555'^'00000103'^'01/03/2024'^'0'^'001'^'*'^'1'^''^'285.00'^'0.00'^'0.00'
    TABLE_DESTINATION'^'ABC'^'1'^'900555'^'00000103'^'01/03/2024'^'0'^'002'^'*'^'1'^''^'12.00'^'0.00'^'0.00'


    Toute aide des Master Jedis sera la bienvenue

    Par avance un grand merciExempleAnonymisé3.xlsx
    ~-~-~-~-~-~-~-~~-~-~-~-~-~-~-~-~
    Les choses les plus faciles...
    ...sont aussi les plus difficiles à trouver !

    ~-~-~-~-~-~-~-~~-~-~-~-~-~-~-~-~

  2. #2
    Expert confirmé

    Homme Profil pro
    Responsable déploiement (SCCM, InTune, GPO)
    Inscrit en
    Juillet 2014
    Messages
    3 191
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Responsable déploiement (SCCM, InTune, GPO)
    Secteur : Transports

    Informations forums :
    Inscription : Juillet 2014
    Messages : 3 191
    Points : 5 773
    Points
    5 773
    Par défaut
    Bonjour,

    Surement possible en batch mais pas simple.
    On peut en PowerShell si tu veux.

  3. #3
    Membre habitué
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Juin 2004
    Messages
    153
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2004
    Messages : 153
    Points : 172
    Points
    172
    Par défaut
    Citation Envoyé par ericlm128 Voir le message
    Bonjour,

    Surement possible en batch mais pas simple.
    On peut en PowerShell si tu veux.
    Bonjour et merci pour la réponse.
    Oui je veux bien étudier toute possibilité
    Par avance merci beaucoup
    ~-~-~-~-~-~-~-~~-~-~-~-~-~-~-~-~
    Les choses les plus faciles...
    ...sont aussi les plus difficiles à trouver !

    ~-~-~-~-~-~-~-~~-~-~-~-~-~-~-~-~

  4. #4
    Expert confirmé

    Homme Profil pro
    Responsable déploiement (SCCM, InTune, GPO)
    Inscrit en
    Juillet 2014
    Messages
    3 191
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Responsable déploiement (SCCM, InTune, GPO)
    Secteur : Transports

    Informations forums :
    Inscription : Juillet 2014
    Messages : 3 191
    Points : 5 773
    Points
    5 773
    Par défaut
    Ok voici un code

    Code powershell : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    # Crée une liste de noms d'en-tête (1 à 11)
    $headers = (1..11 | ForEach-Object {[string]$_})
     
    # Charge le fichier input.txt en spécifiant nos noms d'en-tête
    $csv = Import-Csv -LiteralPath ".\input.txt" -Delimiter ";" -Header $headers
     
    # Cherche la date et la reformate
    $csv[7]."2" -match "(\d\d\d\d)/(\d\d)/(\d\d) " | Out-Null
    $date = "$($Matches[3])/$($Matches[2])/$($Matches[1])"
     
    # Cherche les colonnes de la ligne 10 commencant par 3 chiffres suivi d'un espace
    # Crée une liste d'objet avec le nom de l'entête (num) et sa description (header)
    $Numheaders = $headers | ForEach-Object {
        if ($csv[10].$_ -match "(\d\d\d) ")
        {
            [PSCustomObject]@{
                num = $_
                header = $Matches[1]
            }
        }
    }
     
    # Crée une variable pour stocker les résultat
    $output = @()
     
    # Pour chaque ligne à partir de la 13eme et jusqu'à l'avant dernière
    foreach($line in ($csv | Select-Object -Skip 12 | Select-Object -SkipLast 1))
    {
        # Récupère l'ID et le nom
        $id = $line.1
        $name = $line.2
     
        # Pour chaque en-tête avec 3 chiffres
        foreach($Numheader in $Numheaders)
        {
            # Récupère la valeur
            $value = $line.($Numheader.num)
     
            # Vérifie si elle doit être traité
            if ($value -ne "0,00" -and $value -match '(\d| )+\,\d\d')
            {
                # Ajout à la variable de résultat
                $output += "TABLE_DESTINATION'^'ABC'^'1'^'900555'^'${id}'^'${date}'^'0'^'$($Numheader.header)'^'*'^'1'^''^'$($value.Replace(",", "."))'^'0.00'^'0.00'"
            }
        }
    }
     
    # Export les résultat dans un fichier
    $output | Set-Content -LiteralPath "output.txt" -Force

    input.txt
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    Wsdf Report;;;;;;;;;;
    Report Date and Time;2024/03/28 12:22;;;;;;;;;
    Country Code;BE;;;;;;;;;
    Company Name;;;;;;;;;;
    Entity ID;8756;;;;;;;;;
    Entity Name;ABC SARL;;;;;;;;;
    Currency;BDS;;;;;;;;;
    Res Cycle;2024/03/01 - 2024/03/31;;;;;;;;;
    ;;;;;;;;;;
    ;;;;;;;;;;
    User ID;User Name;Entry Date;Centre;001 Prix Objet;002 Prix Retour;005 Indice1;006 Indice2;007 Indice3;008 Indice4;total
    English description;;;;PxOBJ;PxBCK;;;;;
    00000101;NOMA Prenoma;2013/02/04; ;522,00;50,00;0,00;0,00;12,00;0,00;584,00
    00000102;NOMB Prenomb;2015/03/16;;745,00;0,00;25,00;0,00;56,00;0,00;826,00
    00000103;NOMC Prenomc;2012/01/02;;285,00;12,00;5,00;0,00;0,00;0,00;302,00
    ;company total;;;1 552,00;62,00;30,00;0,00;68,00;0,00;1 712,00
    output.txt
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    TABLE_DESTINATION'^'ABC'^'1'^'900555'^'00000101'^'01/03/2024'^'0'^'001'^'*'^'1'^''^'522.00'^'0.00'^'0.00'
    TABLE_DESTINATION'^'ABC'^'1'^'900555'^'00000101'^'01/03/2024'^'0'^'002'^'*'^'1'^''^'50.00'^'0.00'^'0.00'
    TABLE_DESTINATION'^'ABC'^'1'^'900555'^'00000101'^'01/03/2024'^'0'^'007'^'*'^'1'^''^'12.00'^'0.00'^'0.00'
    TABLE_DESTINATION'^'ABC'^'1'^'900555'^'00000102'^'01/03/2024'^'0'^'001'^'*'^'1'^''^'745.00'^'0.00'^'0.00'
    TABLE_DESTINATION'^'ABC'^'1'^'900555'^'00000102'^'01/03/2024'^'0'^'005'^'*'^'1'^''^'25.00'^'0.00'^'0.00'
    TABLE_DESTINATION'^'ABC'^'1'^'900555'^'00000102'^'01/03/2024'^'0'^'007'^'*'^'1'^''^'56.00'^'0.00'^'0.00'
    TABLE_DESTINATION'^'ABC'^'1'^'900555'^'00000103'^'01/03/2024'^'0'^'001'^'*'^'1'^''^'285.00'^'0.00'^'0.00'
    TABLE_DESTINATION'^'ABC'^'1'^'900555'^'00000103'^'01/03/2024'^'0'^'002'^'*'^'1'^''^'12.00'^'0.00'^'0.00'
    TABLE_DESTINATION'^'ABC'^'1'^'900555'^'00000103'^'01/03/2024'^'0'^'005'^'*'^'1'^''^'5.00'^'0.00'^'0.00'
    Ps : Je pense qu'il y a une petite coquille dans ton fichier attendu car les lignes ne commence pas par '
    Et il manque une ligne

  5. #5
    Membre habitué
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Juin 2004
    Messages
    153
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2004
    Messages : 153
    Points : 172
    Points
    172
    Par défaut
    Ouaou ! Merci beaucoup ericlm128 !

    Je vais essayer ça ASAP car ça a l'air juste génial !

    Merci merci vraiment beaucoup

    ~-~-~-~-~-~-~-~~-~-~-~-~-~-~-~-~
    Les choses les plus faciles...
    ...sont aussi les plus difficiles à trouver !

    ~-~-~-~-~-~-~-~~-~-~-~-~-~-~-~-~

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

Discussions similaires

  1. [XL-2010] Transformation données Excel vers txt ou csv
    Par tanaka59 dans le forum Macros et VBA Excel
    Réponses: 12
    Dernier message: 16/06/2016, 13h27
  2. Comment transformer les tables dans un fichier txt vers une BD comme Mysql
    Par badrdine.in dans le forum Développement de jobs
    Réponses: 5
    Dernier message: 20/03/2009, 12h58
  3. Réponses: 26
    Dernier message: 03/02/2009, 14h06
  4. BO Data Integrator : Transformer CSV vers XML
    Par Sto59 dans le forum BODI
    Réponses: 8
    Dernier message: 11/12/2008, 14h29
  5. .xls vers .csv ou . txt
    Par fthem dans le forum Macros et VBA Excel
    Réponses: 27
    Dernier message: 24/09/2008, 16h31

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