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 :

Générer un fichier à partir d'un autre [Batch]


Sujet :

Scripts/Batch

  1. #1
    Membre confirmé
    Inscrit en
    Mars 2008
    Messages
    136
    Détails du profil
    Informations forums :
    Inscription : Mars 2008
    Messages : 136
    Par défaut Générer un fichier à partir d'un autre
    Bonjour,

    Je dois écrire un script batch sous Windows, mais ce n'est pas mon fort et j'ai vraiment besoin de votre aide.
    En Input j'ai un fichier qui contient deux valeurs(Valeur1 et Valeur2) séparées par une virgule ou pas (au choix).
    Je dois générer un fichier en OUTPUT qui contient:
    Une clé unique sur 16 caractères incrémentées par 1 pour chaque nouvelle ligne créée.
    Puis j’insère la valeur1 à une position précise colonne 45.
    La Valeur2 doit s’insérer en colonne 97.
    Particularité la valeur1 peut contenir de 4 à 16 caractères et sur une ligne il peut y avoir la Valeur1 mais pas de valeur2.
    J'ai via, différents sites, écris un premier script mais le positionnement de mes valeur1 et Valeur2 n'est pas correct sans doute à cause de la valeur1 à taille "flexible".
    Exemple de fichier INPUT:
    AAAA,
    BBBBBBBB,
    AAAAA,JJJJJJ
    AAAAAAAAA,HHHHHHH
    AAAAAA,EEEEEEE
    BBBBBBBBBBBBBBBB,ZZZZZZ
    Le script ecrit:
    Code Batch : 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
    @echo off
    setlocal enabledelayedexpansion
     
    set source=input1.txt
    set sortie=output.txt
     
    set debut_cle=000000000000
    set fin_cle=1000
    set AAA=A001
    set BBB=O001
     
    set _24caracteres=                        
    set _36caracteres=                                    
    ::--------------------------
     
    for /f "skip=1 usebackq tokens=1,2 delims=," %%a in ("%source%") do (
     
    set /a fin_cle+=1
    set cle_unique=%debut_cle%!fin_cle!
    set valeur1=%%a
    set valeur2=%%b
     
    if not defined valeur2 (echo !cle_unique!%AAA%%_24caracteres%!valeur1!%_36caracteres%!valeur2!
     
    ) else (
    echo !cle_unique!%BBB%%_24caracteres%!valeur1!%_36caracteres%!valeur2!)
     
     
    )>>"%sortie%"
     
    )
    endlocal
    PAUSE

    Merci par avance de votre aide.

  2. #2
    Expert confirmé

    Homme Profil pro
    Responsable déploiement (SCCM, InTune, GPO)
    Inscrit en
    Juillet 2014
    Messages
    3 218
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    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 218
    Par défaut
    Pourrions nous avoir le OUTPUT souhaité pour cette exemple.
    Ainsi que ce que génère ton script ?

  3. #3
    Membre confirmé
    Inscrit en
    Mars 2008
    Messages
    136
    Détails du profil
    Informations forums :
    Inscription : Mars 2008
    Messages : 136
    Par défaut
    Bonjour,

    Voici en synthèse mon besoin suite à mon projet d’écriture d'un script:
    INPUT fichier TXT
    Une ou Deux variables séparées par un espace (valeur1 et valeur2).
    AAAAAA
    AAAAAA BBBBBBBB
    CCCCCCCCCC
    CCCCCCCCCC DDDDDDDD
    EEEEEEE FFFFFFFF

    Valeur1 peut avoir une longueur entre 7 et 16
    Valeur2 a une longueur entre 2 et 8
    Valeur1 doit être positionnée en colonne 45
    Valeur2 doit être positionnée en colonne 97
    Dans fichier Input, soit il n'y a que la valeur1, soit il y a valeur1 et valeur2.
    En debut de ligne Cle unique sur 16 caractères incrémentés de 1.
    Puis sur 4 caracteres typeA si uniquement valeur1
    ou TypeB si valeur1 et Valeur2
    TYPEA=X001
    TYPEB=Z001
    TYPEC=A001
    TYPED=B000

    Mon problème sur deux demandes d'utilisateurs:
    1 cas:
    je cherche à insérer après le TYPEA ou TYPEB le champ "LISTE valeur1" ou "Liste Valeur2".
    la valeur1 étant variable entre 7 et 16 et valeur2 entre 2 et 8 je ne trouve pas de moyen pour "caler" Valeur1 ou Valeur2 et respecter l'insertion en colonne 45 de Valeur1 et 97 valeur2.
    EXEMPLE OUTPUT:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    MON TITRE
    CLE UNIQUE      TITRE LIBRE 
    CLE UNIQUE      X001LISTE Valeur1           AAAAAA
    CLE UNIQUE      Z001LISTE Valeur2           AAAAAA                                              BBBBBBBB
    CLE UNIQUE      X001LISTE Valeur1           CCCCCCCCCC                                          
    CLE UNIQUE      Z001LISTE Valeur2           CCCCCCCCCC                                          DDDDDDDD
    CLE UNIQUE      Z001LISTE Valeur2           EEEEEEE                                             FFFFFFFF
    Second cas:
    Regrouper toutes les lignes Valeur1 et insérer une clé unique avec un titre TYPEA et idem pour valeur2.
    Exemple
    Fichier OUTPUT
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    MON TITRE
    CLE UNIQUE      TITRE LIBRE 
    CLE UNIQUE      TYPEC
    CLE UNIQUE      X001LISTE Valeur1           AAAAAA
    CLE UNIQUE      X001LISTE Valeur1           CCCCCCCCCC                                          
    CLE UNIQUE      TYPED
    CLE UNIQUE      Z001LISTE Valeur2           AAAAAA                                             BBBBBBBB
    CLE UNIQUE      Z001LISTE Valeur2           CCCCCCCCCC                                      DDDDDDDD
    CLE UNIQUE      Z001LISTE Valeur2           EEEEEEE                                             FFFFFFFF
    Voici le script que j'ai réussi à écrire en respectant ces contraintes de colonage mais je dois le compléter en prenant en compte les nouvelles demandes CAS 1 ou CAS 2.
    Code Batch : 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
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    @echo off
    setlocal enabledelayedexpansion
     
    set source=input.txt
    set sortie=output.lst
     
    set debut_cle=000000000000
    set fin_cle=1000
    set typeA=X001LISTEXXXXXXXXXXXXXXXXXX
    set typeB=Z001LISTEXXXXXXXXXXXXXXXXXX
     
     
     
    set avant_valeur1= 
     
     
    :: apres_valeur1
    :: est créée dans le else
    :: étant donné que sa longueur est dépendante
    :: de la longueur de valeur1
     
    ::--------------------------
     
    (
    echo Mon titre 
    )>>"%sortie%"
     
    for /f "usebackq tokens=1,2 delims= " %%a in ("%source%") do (
     
        set /a fin_cle+=1
        set cle_unique=%debut_cle%!fin_cle!
        set valeur1=%%a
        set valeur2=%%b
     
        if not defined valeur2 (
     
            (
                echo !cle_unique!%typeA%%avant_valeur1%!valeur1!
            )>>"%sortie%"
     
        ) else (
     
            set longueur_valeur1=0
     
            for /l %%n in (0,1,16) do (
                set fin_chaine=!valeur1:~%%n,1!
                if not "!fin_chaine!"=="" (
                    set /a longueur_valeur1+=1
                )
            )
     
     
            set /a longueur_de_apres_valeur1= 96 - 44 - !longueur_valeur1!
     
            for /l %%n in (1,1,!longueur_de_apres_valeur1!) do (
                if %%n==1 (
                    set apres_valeur1= 
                ) else (
                    set apres_valeur1=!apres_valeur1! 
                )
            )
     
            (
                echo !cle_unique!%typeB%%avant_valeur1%!valeur1!!apres_valeur1!!valeur2!
            )>>"%sortie%"
        )
     
    )
    endlocal
    pause


    MERCI beaucoup par avance de votre aide.

  4. #4
    Expert confirmé

    Homme Profil pro
    Responsable déploiement (SCCM, InTune, GPO)
    Inscrit en
    Juillet 2014
    Messages
    3 218
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    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 218
    Par défaut


    Tu peux décomposer ton problème et le poser simplement ? J'ai du mal à comprendre.

  5. #5
    Membre confirmé
    Inscrit en
    Mars 2008
    Messages
    136
    Détails du profil
    Informations forums :
    Inscription : Mars 2008
    Messages : 136
    Par défaut
    Bonjour,

    Désolé si mon post n'est pas clair. je vais tenter d'être plus explicite.
    En Input j'ai un fichier .txt qui peut contenir une ou deux valeurs (Valeur1 et Valeur2) séparées par un espace.
    En Output, je dois générer un fichier qui reprend cette ou ces valeurs en y ajoutant une clé unique.
    A ce jour et grâce à différents forum, j'ai réussi à écrire un script, (copie dans mon précédent post), qui génère le fichier output en y insérant une clé unique devant chaque cas.
    Le besoin serait de pouvoir regrouper dans le fichier output toutes les valeur1 uniquement et toutes les valeurs1 et valeur2.
    Mon problème aujourd'hui:
    Modifier le script, pour:
    insérer après la clé unique, un titre avec la variable "valeur1" ou la "valeur2".
    Grouper tous les cas ayant que Valeur1 sous un autre titre et idem pour les cas ayant Valeur1 et valeur2.
    Ce qui donnerait en output:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    MON TITRE
    CLÉ UNIQUE TITRE LIBRE groupe cas valeur1 only
    CLE UNIQUEX001TITRE  AAAAAA                     AAAAAA
    CLE UNIQUEX001LISTE BBBBBBBBBBB                BBBBBBBBBBB
    CLÉ UNIQUE TITRE LIBRE groupe cas valeur1 et 2 
    CLE UNIQUEZ001LISTE BBBBBBBB                      AAAAAA                                              BBBBBBBB
    CLE UNIQUEZ001LISTE ZZZ                             CCCCCCCCCCC                                     ZZZ
    J’espère avoir été un peu plus clair dans ma demande.
    Merci de votre aide.

  6. #6
    Expert confirmé

    Homme Profil pro
    Responsable déploiement (SCCM, InTune, GPO)
    Inscrit en
    Juillet 2014
    Messages
    3 218
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    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 218
    Par défaut
    Une première idée pour simplifier le traitement.
    Tu t'occupe déjà des cas 1 et après des cas 2. Cela te permet de les grouper simplement.
    Essaie d'adapter

    Code batch : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    @echo off
     
    set source=input.txt
    set sortie=output.txt
     
    (
    echo Mon titre 
    echo CLÉ UNIQUE TITRE LIBRE groupe cas valeur1 only
    for /f "usebackq tokens=1,2 delims= " %%a in (`type "%~dp0%source%" ^| findstr /V /C:" "`) do echo CLE UNIQUEX001TITRE %%~a %%~a
    echo CLÉ UNIQUE TITRE LIBRE groupe cas valeur1 et 2 
    for /f "usebackq tokens=1,2 delims= " %%a in (`type "%~dp0%source%" ^| findstr /C:" "`) do echo CLE UNIQUEZ001LISTE %%~b %%~a %%~b
    )>"%~dp0%sortie%"
     
    pause

    Le nombre de caractère de chaque colonne semble définit tu peux utiliser une "fonction" comme cela qui complétera par des espaces le nombre de caractère manquant
    Code batch : 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
    @echo off
    setlocal enabledelayedexpansion
     
    call :setlong "abcde" "10"
    echo #%result%#
     
    call :setlong "abcdeefghikl" 5
    echo #%result%#
     
    goto fin
     
    :setlong
    set txt=%~1
    set /a long=%~2
    FOR /L %%a IN (0, 1, %long%) DO set txt=!txt! 
    set result=!txt:~,%long%!
    goto :eof
     
    :fin
    pause

  7. #7
    Membre actif
    Homme Profil pro
    007
    Inscrit en
    Octobre 2014
    Messages
    119
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : 007

    Informations forums :
    Inscription : Octobre 2014
    Messages : 119
    Par défaut
    Citation Envoyé par MAXJEREM Voir le message
    A ce jour et grâce à différents forum
    Lesquels ? Et tu en es où aujourd'hui ?


    Citation Envoyé par ericlm128 Voir le message
    Une première idée pour simplifier le traitement.
    En fait, la chaine "clé unique" doit être remplacée dans la sortie
    par une valeur, vraisemblablement un nombre sur 16 chiffres et
    qui est censé être unique. Et puis attention, il y a au moins un
    espace sur chaque ligne de son fichier input.txt tel que publié
    dans son deuxième message.


    Citation Envoyé par ericlm128 Voir le message
    Le nombre de caractère de chaque colonne semble définit tu peux utiliser une "fonction" comme cela qui complétera par des espaces le nombre de caractère manquant
    Sinon, rajouter une grande chaine d'espaces et couper au bon
    endroit.

  8. #8
    Membre confirmé
    Inscrit en
    Mars 2008
    Messages
    136
    Détails du profil
    Informations forums :
    Inscription : Mars 2008
    Messages : 136
    Par défaut
    Bonjour

    Merci pour toutes ces premières réponses je vais tester l'idée de traiter cas par cas, j'avoue ne pas y avoir pensé.
    En effet, dans Input il y a une ligne avec une ou deux valeurs séparées par un espace.
    la clé est sur 16 elle peut contenir soit des chiffres soit alphanumériques.
    A ce jour, mon script fonctionne dans son ensemble. Il lit le fichier input, génère une clé incrémentée de 1 à chaque ligne, positionne les valeur1 et valeur2 dans les colonnes définies.
    Ce qu'il me manque c'est de regrouper les Cas1 et les cas2.

    je vais donc tester les différentes adaptions du script et vous tiens au courant.

    Merci beaucoup de votre aide.

  9. #9
    Membre confirmé
    Inscrit en
    Mars 2008
    Messages
    136
    Détails du profil
    Informations forums :
    Inscription : Mars 2008
    Messages : 136
    Par défaut
    Bonjour,

    Après quelques essais et adaptation de mon script je peux en effet gérer cas par cas. on avance bien .
    par contre, j'ai un souci dans les titres cas valeur1 ou Valeur1 et 2.
    Code Batch : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    echo CLÉ UNIQUE TITRE LIBRE groupe cas valeur1 only
    for /f "usebackq tokens=1,2 delims= " %%a in (`type "%~dp0%source%" ^| findstr /V /C:" "`) do echo CLE UNIQUEX001TITRE %%~a %%~a
    echo CLÉ UNIQUE TITRE LIBRE groupe cas valeur1 et 2 
    for /f "usebackq tokens=1,2 delims= " %%a in (`type "%~dp0%source%" ^| findstr /C:" "`) do echo CLE UNIQUEZ001LISTE %%~b %%~a %%~b
    )>"%~dp0%sortie%"
    Mon problème est le suivant:
    Je n'arrive pas à respecter le colonage défini das mon fichier Output.
    J'avoue ne pas avoir bien compris la seconde réponse "Le nombre de caractère de chaque colonne semble définit tu peux utiliser une "fonction" comme cela qui complétera par des espaces le nombre de caractère manquant"
    Pouvez-vous m'expliquer comment gérer votre exemple:
    Code Batch : 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
    @echo off
    setlocal enabledelayedexpansion
     
    call :setlong "abcde" "10"
    echo #%result%#
     
    call :setlong "abcdeefghikl" 5
    echo #%result%#
     
    goto fin
     
    :setlong
    set txt=%~1
    set /a long=%~2
    FOR /L %%a IN (0, 1, %long%) DO set txt=!txt! 
    set result=!txt:~,%long%!
    goto :eof
     
    :fin
    pause

    Merci beaucoup pour vos aides.

  10. #10
    Expert confirmé

    Homme Profil pro
    Responsable déploiement (SCCM, InTune, GPO)
    Inscrit en
    Juillet 2014
    Messages
    3 218
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    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 218
    Par défaut
    Finalement ...

    Voici une ébauche, tu test et tu me dit ce que je n'ai pas compris, j'ai mis un peu de commentaire


    Code batch : 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
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    @echo off
    setlocal enabledelayedexpansion
     
    set source=input.txt
    set sortie=output.txt
     
    set "spaces=                                                  "
     
    set /A cle_unique=1000
     
    (
    	echo Mon titre
    	echo CLE UNIQUE      TITRE LIBRE
    	echo CLE UNIQUE      TYPEC
    	for /f "usebackq tokens=1,2 delims= " %%a in (`type "%~dp0%source%" ^| findstr /V /C:" "`) do (
    		call :traite "%%~a"
    		echo !line_out!
    	)
    	echo CLE UNIQUE      TYPED
    	for /f "usebackq tokens=1,2 delims= " %%a in (`type "%~dp0%source%" ^| findstr /C:" "`) do (
    		call :traite "%%~a" "%%~b"
    		echo !line_out!
    	)
    )>"%~dp0%sortie%"
     
    goto fin
     
    :traite
    REM Récupère les valeurs
    set val1=%~1
    set val2=%~2
     
    REM Clé unique
    set cle_unique_out=0000000000000000%cle_unique%
    set cle_unique_out=%cle_unique_out:~-16%
    set /A cle_unique+=1
     
    REM Titre
    if defined val2 (
    	set "titre_out=X001LISTE %val2%%spaces%"
    ) else (
    	set "titre_out=Z001LISTE %val1%%spaces%"
    )
    set titre_out=%titre_out:~,28%
     
    REM Longueur de valeur 1
    set "val1_out=!val1!%spaces%"
    set val1_out=%val1_out:~,52%
     
    REM Longueur de valeur 2
    if defined val2 (
    	set "val2_out=!val2!%spaces%"
    	set val2_out=!val2_out:~,52!
    ) else (
    	set "val2_out=%spaces%"
    )
     
    REM Crée la ligne de sortie
    set line_out=!cle_unique_out!!titre_out!!val1_out!!val2_out!
     
    REM Supprime les espaces en trop, à la fin de la ligne de sortie
    for /l %%a in (1,1,150) do if "!line_out:~-1!"==" " set line_out=!line_out:~0,-1!
     
    REM Retour à l'envoyeur
    goto :eof
     
     
    :fin
    pause

  11. #11
    Expert confirmé

    Homme Profil pro
    Responsable déploiement (SCCM, InTune, GPO)
    Inscrit en
    Juillet 2014
    Messages
    3 218
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    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 218
    Par défaut
    Voici sur quoi je me suis basé :
    - CLE UNIQUE : 16 caractères
    - TITRE : 28 caractères
    - Valeur 1 : 52 caractères
    - Valeur 2 : 52 caractères

  12. #12
    Expert confirmé

    Homme Profil pro
    Responsable déploiement (SCCM, InTune, GPO)
    Inscrit en
    Juillet 2014
    Messages
    3 218
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    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 218
    Par défaut
    Concrètement ça donne cela en sortie

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Mon titre
    CLE UNIQUE      TITRE LIBRE
    CLE UNIQUE      TYPEC
    0000000000001000Z001LISTE AAAAAA            AAAAAA
    0000000000001001Z001LISTE CCCCCCCCCC        CCCCCCCCCC
    CLE UNIQUE      TYPED
    0000000000001002X001LISTE BBBBBBBB          AAAAAA                                              BBBBBBBB
    0000000000001003X001LISTE DDDDDDDD          CCCCCCCCCC                                          DDDDDDDD
    0000000000001004X001LISTE FFFFFFFF          EEEEEEE                                             FFFFFFFF
    Je ne sais pas si CLE UNIQUE doit aussi être incrémenté

  13. #13
    Membre actif
    Homme Profil pro
    007
    Inscrit en
    Octobre 2014
    Messages
    119
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : 007

    Informations forums :
    Inscription : Octobre 2014
    Messages : 119
    Par défaut
    Citation Envoyé par ericlm128 Voir le message
    Finalement ...

    Voici une ébauche, tu test et tu me dit ce que je n'ai pas compris, j'ai mis un peu de commentaire

    Code batch : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    REM Supprime les espaces en trop, à la fin de la ligne de sortie
    for /l %%a in (1,1,150) do if "!line_out:~-1!"==" " set line_out=!line_out:~0,-1!
    Quand je disais d'ajouter des espaces puis couper, c'était plus dans le sens là :

    Code batch : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    ::avec
    :: str_prefix, qui représente cle_unique_titre_etc
    :: string_filler, ta chaine de remplissage avec beaucoup d'espaces
     
    ::positionnement de la valeur 1 à la colonne position_value_1 (position absolue - 1 car index à 0)
    set "str_out=!str_prefix!!string_filler!"
    set "str_out=!str_out:~,%position_value_1%!!value_1!"
     
    ::si nécessaire, positionnement de la valeur 2 à la colonne position_value_2
    set "str_out=!str_out!!string_filler!"
    set "str_out=!str_out:~,%position_value_2%!!value_2!"

    En gros, t'ajoutes les espaces,
    et tu casses, t'ajoutes les espaces, et tu casses...

  14. #14
    Expert confirmé

    Homme Profil pro
    Responsable déploiement (SCCM, InTune, GPO)
    Inscrit en
    Juillet 2014
    Messages
    3 218
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    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 218
    Par défaut
    Oui c'est ce qui est fait ici
    Code batch : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    REM Longueur de valeur 1
    set "val1_out=!val1!%spaces%"
    set val1_out=%val1_out:~,52%

  15. #15
    Membre actif
    Homme Profil pro
    007
    Inscrit en
    Octobre 2014
    Messages
    119
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : 007

    Informations forums :
    Inscription : Octobre 2014
    Messages : 119
    Par défaut
    Pas tout à fait, l'approche est différente. Regardes-y de plus près,
    tu verras qu'une fois la valeur_1 ou la valeur_2 placée, il n'y a pas
    d'espaces après, donc tu n'auras pas de ménage à faire.

  16. #16
    Membre confirmé
    Inscrit en
    Mars 2008
    Messages
    136
    Détails du profil
    Informations forums :
    Inscription : Mars 2008
    Messages : 136
    Par défaut
    Bonjour,

    J'ai testé la solution proposée et en effet cela répond bien à ma demande en terme de respect de colonnes, de clé incrémentée...
    Il me faut incrémenter également les deux autres clés mais je pense savoir faire.
    Par contre, et profitant de vos expériences et expertises, je souhaite vous poser une question additionnelle:
    Si dans le cas où se présente un fichier Input avec les deux Valeur1 et 2 sur toutes les lignes mais que je dois malgré tout grouper les valeurs1 et les valeurs2 séparément, est-ce que cela implique une grosse modification du script??
    Merci beaucoup de vos aides et de partager vos expertises.

  17. #17
    Expert confirmé

    Homme Profil pro
    Responsable déploiement (SCCM, InTune, GPO)
    Inscrit en
    Juillet 2014
    Messages
    3 218
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    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 218
    Par défaut
    Fait le test, peut être que ça le fait déjà.

  18. #18
    Membre confirmé
    Inscrit en
    Mars 2008
    Messages
    136
    Détails du profil
    Informations forums :
    Inscription : Mars 2008
    Messages : 136
    Par défaut
    Bonjour,

    j'ai fais le test avec un Input avec Valeur1 et Valeur2 sur toutes les lignes et je n'obtiens que les cas2. D'où ma question.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Mon titre
    CLE UNIQUE      TITRE LIBRE
    CLE UNIQUE      TYPEC
    CLE UNIQUE      TYPED
    0000000000001002X001LISTE BBBBBBBB          AAAAAA                                             BBBBBBBB
    0000000000001003X001LISTE DDDDDDDD        CCCCCCCCCC                                    DDDDDDDD
    0000000000001004X001LISTE FFFFFFFF          EEEEEEE                                             FFFFFFFF
    Merci de votre aide.

  19. #19
    Expert confirmé

    Homme Profil pro
    Responsable déploiement (SCCM, InTune, GPO)
    Inscrit en
    Juillet 2014
    Messages
    3 218
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    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 218
    Par défaut
    Pose ton fichier input de test stp

  20. #20
    Membre confirmé
    Inscrit en
    Mars 2008
    Messages
    136
    Détails du profil
    Informations forums :
    Inscription : Mars 2008
    Messages : 136
    Par défaut
    Bonjour,

    Voici un exemple de fichier INPUT, j'ai remplacé les valeurs 1 et 2 par les différentes possibilités de taille (entre 7 et 16 pour valeur1) et entre 2 et 8 pour les valeurs 2.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    AAAAAA BBBBBBBB
    CCCCCCCCC DDDDDDDD
    EEEEEEE FFFFFFFF
    ABCDEFGHIJKLMNOP SSS
    HHHHHHHHHHHH ZZZZZZ
    IIIIIIII SSSSSSSS
    JJJJJJJJJJJJJJJJ GGGGG
    Merci de votre aide.

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. générer une date à partir d'une autre date
    Par Melody Nelson dans le forum 4D
    Réponses: 2
    Dernier message: 20/08/2007, 16h59
  2. [MySQL] Générer un fichier à partir d'une requête mySQL
    Par sara21 dans le forum PHP & Base de données
    Réponses: 5
    Dernier message: 11/05/2007, 08h10
  3. Comment faire pour générer un fichier à partir d'une BD MySQL
    Par dessinateurttuyen dans le forum Requêtes
    Réponses: 2
    Dernier message: 06/07/2006, 20h39
  4. Générer plusieurs fichiers à partir d'un fichier excel
    Par yas2006 dans le forum Documents
    Réponses: 3
    Dernier message: 02/06/2006, 17h54
  5. Générer des fichiers à partir d'un état
    Par laurent35 dans le forum Access
    Réponses: 3
    Dernier message: 02/05/2006, 02h54

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