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 :

modification fichier csv


Sujet :

Scripts/Batch

  1. #1
    Membre habitué
    Profil pro
    Inscrit en
    Juillet 2011
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2011
    Messages : 10
    Par défaut modification fichier csv
    Bonjour,

    Je dois modifier en automatique un fichier extension csv avant de l'utiliser sous excel

    exemple de fichier "fichier1.csv"
    attention le caractère point n'a pas position fixe

    123QV45;000.12;51.1
    454QV45;000.18;52.001
    865QV45;001.22;5.02
    254QV45;007.02;000000.2

    Je dois remplacer le caractère . par une virgule avant l'ouverture du fichier sous excel

    @echo off > fichier2.csv
    for /F "delims=" %%A in (fichier1.csv) do (
    set var=%%A
    set var=%var:.=,%
    echo %var% >> fichier2.csv)

    merci pour votre aide

  2. #2
    Membre Expert
    Inscrit en
    Avril 2010
    Messages
    1 495
    Détails du profil
    Informations forums :
    Inscription : Avril 2010
    Messages : 1 495
    Par défaut
    Salut,

    Il faut cliquer sur ,
    si tu trouves pas, il faut alors cliquer sur
    et si tu trouves toujours pas, alors sur il faut alors cliquer sur


  3. #3
    Membre habitué
    Profil pro
    Inscrit en
    Juillet 2011
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2011
    Messages : 10
    Par défaut
    Je te remercie pour les liens mais je les connaissais deja et mon fichier bat
    est une compile de ces liens mais il ne marche pas donc je demande de l'aide

  4. #4
    Membre habitué
    Profil pro
    Inscrit en
    Juillet 2011
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2011
    Messages : 10
    Par défaut
    Après plusieurs essais (plusieurs heures)

    La partie du programme qui remplace les . par des , fonctionne

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    set chaine=123QV45;000.12;51.1
    set chaine=%chaine:.=,%
    echo %chaine% >> fichier2.csv

    La partie boucle du programme pour lire toutes les lignes l'une apres l'autre de mon fichier fonctionne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    for /F "delims=" %%A in (fichier1.csv) do (
    echo %%A >> fichier2.csv)
    Et si je rassemble les deux

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    for /F "delims=" %%A in (fichier1.csv) do (
    set chaine=%%A
    set chaine=%chaine:.=,%
    echo %chaine% >> fichier2.csv)
    ÇA NE MARCHE PLUS J'AI UN PROBLÈME AVEC MA VARIABLE CHAINE ET %%A

    JE NE COMPREND PLUS RIEN !!!

  5. #5
    Membre Expert
    Inscrit en
    Avril 2010
    Messages
    1 495
    Détails du profil
    Informations forums :
    Inscription : Avril 2010
    Messages : 1 495
    Par défaut
    Citation Envoyé par forest.y Voir le message
    JE NE COMPRENT PLUS RIEN HELP HELP !!!!!!
    Et pourtant, j'avais anticipé

  6. #6
    Membre habitué
    Profil pro
    Inscrit en
    Juillet 2011
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2011
    Messages : 10
    Par défaut
    Puisqu' on est jamais servi mieux que par soi même
    Le batch c'est pas pour moi on passe au VBS et miracle sa marche
    la preuve :
    Code vb : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    dim filesys, text, readfile, contents,createfile 
    set filesys = CreateObject("Scripting.FileSystemObject") 
    set readfile = filesys.OpenTextFile("c:\test\fichier1.csv", 1, false) 
    set writefile = filesys.CreateTextFile("c:\test\fichier2.csv", 2, false) 
     
    do while readfile.AtEndOfStream=false 
      contents = readfile.ReadLine 
      contents = replace(contents,".",",")
      writefile.write(contents)
      writefile.write(VbCrLf)
     
    loop 
     
    readfile.close
    writefile.close

    Donc merci a moi (je plaisante ) et si quelqu'un a la solution pour mon batch pour ma culture perso

    @+

  7. #7
    Membre Expert Avatar de Drizzt [Drone38]
    Homme Profil pro
    Directeur de projet
    Inscrit en
    Mai 2004
    Messages
    1 001
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Directeur de projet

    Informations forums :
    Inscription : Mai 2004
    Messages : 1 001
    Par défaut
    C'est pas comme si ton problème batch est quelque chose qui revient toutes les semaines.

    Disons qu'on en a un peu marre de répéter toujours la même chose, alors qu'une simple recherche te fournirai la réponse.

    Minnesota t'a filé des liens qui te fournissent la solution. Il y a plein de postes sur le forum sur le sujet, l'aide de la commande for te donne aussi la solution.

    D'ou notre apparente mauvaise volonté à te répondre. Désolé si ça tombe sur toi mais un peu d'effort de ton coté serait le bienvenue.

  8. #8
    Membre Expert
    Inscrit en
    Avril 2010
    Messages
    1 495
    Détails du profil
    Informations forums :
    Inscription : Avril 2010
    Messages : 1 495
    Par défaut
    Citation Envoyé par Drizzt [Drone38] Voir le message
    D'ou notre apparente mauvaise volonté à te répondre.
    Même pas, puisque j'ai répondu le jour même en matinée. Tu noteras que j'ai quand même été chercher les liens dans la FAQ et que j'ai mis en forme mon message, et malgré tout je me suis fait moinsser, alors que c'est la réponse à sa question. Non, non, la mauvaise volonté c'est pas nous, c'est ceux qui ne prennent pas le temps de lire ce qu'on leur écrit ou ce qu'on leur montre.

  9. #9
    Membre habitué
    Profil pro
    Inscrit en
    Juillet 2011
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2011
    Messages : 10
    Par défaut
    Messieurs,

    Je suis un electronicien qui pendant ses etudes a appris la base de la programmation en assembleur puis en C++, j'ai un PC de puis pres de 20 ans et je n'ai que 33 ans donc j'ai connu le Dos, Windows 3.1 etc... j'ai appris le visual basic 6 en lissant des livres donc je suis un autodidacte. Quand je ne trouve pas je suis pres à passer des heures et des heures. Mais malheureusement je suis conscient de mes limites de connaissance et ce que vous prennez pour de la fainéantise est tout simplement de la non maitrise

    Maintenant si quelqu'un peut m'expliquer mon erreur dans mon fichier batch, je serais tres content car je connais le VB6 donc faire en VBS c'est plutot simple pour moi et donc je souhaitai avec le batch me compliquer la vie un peu
    mais j'ai beau lire et relire la FAQ et les exemples je ne voi pas mon erreur sur la variable dans la boucle

    Ce message est juste pour me présenter

    Ma devise :
    Aujourd'hui je ne sais pas
    Demain je vais cherché
    jusqu'a ce que je trouve

  10. #10
    Membre Expert Avatar de Drizzt [Drone38]
    Homme Profil pro
    Directeur de projet
    Inscrit en
    Mai 2004
    Messages
    1 001
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Directeur de projet

    Informations forums :
    Inscription : Mai 2004
    Messages : 1 001
    Par défaut
    Tu fais un set dans un for. Ton set semble ne pas faire ce que tu veux. Ou peux-tu aller chercher de l'aide ?

    Tiens si je regardais l'aide des fonctions set et for.
    Voyons voyons, tiens un paragraphe interessant dans l'aide du set :

    La prise en charge de l'expansion retardée de variables d'environnement est
    utile pour contourner les limites de l'expansion en cours qui se produit à la
    lecture d'une ligne de texte et non à son exécution. L'exemple suivant montre
    le problème causé par l'expansion immédiate de variables :

    set VAR=avant
    if "%VAR%" == "avant" (
    set VAR=après
    if "%VAR%" == "après" @echo Cela marche si vous lisez ce message
    )

    n'affichera jamais le message car la variable %VAR% présente dans les deux
    instances de IF est remplacée à la lecture de la première instance de IF, étant
    donné que le corps de IF, instruction composée, est logiquement inclus. Donc le
    IF compris dans l'instance compare "avant" avec "après" et il n'y aura jamais
    égalité. De même, l'exemple suivant ne fonctionnera pas comme prévu :

    set LIST=
    for %i in (*) do set LIST=%LIST% %i
    echo %LIST%

    car la liste des fichiers du répertoire ne sera PAS créée, et en fait la
    variable LIST prendra le valeur du dernier fichier trouvé. Une fois encore
    cela est dû au fait que %LIST% n'est étendu qu'une fois, lorsque FOR est
    lu et à ce stade la variable LIST est vide. Donc la boucle FOR exécutée est :

    for %i in (*) do set LIST= %i

    qui donne toujours à LIST la valeur du dernier fichier trouvé.

    L'expansion retardée de variables d'environnement vous permet d'utiliser un
    autre caractère (le point d'exclamation) afin d'étendre les variables
    d'environnement durant l'exécution. Si l'expansion retardée de variables est
    activée, les exemples ci-dessus peuvent être écrits comme suit afin de
    fonctionner comme vous le souhaitez :

    set VAR=avant
    if "%VAR%" == "avant" (
    set VAR=après
    if "!VAR!" == "après" @echo Cela marche si vous lisez ce message
    )

    set LIST=
    for %i in (*) do set LIST=!LIST! %i
    echo %LIST%

    Donc non maitrise oui, pas de souci tu ne vas pas l'inventer, mais tu n'as quand même pas du chercher beaucoup. As-tu cherché sur le forum ? Il y a plein de postes sur le sujet. J'exagèrerai à peine lorsque j'indiquais que le problème revenait toutes les semaines.

    Bref tu dois activer les expansions retardées de variables (setlocal enabledelayedexpansions de mémoire, orthographe à confirmer) en début de script et ensuite utiliser les !var! au lieu des %var% lorsque tu utilises ton chaine (pas de souci pour le %%A qui est un variable de boucle).

  11. #11
    Membre Expert
    Avatar de I'm_HERE
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    1 013
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Tunisie

    Informations forums :
    Inscription : Juillet 2008
    Messages : 1 013
    Par défaut
    Salut,

    en complément du post de Drizzt [Drone38] , tu peux aussi activer l'expansion de tes variables en changeant la façon dont l'interpréteur lit et execute ces instructions, en utilisant la commande call:

    voici un petit exemple:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    @echo off
    setlocal enabledelayedexpansion
    for /l %%a in (',1 0xA') do (
      set w=%%a
      %# lecture/execution une seul fois #%   
      echo %w%
      %# lecture/execution à chaque tour de boucle #% 
      echo !w!  
      %# lecture/execution à chaque tour de boucle #%
      call echo %%w%% 
    )
    pause

  12. #12
    Membre habitué
    Profil pro
    Inscrit en
    Juillet 2011
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2011
    Messages : 10
    Par défaut
    Merci a tous

    voila :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    setlocal enableDelayedExpansion
    for /F "delims=" %%A in (c:\test\fichier1.csv) do (
    set chaine=%%A 
    set chaine=!chaine:.=,! 
    echo !chaine! >> c:\test\fichier2.csv)

    Encore un grand Merci a tous


Discussions similaires

  1. Modification d'un fichier CSV
    Par Tobear91 dans le forum Langage
    Réponses: 2
    Dernier message: 12/02/2011, 18h32
  2. [AC-2003] Import de fichier CSV => Modification des caractères accentués
    Par Kloun dans le forum Access
    Réponses: 5
    Dernier message: 05/01/2011, 17h12
  3. Modification d'un caractère dans un fichier csv
    Par darkman13130 dans le forum C++Builder
    Réponses: 2
    Dernier message: 29/01/2009, 11h19
  4. Modification d'un fichier csv ?
    Par dauphin34000 dans le forum Langage
    Réponses: 2
    Dernier message: 15/08/2008, 14h07
  5. fichier CSV modification des données.
    Par suya95 dans le forum Excel
    Réponses: 8
    Dernier message: 26/07/2006, 12h22

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