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 :

Lancer un programme sous DOS [Débutant]


Sujet :

MATLAB

  1. #1
    Membre à l'essai
    Inscrit en
    Mai 2007
    Messages
    29
    Détails du profil
    Informations forums :
    Inscription : Mai 2007
    Messages : 29
    Points : 24
    Points
    24
    Par défaut Lancer un programme sous DOS
    Bonjour,

    Je travaille sur la récupération de données contenues dans des fichiers Word. Pour cela je voudrais convertir les fichiers Word en fichiers text via le programme Antiword. Jusque là, pas de problème. Mon souci vient de la quantité de fichiers à convertir. Pour cela, j'aimerais effectuer la conversion à partir de Matlab (programme que j'utilise pour récupérer et analyser les données) de manière automatique.

    Mon idée (déjà testée) est la suivante:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    for i = 1 : x
        dos('cd\')
        dos('cd antiword')
        dos('antiword fichier(i).doc > fichier(i).txt')
    end
    Je reçois un message lors de la lecture de la 3ème et 4ème lignes:

    The system cannot find the path specified.

    Mon intuition me dit que le problème vient de la manière d'écrire les commandes DOS. En effet, il semble que chaque fois que la commande est lue et exécutée, le système efface les informations. Il faudrait donc écrire les commandes les unes après les autres genre dos('cd\ , cd..., antiword...').

    Si vous avez des informations ou des avis, je suis preneur.

    Merci d'avance

    Version de matlab: Matlab 7.4.0

  2. #2
    Expert éminent sénior
    Avatar de Caro-Line
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    9 458
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 9 458
    Points : 14 830
    Points
    14 830
    Par défaut
    1. Le mieux ce serait que tu mette le chemin complet vers ton exécutable.
    ex :
    Si antiword.exe est dans C:\monrep :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    dos('C:\monrep\antiword fich');
    D'autre part je suppose que dans fichier(i) il y a le nom réel de ton fichier (ce qui métonne ne serait-ce pas plutôt une cellule fichier{i} ?).
    Dans ce cas il faut écrire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    dos(['antiword ',fichier(i),'.doc > ',fichier(i),'.txt'])

  3. #3
    Rédacteur/Modérateur

    Avatar de Jerome Briot
    Homme Profil pro
    Freelance mécatronique - Conseil, conception et formation
    Inscrit en
    Novembre 2006
    Messages
    20 304
    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 304
    Points : 52 881
    Points
    52 881
    Par défaut
    Citation Envoyé par caro95470
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    dos(['antiword ',fichier(i),'.doc > ',fichier(i),'.txt'])
    Ou
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    dos(sprintf('antiword %s.doc > %s.txt',fichier(i),fichier(i)))

  4. #4
    Membre à l'essai
    Inscrit en
    Mai 2007
    Messages
    29
    Détails du profil
    Informations forums :
    Inscription : Mai 2007
    Messages : 29
    Points : 24
    Points
    24
    Par défaut
    Bonjour à tous et merci pour les réponses.

    Il est vrai que mon exemple n'était pas très réussi. Voici le code complet:

    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
     
    dos('cd\')                              %delete path to Matlab working directory
    dos('cd antiword')                   %open directory containing antiword program
    for i = 1:numel(ListRec)
        contentRec = dir(['HYD\' ListRec{i}]);
        contentRec(1:2) = [];               %delete . and .. folders   
     
        for j = 1:numel(contentRec)         %delete the ".doc" for each file name
        ListStepRec(j) = regexp(contentRec(j,1).name, '\w+\W\w+(?=\.)', 'match');
     
        A = ['antiword .\' path1 '\' ListRec{i} '\' ListStepRec{j} '.doc > .\' ...
            path1 'Txt\' ListRec{i} '\' ListStepRec{j} '.txt'];  
        dos(A);                             %convert doc file to txt file
        end
    end
    Mes données sont dans le dossier HYD qui contient une série de dossiers et dans chaque dossier se trouve une dizaine de fichiers word.
    (merci Dutmatlab pour le truc concernant la syntaxe)

    Pour simplifer, mon problème se situe dans le changement de répertoire sous DOS: lorsque je lance DOS depuis Matlab, DOS pointe vers le répertoire de travail de Matlab (C:\...\My_Documents\Matlab). Or je dois modifier préalablement le path sous DOS pour indiquer le répertoire contenant Antiword (C:\Antiword) avant de lancer le programme.
    Le souci provient du fait que chaque fois que je lance un commande DOS, le système "oublie" le résultat des commandes DOS précédentes. Ex: lorsque je lance la commande dos('cd antiword'), DOS ne pointe pas vers le répertoire C:\ suite à la commande dos('cd\'), mais pointe vers le répertoire de travail de matlab.

    En résumé, peut-on en une seule commande DOS changer le répertoire et lancer un programme ?
    La solution proposée par caro95470 est valable uniquement si DOS pointe directement vers C:, il me semble ???

    Reste la possibilité de placer le programme Antiword dans le répertoire de travail de Matlab. A voir.

  5. #5
    Membre à l'essai
    Inscrit en
    Mai 2007
    Messages
    29
    Détails du profil
    Informations forums :
    Inscription : Mai 2007
    Messages : 29
    Points : 24
    Points
    24
    Par défaut Solution
    Si DOS ne vient pas à toi via Matlab, alors va chez DOS pour retrouver Matlab (proverbe du matlabeur débutant).

    Solution au problème ci-dessus:

    La capacité de travailler sous DOS via Matlab est limitée. Il faut installer le programme Antiword de manière à pouvoir le lancer sous n'importe quel répertoire, c.-à-d. créer les variables environnement nécessaires. Dès lors le code se simplifie:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    dos('mkdir HYDTxt')                     %create a folder to save txt files
     
    for i = 1:numel(ListRec)
        contentRec = dir(['HYD\' ListRec{i}]);
        contentRec(1:2) = [];               %delete . and .. folders   
     
        for j = 1:numel(contentRec)         %delete the ".doc" for each file name
            ListStepRec(j) = regexp(contentRec(j,1).name, '\w+\W\w+(?=\.)', 'match');
            dos(['antiword HYD\' ListRec{i} '\' ListStepRec{j} ...
                '.doc > HYDTxt\' ListStepRec{j} '.txt']);    %convert doc file to txt file                     
        end
    end
    Désolé du dérangement et encore merci pour l'aide. En espérant pouvoir vous rendre la pareille un jour.

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

Discussions similaires

  1. Problème d’appel d’un programme sous dos
    Par dot-_-net dans le forum C
    Réponses: 8
    Dernier message: 15/11/2007, 12h23
  2. programmer sous dos
    Par AsmCode dans le forum C++
    Réponses: 2
    Dernier message: 28/11/2005, 18h16
  3. Comment programmer sous dos ?
    Par AsmCode dans le forum C++
    Réponses: 8
    Dernier message: 17/11/2005, 02h07

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