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

Shell et commandes GNU Discussion :

Aide pour une création de programme


Sujet :

Shell et commandes GNU

  1. #1
    Membre actif
    Inscrit en
    Janvier 2009
    Messages
    21
    Détails du profil
    Informations forums :
    Inscription : Janvier 2009
    Messages : 21
    Par défaut Aide pour une création de programme
    Bonjour,

    J'ai un programme à faire pour ma société. Je ne suis pas développeur et j'avoue que je sais à peine faire des batch donc ce forum professionnel et très éloigné de mes capacités.

    C'est pour cette raison que j'ai besoin de vous s'il vous plait.

    Un logiciel nous sort un fichier en .dat ouvrable avec n'importe logiciel de texte.

    La forme de sortie ressemble presque toujours à ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    EFIN100 0420 X=0.035 Y=-0.045 Z=104.184 C=-0.013 U=.2
    EFIN101 0421 X=-0.008 Y=0 Z=104.115 C=-0.112 U=.2
    EFIN102 0422 X=-0.012 Y=-0.004 Z=116.012 C=-0.043 U=.2
    ETc.... il peut y avoir 1000 EFIN
    Il faudrait que le programme transforme ces lignes en ceci (il faut également que le fichier d'extension change en .nc):

    Fichier de sortie .dat:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    EFIN100 0420 X=0.035 Y=-0.045 Z=104.184 C=-0.013 U=.2
    EFIN101 0421 X=-0.008 Y=0 Z=104.115 C=-0.112 U=.2
    EFIN102 0422 X=-0.012 Y=-0.004 Z=116.012 C=-0.043 U=.2
    Fichier de sortie .nc

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    G184 X=0.035 Y=-0.045 Z=104.184 U=-0.013
    G184 X=-0.008 Y=0 Z=104.115 U=-0.112
    G184 0422 X=-0.012 Y=-0.004 Z=116.012 U=-0.043
    Les EFIN100, EFIN101, EFIN1002.... Doivent tous être remplacé par G184.
    Le C= doit être remplacé par U= et tout ce qu'il y avait après le C=0.013 doit être supprimé (dans le cas ci-dessus u=.2 sur les 3 lignes)

    Je ne pense pas que ce soit dur à faire et je comptais le faire en .bat mais si vous aviez un solution plus simple ou plus « pro » je vous en serais très reconnaissant.

  2. #2
    Invité
    Invité(e)
    Par défaut
    hello,

    1 ligne dans un terminal unix
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    cat sortie.dat|sed 's/\(.*\)EFIN/G184/'|sed 's/C=\(.\+\) U=.*/U=\1/' > sortie.nc
    le premier sed remplace les EFIN (eventuellement precedes par 1000) par G184
    le second sed capture le contenu de C= et remplace par U=, ainsi qu'ignore tout le reste qui suit

  3. #3
    Membre actif
    Inscrit en
    Janvier 2009
    Messages
    21
    Détails du profil
    Informations forums :
    Inscription : Janvier 2009
    Messages : 21
    Par défaut
    Ouah c'est énorme ta réponse merci beaucoup beaucoup je voyais pas cela aussi simple.

    Mais du tout j'ai une grosse contrainte. Mes postes clients sont sous Windows (XP et 7 64 bits)

    As tu une solution pour ceci ?

  4. #4
    Invité
    Invité(e)
    Par défaut
    si tu ne peux pas installer cygwin alors je passe

  5. #5
    Membre actif
    Inscrit en
    Janvier 2009
    Messages
    21
    Détails du profil
    Informations forums :
    Inscription : Janvier 2009
    Messages : 21
    Par défaut
    Galerien je ne connaissais pas du tout Cygwin, je viens de l’installer ça fonctionne parfaitement en ajoutant dans la variable d’environnement PATH la ligne ;C:\CygWIN\BIN.

    J’ai créé un fichier test.bat ou j’ai ajouté ta ligne de commande :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    cat 1419.dat|sed 's/\(.*\)EFIN/G184/'|sed 's/C=\(.\+\) U=.*/U=\1/' > 1419.nc
    Voici le fichier de sortie :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    G184100 0420 X=0.035 Y=-0.045 Z=104.184 U=-0.013G184101 0421 X=-0.008 Y=0 Z=104.115 U=-0.112G184102 0422 X=-0.012 Y=-0.004 Z=116.012 U=-0.04
    3

    Comme tu peux le voir il n’y a plus les retours à la ligne de plus j’ai G184100, G184101 et je ne souhaiterais que G184.

    En fait il faudrait que le premier mot (car defois ça peut être EEB à la place de EINF) soit remplacé par G184.

    Mon second problème ce que les fichiers .dat ils risquent d’y en avoir énormément dans le répertoire.

    Il faudrait que le programme prennent tous les fichiers *.dat et les transforment en *.nc

    Sinon mille merci à toi pour l’aide c’est sympas.

  6. #6
    Invité
    Invité(e)
    Par défaut
    tu peux remplacer la regex par
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    cat 1419.dat|sed 's/\([^ ]*\)/G184/'|sed 's/C=\(.\+\) U=.*/U=\1/' > 1419.nc
    concernant le retour a la ligne, ca vient peut etre de lencoding du retour chariot.
    Essaye de faire un
    u2d 1419.nc
    ou unix2dos 1419.nc

  7. #7
    Modérateur
    Avatar de N_BaH
    Profil pro
    Inscrit en
    Février 2008
    Messages
    7 662
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 7 662
    Par défaut
    Bonjour,

    Mes postes clients sont sous Windows (XP et 7 64 bits)
    pourquoi ne t'es-tu pas adressé au forum Windows ?
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  8. #8
    Expert confirmé

    Profil pro
    Inscrit en
    Janvier 2011
    Messages
    1 946
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Janvier 2011
    Messages : 1 946
    Par défaut
    Salut,

    Plutôt que cygwin, tu pourrais juste installer soit les GNU utilities for Win32, soit juste Sed pour windows, ce qui devrait éliminer le problème d'encodage des fins de ligne...

    Sinon pour ton problème, après installation d'un des 2 paquets ci-dessus, essayes ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    $ cat brol
    EFIN100 0420 X=0.035 Y=-0.045 Z=104.184 C=-0.013 U=.2
    EFIN101 0421 X=-0.008 Y=0 Z=104.115 C=-0.112 U=.2
    EFIN102 0422 X=-0.012 Y=-0.004 Z=116.012 C=-0.043 U=.2
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    $ sed -r 's/(.*)( X=.*)C(=.[^ ]*).*/G184\2U\3/' brol 
    G184 X=0.035 Y=-0.045 Z=104.184 U=-0.013
    G184 X=-0.008 Y=0 Z=104.115 U=-0.112
    G184 X=-0.012 Y=-0.004 Z=116.012 U=-0.043
     
    $

  9. #9
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 838
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 838
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par galerien69 Voir le message
    hello,

    1 ligne dans un terminal unix
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    cat sortie.dat|sed 's/\(.*\)EFIN/G184/'|sed 's/C=\(.\+\) U=.*/U=\1/' > sortie.nc
    Hello
    1 ligne peut-être, mais 2 appels successifs à sed (donc un appel de trop)...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    cat sortie.dat|sed -e 's/\(.*\)EFIN/G184/' -e 's/C=\(.\+\) U=.*/U=\1/' > sortie.nc
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

  10. #10
    Membre actif
    Inscrit en
    Janvier 2009
    Messages
    21
    Détails du profil
    Informations forums :
    Inscription : Janvier 2009
    Messages : 21
    Par défaut
    Je viens de faire l'essai de ce code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    cat sortie.dat|sed -e 's/\(.*\)EFIN/G184/' -e 's/C=\(.\+\) U=.*/U=\1/' > sortie.nc
    Voici le résultat :

    G184100 0420 X=0.035 Y=-0.045 Z=104.184 U=-0.013G184101 0421 X=-0.008 Y=0 Z=104.115 U=-0.112G184102 0422 X=-0.012 Y=-0.004 Z=116.012 U=-0.043

    Je fais l'essai des autres et je vous tiens informé en tout cas je vous remerci vraiment pour l'aide.

  11. #11
    Membre actif
    Inscrit en
    Janvier 2009
    Messages
    21
    Détails du profil
    Informations forums :
    Inscription : Janvier 2009
    Messages : 21
    Par défaut
    J'ai fait d'autres essais sans amélioration. A la rigueur le saut de ligne n'est pas le plus important dans un premier temps.

    Ce qui m’intéresse le plus c'est de pouvoir faire plusieurs fichiers à la fois sans avoir à changer le début et la fin de la ligne de commande (1419.dat et 1419.nc)

    En fichier batch ce serait un truc du genre *.dat et *.nc

    Pour la première ligne le souci est toujours présent : G184100

    au lieu de G184 Voyez-vous ou il faut faire la modification ?

    Comme je le disais dans le post précédent merci pour l'aide et le temps que vous passez la dessus.

  12. #12
    Expert confirmé
    Homme Profil pro
    Développeur informatique en retraite
    Inscrit en
    Avril 2008
    Messages
    2 102
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côtes d'Armor (Bretagne)

    Informations professionnelles :
    Activité : Développeur informatique en retraite

    Informations forums :
    Inscription : Avril 2008
    Messages : 2 102
    Par défaut
    Citation Envoyé par shining666fr Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    EFIN100 0420 X=0.035 Y=-0.045 Z=104.184 C=-0.013 U=.2
    EFIN101 0421 X=-0.008 Y=0 Z=104.115 C=-0.112 U=.2
    EFIN102 0422 X=-0.012 Y=-0.004 Z=116.012 C=-0.043 U=.2
    ETc.... il peut y avoir 1000 EFIN
    Citation Envoyé par galerien69 Voir le message
    hello,

    1 ligne dans un terminal unix
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    cat sortie.dat|sed 's/\(.*\)EFIN/G184/'|sed 's/C=\(.\+\) U=.*/U=\1/' > sortie.nc
    le premier sed remplace les EFIN (eventuement precedes par 1000) par G184
    le second sed capture le contenu de C= et remplace par U=, ainsi qu'ignore tout le reste qui suit
    Juste une petite remarque à 2 cents, il me semble que shining666fr voulait dire (à confirmer):
    Il peut y avoir mille (occurrences de) EFIN et non "1000 EFIN",
    vu que le nombre qui suit est sur 3 digits!

    En conséquence de quoi, on peut supprimer le "\(.*\)" initial et ajouter 3 petits points:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    cat sortie.dat | sed -e 's/^EFIN.../G184/' -e 's/C=\(.\+\) U=.*/U=\1/' > sortie.nc
    Citation Envoyé par shining666fr Voir le message
    J'ai fait d'autres essais sans amélioration. A la rigueur le saut de ligne n'est pas le plus important dans un premier temps.

    Pour la première ligne le souci est toujours présent : G184100 au lieu de G184 Voyez-vous ou il faut faire la modification ?
    Les posts 6 et 8 répondent à cette question:
    http://www.developpez.net/forums/d12...e/#post6899577
    http://www.developpez.net/forums/d12...e/#post6899972

    Ce qui m’intéresse le plus c'est de pouvoir faire plusieurs fichiers à la fois sans avoir à changer le début et la fin de la ligne de commande (1419.dat et 1419.nc)

    En fichier batch ce serait un truc du genre *.dat et *.nc
    Je sais le faire en shell (sous cygwin):
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    for file in *.dat ; do
        echo "Converting file ${file}"
        ofile=$(basename $file ".dat")
        sed -e 's/^EFIN.../G184/' -e 's/C=\(.\+\) U=.*/U=\1/' ${file} > ${ofile}
    done
    Pour une version en .bat, voir un forum Windoze

    )jack(

  13. #13
    Membre actif
    Inscrit en
    Janvier 2009
    Messages
    21
    Détails du profil
    Informations forums :
    Inscription : Janvier 2009
    Messages : 21
    Par défaut
    Merci Jack tu assures :

    Alors j'ai essayé ta ligne :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    cat 1419.dat | sed -e 's/^EFIN.../G184/' -e 's/C=\(.\+\) U=.*/U=\1/' > 1419.nc
    G184 0420 X=0.035 Y=-0.045 Z=104.184 U=-0.013G184 0421 X=-0.008 Y=0 Z=104.115 U=-0.112G184 0422 X=-0.012 Y=-0.004 Z=116.012 U=-0.043


    Comme tu peux le voir ça fonctionne parfaitement pour les G184 mais si je met EFIN1001 au lieu de EFIN100 j'ai comme réponse G1841 (au lieu de G184).

    J'ai essayé de comprendre ton code en ajoutant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    cat 1419.dat | sed -e 's/^EFIN......./G184/' -e 's/C=\(.\+\) U=.*/U=\1/' > 1419.nc
    Mais ça ne fonctionne pas j'ai toujours G1841 de plus il arrivera assez souvent que EFIN soit remplacé par EEF100 (ou d'autre)

    Il faudrait une fonction qui remplace le premier mot (qu'il 3-4-5 ou meme 10 caractère par G184)

    Il manque aussi deux choses le saut de ligne à la fin et la conversion pour tout les fichiers.

    Il semblerait que ce code devrait marcher :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    for file in *.dat ; do
        echo "Converting file ${file}"
        ofile=$(basename $file ".dat")
        sed -e 's/^EFIN.../G184/' -e 's/C=\(.\+\) U=.*/U=\1/' ${file} > ${ofile}
    done
    Je suis sous Windows mais j'utilise Cygwin qui remplace mes commandes dos

    En erreur j'ai "file était attendu"

    Est-ce que ça te parle. En tout cas encore merci merci merci à tous ça avance bien ^^

  14. #14
    Expert confirmé
    Homme Profil pro
    Développeur informatique en retraite
    Inscrit en
    Avril 2008
    Messages
    2 102
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côtes d'Armor (Bretagne)

    Informations professionnelles :
    Activité : Développeur informatique en retraite

    Informations forums :
    Inscription : Avril 2008
    Messages : 2 102
    Par défaut
    Citation Envoyé par shining666fr Voir le message
    Merci Jack tu assures :
    euh... je n'aime pas la fausse modestie, mais je peux vraiment t'assurer que je n'assure pas autant que les N_BaH, zipe31 et autres Sve@ar qui m'ont maintes fois aidé (parfois sans le savoir)!

    Alors j'ai essayé ta ligne :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    cat 1419.dat | sed -e 's/^EFIN.../G184/' -e 's/C=\(.\+\) U=.*/U=\1/' > 1419.nc
    G184 0420 X=0.035 Y=-0.045 Z=104.184 U=-0.013G184 0421 X=-0.008 Y=0 Z=104.115 U=-0.112G184 0422 X=-0.012 Y=-0.004 Z=116.012 U=-0.043

    Comme tu peux le voir ça fonctionne parfaitement pour les G184 mais si je met EFIN1001 au lieu de EFIN100 j'ai comme réponse G1841 (au lieu de G184).

    J'ai essayé de comprendre ton code en ajoutant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    cat 1419.dat | sed -e 's/^EFIN......./G184/' -e 's/C=\(.\+\) U=.*/U=\1/' > 1419.nc
    Mais ça ne fonctionne pas j'ai toujours G1841 de plus il arrivera assez souvent que EFIN soit remplacé par EEF100 (ou d'autre)

    Il faudrait une fonction qui remplace le premier mot (qu'il 3-4-5 ou meme 10 caractère par G184)
    Explication: '^EFIN...' veut dire "un début de ligne, suivi des 4 caractères 'EFIN', suivis de 3 caractères quelconques', car je pensais que le format était fixe (7 caractères: EFIN suivis de 3 chiffres).

    S'il faut supprimer le premier mot (jusqu'à la première espace), et si le mot peut varier, alors il vaut mieux utiliser '^[^ ]* ' qui veut dire "début de ligne suivi par un caractère différent d'une espace répété un nombre quelconque de fois, suivi d'une espace":

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    cat 1419.dat | sed -e 's/^[^ ]* /G184/' -e 's/C=\(.\+\) U=.*/U=\1/' > 1419.nc
    Si tu veux aussi (comme il était plus ou moins indiqué dans ton premier post) toujours supprimer le 2ème mot, composé uniquement de chiffres (0420), tu peux ajouter '[0-9]* ':

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    cat 1419.dat | sed -e 's/^[^ ]* [0-9]* /G184/' -e 's/C=\(.\+\) U=.*/U=\1/' > 1419.nc
    Si la présence du 2ème mot est optionnelle et si la partie intéressante de la ligne commence toujours par X et si les deux premiers mots ne contiennent pas X, il est plus simple d'utiliser '^[^X]' qui veut dire "début de ligne suivi par un caractère différent de 'X' répété un nombre quelconque de fois":

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    cat 1419.dat | sed -e 's/^[^X]*/G184 /' -e 's/C=\(.\+\) U=.*/U=\1/' > 1419.nc
    Il manque aussi deux choses le saut de ligne à la fin
    Là, il faudrait voir un peu plus précisément le format des lignes du fichier, par exemple, avec la commande:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    od -c 1419.dat | head -40
    et la conversion pour tout les fichiers.

    Il semblerait que ce code devrait marcher :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    for file in *.dat ; do
        echo "Converting file ${file}"
        ofile=$(basename $file ".dat").nc
        sed -e 's/^EFIN.../G184/' -e 's/C=\(.\+\) U=.*/U=\1/' ${file} > ${ofile}
    done
    Je suis sous Windows mais j'utilise Cygwin qui remplace mes commandes dos

    En erreur j'ai "file était attendu"
    Est-ce que ça te parle.
    J'imagine qu'il a du mal à valoriser la variable ofile.
    De plus, il faudrait peut-être préciser le shell que cygwin doit utiliser.
    ça fait un moment que je n'ai pas pratiqué cygwin.

    Peux-tu essayer et nous donner le résultat de:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    #!/bin/sh    # ceci est la première ligne du script
    set -x
    for file in *.dat ; do
        echo "Converting file ${file}"
        ofile=$(basename $file ".dat").nc
        sed -e 's/^[^X]*/G184 /' -e 's/C=\(.\+\) U=.*/U=\1/' "${file}" > "${ofile}"
        break # pour sortir après la conversion du 1er fichier
    done
    Sinon tu peux remplacer la valorisation de ofile par:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
        ofile=`echo "$file" | sed -e 's/.dat/.nc/'`
    Attention aux backquotes, simples et doubles quotes!

  15. #15
    Membre actif
    Inscrit en
    Janvier 2009
    Messages
    21
    Détails du profil
    Informations forums :
    Inscription : Janvier 2009
    Messages : 21
    Par défaut
    C'est dans des cas comme ça que j'aurais aimé être programmeur ^^. L'informatique c'est vaste mon domaine c'est les serveurs et les postes clients (sous Microsoft).

    Je résume ce que je souhaite :

    Voici mon fichier 1419.dat (dans mon répertoire il y en aura des tas de fichier .dat)

    EFIN100 0420 X=0.035 Y=-0.045 Z=104.184 C=-0.013 U=.2
    EFIN100 0421 X=-0.008 Y=0 Z=104.115 C=-0.112 U=.2
    EFIN100 0422 X=-0.012 Y=-0.004 Z=116.012 C=-0.043
    EFIN1001 0421 X=-0.008 Y=0 Z=104.115 C=-0.112 U=.2
    EFIN1002 0422 X=-0.012 Y=-0.004 Z=116.012 C=-0.043 U=.2
    EEBIN1002 0422 X=-0.012 Y=-0.004 Z=116.012 C=-0.043 U=.2
    EEBIN100 0422 X=-0.012 Y=-0.004 Z=116.012 C=-0.043 U=.2

    Voici ce qu'il faudrait qu'il sorte 1419.nc (en tout les autres fichier .dat aussi transformé en .nc)

    G184 0420 X=0.035 Y=-0.045 Z=104.184 U=-0.013
    G184 0421 X=-0.008 Y=0 Z=104.115 U=-0.112
    G184 0422 X=-0.012 Y=-0.004 Z=116.012 U=-0.043
    G184 0421 X=-0.008 Y=0 Z=104.115 U=-0.112
    G184 0422 X=-0.012 Y=-0.004 Z=116.012 U=-0.043
    G184 0422 X=-0.012 Y=-0.004 Z=116.012 U=-0.043
    G184 0422 X=-0.012 Y=-0.004 Z=116.012 U=-0.043

    jack j'ai essayé ce premier code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    cat 1419.dat | sed -e 's/^[^ ]* /G184/' -e 's/C=\(.\+\) U=.*/U=\1/' > 1419.nc
    Voici le résultat :

    EFIN100G1840420 X=0.035 Y=-0.045 Z=104.184 U=-0.013EFIN100G1840421 X=-0.008 Y=0 Z=104.115 U=-0.112EFIN100G1840422 X=-0.012 Y=-0.004 Z=116.012 C=-0.043EFIN1001G1840421 X=-0.008 Y=0 Z=104.115 U=-0.112EFIN1002G1840422 X=-0.012 Y=-0.004 Z=116.012 U=-0.043EEBIN1002G1840422 X=-0.012 Y=-0.004 Z=116.012 U=-0.043EEBIN100G1840422 X=-0.012 Y=-0.004 Z=116.012 U=-0.043

    Si j'ajoute les sauts de lignes ça donne :

    EFIN100G1840420 X=0.035 Y=-0.045 Z=104.184 U=-0.013
    EFIN100G1840421 X=-0.008 Y=0 Z=104.115 U=-0.112
    EFIN100G1840422 X=-0.012 Y=-0.004 Z=116.012 C=-0.043
    EFIN1001G1840421 X=-0.008 Y=0 Z=104.115 U=-0.112
    EFIN1002G1840422 X=-0.012 Y=-0.004 Z=116.012 U=-0.043
    EEBIN1002G1840422 X=-0.012 Y=-0.004 Z=116.012 U=-0.043
    EEBIN100G1840422 X=-0.012 Y=-0.004 Z=116.012 U=-0.043

    La dernière partie est bonne mais pour les G184 pas du tout.

    Pour les deux autres codes :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    cat 1419.dat | sed -e 's/^[^ ]* [0-9]* /G184/' -e 's/C=\(.\+\) U=.*/U=\1/' > 1419.nc
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    cat 1419.dat | sed -e 's/^[^X]*/G184 /' -e 's/C=\(.\+\) U=.*/U=\1/' > 1419.nc
    Malheureusement dans mon cas ils me serviront pas, je les ai essayé quand même mais sans résultat intéressant pour moi.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    od -c 1419.dat | head -40
    J'ai lancé cette commande mais elle me remonte rien à quoi doit-elle me servir ?

    Le code suivant me donne ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    #!/bin/sh    # ceci est la première ligne du script
    set -x
    for file in *.dat ; do
        echo "Converting file ${file}"
        ofile=$(basename $file ".dat").nc
        sed -e 's/^[^X]*/G184 /' -e 's/C=\(.\+\) U=.*/U=\1/' "${file}" > "${ofile}"
        break # pour sortir après la conversion du 1er fichier
    done
    #! n'est pas reconnu en tant que commande interne ou externe, un programme exécutable ou un fichier de commande

    C:\USER\MOI.MONDOMAINE\desktop\test>set -x
    La variable d'environnement -x n'est pas définie. File était inattendu.

    Faut-il que j'installe un autre logiciel ?

    Je sais que je me répete mais merci de prendre du temps pour m'aider sur mon problème.

  16. #16
    Expert confirmé

    Profil pro
    Inscrit en
    Janvier 2011
    Messages
    1 946
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Janvier 2011
    Messages : 1 946
    Par défaut
    Re-
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    $ cat plop 
    EFIN100 0420 X=0.035 Y=-0.045 Z=104.184 C=-0.013 U=.2
    EFIN100 0421 X=-0.008 Y=0 Z=104.115 C=-0.112 U=.2
    EFIN100 0422 X=-0.012 Y=-0.004 Z=116.012 C=-0.043
    EFIN1001 0421 X=-0.008 Y=0 Z=104.115 C=-0.112 U=.2
    EFIN1002 0422 X=-0.012 Y=-0.004 Z=116.012 C=-0.043 U=.2
    EEBIN1002 0422 X=-0.012 Y=-0.004 Z=116.012 C=-0.043 U=.2
    EEBIN100 0422 X=-0.012 Y=-0.004 Z=116.012 C=-0.043 U=.2
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    $ sed -r 's/[^ ]*(.*)( X=.*)C(=.[^ ]*).*/G184\1\2U\3/' plop 
    G184 0420 X=0.035 Y=-0.045 Z=104.184 U=-0.013
    G184 0421 X=-0.008 Y=0 Z=104.115 U=-0.112
    G184 0422 X=-0.012 Y=-0.004 Z=116.012 U=-0.043
    G184 0421 X=-0.008 Y=0 Z=104.115 U=-0.112
    G184 0422 X=-0.012 Y=-0.004 Z=116.012 U=-0.043
    G184 0422 X=-0.012 Y=-0.004 Z=116.012 U=-0.043
    G184 0422 X=-0.012 Y=-0.004 Z=116.012 U=-0.043
     
    $
    Peux-tu afficher les 4 ou 5 premières lignes de la commande cat -A 1419.dat s'il te plaît, merci.

  17. #17
    Membre actif
    Inscrit en
    Janvier 2009
    Messages
    21
    Détails du profil
    Informations forums :
    Inscription : Janvier 2009
    Messages : 21
    Par défaut
    C'est bien cette ligne de commande que tu me demandes d'essayer ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    cat 1419.dat | sed -r 's/[^ ]*(.*)( X=.*)C(=.[^ ]*).*/G184\1\2U\3/' > 1419.nc
    Si c'est le cas j'ai ceci en retour :

    G184EFIN100 0420 X=0.035 Y=-0.045 Z=104.184 U=-G184EFIN100 0421 X=-0.008 Y=0 Z=104.115 U=-G184EFIN100 0422 X=-0.012 Y=-0.004 Z=116.012 U=-G184EFIN1001 0421 X=-0.008 Y=0 Z=104.115 U=-G184EFIN1002 0422 X=-0.012 Y=-0.004 Z=116.012 U=-G184EEBIN1002 0422 X=-0.012 Y=-0.004 Z=116.012 U=-G184EEBIN100 0422 X=-0.012 Y=-0.004 Z=116.012 U=-

    Avec saut de ligne :

    G184EFIN100 0420 X=0.035 Y=-0.045 Z=104.184 U=-
    G184EFIN100 0421 X=-0.008 Y=0 Z=104.115 U=-
    G184EFIN100 0422 X=-0.012 Y=-0.004 Z=116.012 U=-
    G184EFIN1001 0421 X=-0.008 Y=0 Z=104.115 U=-
    G184EFIN1002 0422 X=-0.012 Y=-0.004 Z=116.012 U=-
    G184EEBIN1002 0422 X=-0.012 Y=-0.004 Z=116.012 U=-
    G184EEBIN100 0422 X=-0.012 Y=-0.004 Z=116.012 U=-

  18. #18
    Expert confirmé

    Profil pro
    Inscrit en
    Janvier 2011
    Messages
    1 946
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Janvier 2011
    Messages : 1 946
    Par défaut
    Il y a un problème avec l'encodage de ton fichier

    Affiche le résultat de cette commande s'il te plaît :


  19. #19
    Membre actif
    Inscrit en
    Janvier 2009
    Messages
    21
    Détails du profil
    Informations forums :
    Inscription : Janvier 2009
    Messages : 21
    Par défaut
    Cette commande ne me remonte rien penses tu que ça vienne de cygwin qui est installé sur un windows ?

  20. #20
    Expert confirmé

    Profil pro
    Inscrit en
    Janvier 2011
    Messages
    1 946
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Janvier 2011
    Messages : 1 946
    Par défaut
    Bizarre

    Et celle-là :

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

Discussions similaires

  1. Aide pour une création
    Par Lukaslunt dans le forum Débuter
    Réponses: 3
    Dernier message: 19/06/2008, 16h10
  2. Réponses: 3
    Dernier message: 26/06/2007, 14h53
  3. Réponses: 1
    Dernier message: 17/05/2006, 15h27
  4. Réponses: 2
    Dernier message: 10/03/2006, 13h55
  5. Création requete besoin d'aide pour une date
    Par royrremi dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 14/07/2004, 22h03

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