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

Windows Discussion :

Problème avec la fonction COPY -> nouveau caracè


Sujet :

Windows

  1. #1
    Membre du Club
    Inscrit en
    Juillet 2004
    Messages
    137
    Détails du profil
    Informations forums :
    Inscription : Juillet 2004
    Messages : 137
    Points : 63
    Points
    63
    Par défaut [Résolu] Problème avec la fonction COPY -> nouveau caracè
    Salut,

    Voilà mon souci :

    j'ai un .bat qui me récupère via ftp un fichier .txt sur un serveur distant et qui concatène ce fichier avec un existant sur une station en local.
    Les fichiers sont composés de lignes qui se terminent toutes par un retour charriot.
    Je visualise correctement le fichier que je rapratrie, pas de problème, mais quand je le concatène, au lieu d'avoir en fin de fichier une ligne vide (à cause du retour ligne) j'ai à la place une petite flêche. Du coup ça plante mes traitements suivants.
    Une idée d'où ça peut venir ? Comment enlever cette flêche ? Y a-t-il moyen de traiter des chaînes de caractères en .bat ?

    Merci d'avance !

    ToNf

  2. #2
    Rédacteur


    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    7 171
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 7 171
    Points : 15 060
    Points
    15 060
    Billets dans le blog
    1
    Par défaut
    Salut,
    comment concaténes-tu le fichier ?
    Le fichier est bien transféré un ASCII ?

  3. #3
    Membre du Club
    Inscrit en
    Juillet 2004
    Messages
    137
    Détails du profil
    Informations forums :
    Inscription : Juillet 2004
    Messages : 137
    Points : 63
    Points
    63
    Par défaut
    Le fichier est bien en ASCII.

    On imagine le fichier fich_total.txt comme suit :
    "00010001000100001
    "

    J'importe le fichier fich_import.txt comme suit :
    "11101110111011110
    "

    Je concatène en faisant "copy fich_total.txt+fich_import.txt fich_total.txt"

    J'obtiens :
    "00010001000100001
    ->11101110111011110
    ->"

    Je voudrais obtenir :
    "00010001000100001

    11101110111011110
    "

    En espérant que ça soit compréhensible et résolvable facilement...
    En fait mon fichier fich_total.txt sert de base de données pour Cognos. Le fichier fich_import.txt étant le fichier d'update quotidien.

    Merci !

  4. #4
    Rédacteur


    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    7 171
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 7 171
    Points : 15 060
    Points
    15 060
    Billets dans le blog
    1
    Par défaut
    [quote="tonf"]Je voudrais obtenir :
    "00010001000100001

    11101110111011110
    "
    [quote="tonf"]
    C'est peut être possible en batch mais avec un peu plus d'infos :
    Si j'ai bien compris tu veux donc ajouter à la fin du fichier F_total le contenu de F_import 1 ?

    Si tu ajoutes un retour chariot entre les 2 lignes cela ne peut se faire par un copy.
    Mais je n'ai pas trop compris si tes fichiers contiennent une ligne ou plusieurs ?
    Et qu'est-ce qui empêche le traitement dans ton cas ? qq chose en + ou en - ?

    Pour le caractére '->' assure toi que dans le fichier la combinaison CR LF est présente, il se peut que ton fichier contienne des caractéres de contrôle. Tu peux les visualiser sous Debug en mode console
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Debug file.txt
    rem ensuite commande D =display Q= quitter ?=aide

  5. #5
    Membre du Club
    Inscrit en
    Juillet 2004
    Messages
    137
    Détails du profil
    Informations forums :
    Inscription : Juillet 2004
    Messages : 137
    Points : 63
    Points
    63
    Par défaut
    Oui je veux ajouter le contenu du fichier F_import1 au fichier F_total.
    Ces fichiers contiennent plusieurs lignes qui se terminent toutes par un retour chariot.
    Je ne souhaite pas ajouter de retour chariot supplémentaire.
    Mais entre les deux fichiers concaténés par le batch et à la fin du fichier se trouve une flêche qui n'existe pas dans les fichiers.
    Si tu veux, je peux t'envoyer les fichiers pour voir si tu arrives à en faire quelquechose...

  6. #6
    Rédacteur


    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    7 171
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 7 171
    Points : 15 060
    Points
    15 060
    Billets dans le blog
    1
    Par défaut
    Salut,
    Citation Envoyé par tonf
    Si tu veux, je peux t'envoyer les fichiers pour voir si tu arrives à en faire quelquechose...
    Peux-tu les placer sur un site où je peux les télécharger ?

  7. #7
    Membre du Club
    Inscrit en
    Juillet 2004
    Messages
    137
    Détails du profil
    Informations forums :
    Inscription : Juillet 2004
    Messages : 137
    Points : 63
    Points
    63
    Par défaut
    En fait pas besoin de fichiers exemple précis.
    J'ai créé un fichier a.txt (la lettre "a" tapée dans le notepad c'est tout) et un fichier b.txt (la lettre "b" tapée dans le notepad).
    Si je fais copy a.txt+b.txt c.txt , j'obtiens dans le fichier c.txt "ab->" !!
    Il y a toujours cette flêche qui apparaît en fin de fichier. Je pensais que c'était du à un retour à la ligne dans les fichiers sources mais ce n'est pas le cas...

    Je ne comprends vraiment pas, j'ai même essayé avec les options /A et/ou /D, ça ne change rien...

    Pourtant ça doit être tout simple !

  8. #8
    Rédacteur


    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    7 171
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 7 171
    Points : 15 060
    Points
    15 060
    Billets dans le blog
    1
    Par défaut
    Comme je te l'avais signalé les fichiers n'ont pas la combinaison CR-LF, ils doivent provenir d'une machine UNIX ou l'outil de FTP est mal configuré.
    Si tu peux récupérer les fichiers correctement le batch peut être plus simple.
    J'ai ajouté le code pour la sauvegarde

    Le traitement suivant ne se fait qu'une seule fois pour initialiser le fichier Total.txt .
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    For /F "tokens=*" %%i in ('type "c:\temp\vteart_BF.txt"') do echo %%i>>Total.txt
    Je n'utilise pas la commande copy car elle ajoute un caractère de fin de fichier, et dans le cas de multiple append je pense que sa présence faussera le traitement.

    Le script :
    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
    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
    @echo off
     
     rem récupére la date du jour
    Call ::Setdate  
     
     rem Sauvegarde le fichier d'origine
    Copy Total.txt %Date%-Total.old
    
     rem to delete
     rem copy /A Total.txt+New.txt Total.txt ajoute un Control Z (1Ah) en fin de fichier
    
    
     rem Traite le fichier d'origine. Termine correctement la chaine
    For /F "tokens=*" %%i in ('type "c:\temp\vteart_BF.txt"') do echo %%i>>Total.txt
    
     rem Traite le fichier à ajouter. Termine correctement la chaine
    For /F "tokens=*" %%i in ('type "c:\temp\vteart_JY.txt"') do echo %%i>>Total.txt
    
     rem to delete
     type Total.txt
     pause
     
    goto end
    
    :Setdate
     rem Insére la date systéme dans une variable 
    
     rem recupére la date. Le parametre /T renvoie une ligne contenant 2 "mot"
     rem  le premier = le nom du jour 
     rem le deuxiéme = la date 
     rem on place donc le 2 ieme dans la variable
    for  /f "tokens=1-2 " %%A in ('Date /T') do set date=%%B
    
     rem le séparateur de format de date par défaut est "/"
     rem ce caractére est interdit dans les noms de fichier
     rem On utilise ce caractére séparateur pour parser la date JJ MM YYYY
     rem enfin on reconstruit la date avec le nouveau séparateur
     rem On peut utiliser la variable DATE comme nom de fichier.
     rem attention on code la date sur 10 caractéres (2+1+2+1+4)
     rem SOUS XP DATE=jj/mm/aaaa
    for  /f "tokens=1-3 delims=/" %%A in ('echo %DATE%') do set date=%%A-%%B-%%C
    goto :eof
    
    :end
     rem Sauvegarde le fichier d'origine. Copy si disque différent sinon Ren
    copy vteart_JY.txt %Date%-MAJ.txt
    rem Del /P /Q vteart_JY.txt

  9. #9
    Membre du Club
    Inscrit en
    Juillet 2004
    Messages
    137
    Détails du profil
    Informations forums :
    Inscription : Juillet 2004
    Messages : 137
    Points : 63
    Points
    63
    Par défaut
    Merci beaucoup !!
    Ca marche nickel pour ce qui est de la concaténation.
    Je pensais également faire une sauvegarde mais pas avec la fonction date. C'est vrai que ce serait bien !
    Mais ça ne marche pas, j'obtiens une erreur suite à l'exécution de Copy vte_glob.txt %date%-vte_glob.old. Apparemment, c'est la date qu'il n'aime pas... Les expressions en rouge ne sont pas prises en compte.
    Un dernier coup de pouce ?

    Merci d'avance !

    voici le script tel qu'il fonctionne :
    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
    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
    #Récupération des données sur le serveur de Basse-Terre
    ftp -s:ftp_BF.txt
    
    copy vteart.dat vteart_BF.txt
    del vteart.dat
    
    @echo off 
      
    rem récupére la date du jour 
    Call :Setdate  
    
    rem Sauvegarde le fichier d'origine 
    rem * PB *
    Copy vte_glob.txt %date%-vte_glob.old
    
    rem Traite le fichier d'origine. Termine correctement la chaine 
    For /F "tokens=*" %%i in ('type "vteart_BF.txt"') do echo %%i>>vte_glob.txt 
    
    rem Traite le fichier à ajouter. Termine correctement la chaine 
    For /F "tokens=*" %%i in ('type "vteart_JY.txt"') do echo %%i>>vte_glob.txt 
      
    goto end
    
    :Setdate 
    rem Insére la date systéme dans une variable 
    rem recupére la date. Le parametre /T renvoie une ligne contenant 2 "mot" 
    rem  le premier = le nom du jour 
    rem le deuxiéme = la date 
    rem on place donc le 2 ieme dans la variable 
    rem for  /f "tokens=1-2 " %%A in ('date /T') do set date=%%B 
    
    rem le séparateur de format de date par défaut est "/" 
    rem ce caractére est interdit dans les noms de fichier 
    rem On utilise ce caractére séparateur pour parser la date JJ MM YYYY 
    rem enfin on reconstruit la date avec le nouveau séparateur 
    rem On peut utiliser la variable DATE comme nom de fichier. 
    rem attention on code la date sur 10 caractéres (2+1+2+1+4) 
    rem SOUS XP DATE=jj/mm/aaaa 
    For  /f "tokens=1-3 delims=/" %%A in ('echo %date%') do set date=%%A-%%B-%%C 
    
    goto :eof 
    
    :end 
    rem Sauvegarde le fichier d'origine. Copy si disque différent sinon Ren 
    rem * PB *
    copy vteart_JY.txt %date%-MAJ.txt 
    rem Del /P /Q vteart_JY.txt

  10. #10
    Rédacteur


    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    7 171
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 7 171
    Points : 15 060
    Points
    15 060
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par tonf
    Un dernier coup de pouce ?
    Allez un dernier pour la route 8)

    Vérifie la code proposé et celui que tu utilises
    Utilise les balises code à l'avenir, merci.

  11. #11
    Membre du Club
    Inscrit en
    Juillet 2004
    Messages
    137
    Détails du profil
    Informations forums :
    Inscription : Juillet 2004
    Messages : 137
    Points : 63
    Points
    63
    Par défaut
    Je dois forcément être une grosse quiche alors
    J'ai uniquement fait un copier-coller de ton code, sans prendre la partie récupération de données via FTP, ça ne marche toujours pas...
    J'obtiens "syntaxe de la commande incorrecte" au tout début. Il ne me sauvegarde pas les fichiers. Ensuite, la concaténation se fait correctement...

  12. #12
    Rédacteur


    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    7 171
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 7 171
    Points : 15 060
    Points
    15 060
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par tonf
    Je dois forcément être une grosse quiche alors
    Moi en Cognos c'est pas mieux

    Pour la date, le call doit comporter deux caractéres ':', ils indiquent un appel à un sous programme 'interne'
    Pour débuger les scripts
    et
    Je peux pas faire plus.

    Quel OS ? j'aurais dû commencé par là.
    Quel éditeur utilises-tu ?

  13. #13
    Membre du Club
    Inscrit en
    Juillet 2004
    Messages
    137
    Détails du profil
    Informations forums :
    Inscription : Juillet 2004
    Messages : 137
    Points : 63
    Points
    63
    Par défaut
    J'utilise le bloc-note comme éditeur sous WinXP.
    Le code utilisé est réduit à "sa plus simple expression" :
    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
    17
    18
    19
    20
    21
    22
    23
    @echo on 
      
    Call ::Setdate  
      
    Copy Total.txt %Date%-Total.old 
    
    For /F "tokens=*" %%i in ('type "vteart_BF.txt"') do echo %%i>>Total.txt 
    
    For /F "tokens=*" %%i in ('type "vteart_JY.txt"') do echo %%i>>Total.txt 
     
    type Total.txt 
    pause 
      
    goto end 
    
    :Setdate 
    for  /f "tokens=1-2 " %%A in ('Date /T') do set date=%%B 
    for  /f "tokens=1-3 delims=/" %%A in ('echo %DATE%') do set date=%%A-%%B-%%C 
    goto :eof 
    
    :end 
    copy vteart_JY.txt %Date%-MAJ.txt 
    pause
    Tu peux voir une copie d'écran du résultat en cliquant sur result.gif à cette adresse : http://sagwada.fr.st/telechargement/

  14. #14
    Rédacteur


    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    7 171
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 7 171
    Points : 15 060
    Points
    15 060
    Billets dans le blog
    1
    Par défaut
    Sous quel OS est-tu ?

  15. #15
    Rédacteur


    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    7 171
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 7 171
    Points : 15 060
    Points
    15 060
    Billets dans le blog
    1
    Par défaut
    Une instruction
    ne doit pas se terminer par un espace.

    C'est le cas pour cette ligne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    for  /f "tokens=1-2 " %%A in ('Date /T') do set date=%%B
    supprime le caractére espace en fin de ligne

  16. #16
    Membre du Club
    Inscrit en
    Juillet 2004
    Messages
    137
    Détails du profil
    Informations forums :
    Inscription : Juillet 2004
    Messages : 137
    Points : 63
    Points
    63
    Par défaut
    Ca y est, CA MARCHE !!!

    C'est ce foutu espace qui empêchait la variable %date% de prendre sa valeur... Il y avait d'ailleurs un espace à chaque fin de ligne, je ne sais pas pourquoi.

    Merci beaucoup en tous cas pour tout ce temps passé.

    Bonne continuation !

  17. #17
    Rédacteur


    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    7 171
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 7 171
    Points : 15 060
    Points
    15 060
    Billets dans le blog
    1
    Par défaut

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

Discussions similaires

  1. Problème avec la fonction Copy
    Par dino35 dans le forum Débuter
    Réponses: 3
    Dernier message: 30/12/2014, 11h48
  2. problème avec la fonction copie
    Par meylanie dans le forum PHP & Base de données
    Réponses: 6
    Dernier message: 23/03/2010, 18h02
  3. [Requete SQL en VBA] Problème avec la fonction FLOOR
    Par zubral dans le forum Langage SQL
    Réponses: 4
    Dernier message: 13/07/2004, 13h24
  4. Problème avec les fonctions
    Par jvachez dans le forum PostgreSQL
    Réponses: 1
    Dernier message: 13/01/2004, 12h06
  5. [Postgresql]Problème avec les fonctions ...
    Par fet dans le forum Requêtes
    Réponses: 4
    Dernier message: 02/10/2003, 09h04

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