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

MATLAB Discussion :

Exécuter commande grep sous Cygwin


Sujet :

MATLAB

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Octobre 2009
    Messages
    11
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2009
    Messages : 11
    Points : 5
    Points
    5
    Par défaut Exécuter commande grep sous Cygwin
    Bonjour à tous,

    Voici mon petit problème:

    J'ai des fichiers de pièces modélisé sous CATIA V5. Ces fichiers sont en *.stl
    Voici la structure de ce type de fichier :

    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
    solid CATIA STL
      facet normal -7.093288e-01 -6.892307e-01 -1.476943e-01
        outer loop
          vertex -2.304167e+01 -7.751000e+00 -5.103079e+00
          vertex -2.316356e+01 -7.751000e+00 -4.517657e+00
          vertex -2.309816e+01 -7.617627e+00 -5.454192e+00
        endloop
      endfacet
      facet normal -6.872915e-01 -7.088362e-01 -1.586869e-01
        outer loop
          vertex -2.304167e+01 -7.751000e+00 -5.103079e+00
          vertex -2.309816e+01 -7.617627e+00 -5.454192e+00
          vertex -2.294653e+01 -7.751000e+00 -5.515152e+00
        endloop
      endfacet
      facet normal -7.079939e-01 -7.060647e-01  1.473350e-02
        outer loop
          vertex -2.359726e+01 -7.751000e+00 -3.597442e-01
          vertex -2.379403e+01 -7.517618e+00  1.369119e+00
          vertex -2.383038e+01 -7.517618e+00 -3.779981e-01
        endloop
      endfacet
    …
    endsolid CATIA STL
    J'ai un scripte Matlab qui me permet de l'importer en *.mat donc en sois je n'ai pas de réel problème.

    Le truc c'est que pour un petit fichier de 10 Mo l'importation dur quelques minutes déjà ! Alors si c'est pour une grosse pièce qui fera surement 100Mo ou plus...

    Maintenant le rapport avec script Unix:

    Je sais que la ligne de commande suivante me récupère ce que je veux quasiment instantanément (sous Cygwin) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    grep "vertex" < filename.stl | sed 's/  / /g ;s/.*vertex //g' > filename
    (Cette ligne me retourne les 3 coordonnées des “vertex” qui définissent les facettes de la pièce)

    Je ne parviens pas en utilisant la fonction “unix(‘commande’)” à intégrer ma ligne de commande dans Matlab.

    Comment puis-je faire pour que cette ligne de commande fonctionne dans mon scripte Matlab, est-ce possible ?

    Merci d’avance pour vos réponses.

  2. #2
    Rédacteur/Modérateur

    Avatar de Jerome Briot
    Homme Profil pro
    Freelance mécatronique - Conseil, conception et formation
    Inscrit en
    Novembre 2006
    Messages
    20 318
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Freelance mécatronique - Conseil, conception et formation

    Informations forums :
    Inscription : Novembre 2006
    Messages : 20 318
    Points : 52 958
    Points
    52 958
    Par défaut
    Le code suivant fonctionne parfaitement :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    filename = 'test.stl';
    newfilename = strrep(filename,'.stl','.txt'); 
     
    cmd = sprintf('grep "vertex" < %s | sed ''s/  / /g ;s/.*vertex //g'' > %s',...
        filename,newfilename);
     
    unix(cmd);
     
    edit(newfilename)

  3. #3
    Futur Membre du Club
    Profil pro
    Inscrit en
    Octobre 2009
    Messages
    11
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2009
    Messages : 11
    Points : 5
    Points
    5
    Par défaut
    Merci pour votre réponse.

    Mais, un problème persiste.

    Au début j'ai cru que c'était parce que je n’avais pas installé Cygwin sur mon PC de travail, mais même après l'avoir fait j'ai toujours le même message d'erreur qui apparaît:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    'grep' n'est pas reconnu en tant que commande interne 
    ou externe, un programme ex‚cutable ou un fichier de commandes
    Que puis-je faire pour y remédier?

  4. #4
    Rédacteur/Modérateur

    Avatar de Jerome Briot
    Homme Profil pro
    Freelance mécatronique - Conseil, conception et formation
    Inscrit en
    Novembre 2006
    Messages
    20 318
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Freelance mécatronique - Conseil, conception et formation

    Informations forums :
    Inscription : Novembre 2006
    Messages : 20 318
    Points : 52 958
    Points
    52 958
    Par défaut
    Le chemin d'accès au dossier C:\Cygwin\bin est-il écrit dans la variable PATH de Windows ?

    Je ne suis pas sous Windows mais si je ne trompe pas, tu peux le vérifier en tapant ceci dans le Command Window :

    Sinon tu dois pouvoir y accéder par la fenêtre de gestion des variables d'environnements de Windows...

    Si le chemin n'apparaît pas, il faut l'ajouter.

  5. #5
    Futur Membre du Club
    Profil pro
    Inscrit en
    Octobre 2009
    Messages
    11
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2009
    Messages : 11
    Points : 5
    Points
    5
    Par défaut
    Après avoir cherché quelques minutes j’ai fini par trouver le PATH de windows. Je l’ai modifié et j’ai réessayé dans la foulé, et ca marchait pas.

    Et puis j’ai redémarré Matlab et la….

    Ça fonctionne !!!

    Merci beaucoup pour votre aide !

    A bientôt j’espère.

  6. #6
    Rédacteur/Modérateur

    Avatar de Jerome Briot
    Homme Profil pro
    Freelance mécatronique - Conseil, conception et formation
    Inscrit en
    Novembre 2006
    Messages
    20 318
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Freelance mécatronique - Conseil, conception et formation

    Informations forums :
    Inscription : Novembre 2006
    Messages : 20 318
    Points : 52 958
    Points
    52 958
    Par défaut
    A noter que le code peut être optimisé en dirigeant la sortie de grep vers la sortie standard plutôt que vers un fichier texte qu'il faudrait lire par la suite :
    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
     
    filename = 'test.stl';
     
    cmd = sprintf('grep "vertex" < %s | sed ''s/  / /g ;s/.*vertex //g''', filename);
     
    [status,temp] = unix(cmd);
     
    if status == 0
        STL = str2num(temp);
    else
        warning('Problem');
        STL = [];
    end
     
    STL

  7. #7
    Futur Membre du Club
    Profil pro
    Inscrit en
    Octobre 2009
    Messages
    11
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2009
    Messages : 11
    Points : 5
    Points
    5
    Par défaut
    Bonjour,

    Votre dernière réponse à anticipée mon besoin, chapeau !

    Grâce à votre aide mon gain de temps sur l’importation des fichiers est très important.

    A titre indicatif sur 2 fichiers :

    Version de code de base :
    Taille du fichier CAD : 5526 Kb
    Temps de traitement : 102,757539 secondes
    Taille finale : 456 Kb

    Nouvelle version :
    Taille du fichier CAD : 5526 Kb
    Temps de traitement : 8,431019 secondes
    Taille finale : 456 Kb

    Soit un gain de temps de 92.7952 % !

    Version de code de base :
    Taille du fichier CAD : 9638 Kb
    Temps de traitement : 375.159928 secondes
    Taille finale : 881 Kb

    Nouvelle version :
    Taille du fichier CAD : 9638 Kb
    Temps de traitement : 13.845686 secondes
    Taille finale : 881 Kb

    Soit un gain de temps de 96.3094 % !
    Imaginez maintenant sur des fichiers bien plus gros ce qu’aurait donné le code de base en temps et ce que le nouveau me permettra de gagner.

    Merci encore.

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

Discussions similaires

  1. Exécution commande Telnet sous Java
    Par akbwalid dans le forum API standards et tierces
    Réponses: 10
    Dernier message: 27/07/2011, 14h36
  2. commande RPM sous cygwin
    Par trin86 dans le forum Shell et commandes GNU
    Réponses: 2
    Dernier message: 16/01/2009, 20h24
  3. Problème avec grep sous Cygwin
    Par tnarol dans le forum Shell et commandes GNU
    Réponses: 1
    Dernier message: 09/07/2008, 18h12
  4. exécuter commandes sous cmd ?
    Par kimz dans le forum Windows XP
    Réponses: 9
    Dernier message: 01/03/2007, 23h38
  5. Réponses: 5
    Dernier message: 19/04/2005, 09h50

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