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 :

Ouvrir et manipuler fichier txt


Sujet :

MATLAB

  1. #1
    Membre à l'essai Avatar de neodole
    Homme Profil pro
    Ingénieur après-vente
    Inscrit en
    Avril 2012
    Messages
    32
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur après-vente
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2012
    Messages : 32
    Points : 21
    Points
    21
    Par défaut Ouvrir et manipuler fichier txt
    Bonjour,

    Je dois réaliser un programme qui me permet d'ouvrir un fichier texte contenant beaucoup de données alphanumériques pour ensuite récupérer certaines données spécifiques et les intégrer dans un tableau.
    Dans un premier temps, j'avais utilisé la fonction Load mais malheureusement elle ne prends pas en charge les caractères. J'ai fait différentes recherches et je ne sais pas quelle fonction utilisée sachant que le nombre de données par ligne dans le fichier texte n'est pas constant.

    Est-ce que quelqu'un du forum aurait une idée?
    Merci d'avance

    Neodole

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

    C'est difficile à dire sans avoir un aperçu, car c'est au cas par cas.
    Mais tel que tu le décris, à voir en priorité les fonctions de la première partie de ce sujet de la FAQ.

  3. #3
    Membre à l'essai Avatar de neodole
    Homme Profil pro
    Ingénieur après-vente
    Inscrit en
    Avril 2012
    Messages
    32
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur après-vente
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2012
    Messages : 32
    Points : 21
    Points
    21
    Par défaut
    Bonjour,

    Merci pour ta réponse. J'ai lu le document que tu m'as conseillé précédemment et j'ai quelques idées. Pour te donner plus de précision, le type de fichier texte est le suivant:

    0  DATE: 04-29-13     2:30 PM
    0 **********************************************************************
               1         2         3         4         5         6         7
      1234567890123456789012345678901234567890123456789012345678901234567890
      **********************************************************************
      LANGU    2
      MODEL MTC500/200 :  SHAYBAH   10150rpm/5.971KW  - 762209152-51
      GSMAT    3    3    0    5
      C
      C     Coordonnées en m
      C
      KOORD    1   0.0000
      KOORD    2   0.0460
      KOORD    3   0.0660
      KOORD    4   0.1120
      KOORD    5   0.1848
      KOORD    6   0.2120
      KOORD    7   0.2390
      KOORD    8   0.2490
      KOORD    9   0.2790
      KOORD   10   0.3370
      KOORD   11   0.3780
    Il s'agit d'une suite de coordonnées, de distance et de grandeur physique. Il y a des irrégularité dans la suite de données puisqu'il y a des commentaires de temps en temps.
    J'aurais besoin de metttre le fichier texte sous la forme d'un tableau de 6 ou 7 colonnes en y définissant le nombre de caractères par colonne à prendre en compte. Cela me permettra ensuite de faire une recherche et de retrouver des données précises telles que la coordonnées identifié par une cellule KOORD à un point précis identifié dans la cellule suivante (nombre de 1 à xxx) et ainsi de suite. Le fichier peut avoir une taille importante. Je pense après lecture des différentes discussion sur le forum que la fonction a utilisé ici est Textscan mais je ne comprends pas la manière d'utiliser les paramètres de cette fonction, la documentation Matlab est loin d'être simple.

    Merci d'avance

  4. #4
    Membre à l'essai Avatar de neodole
    Homme Profil pro
    Ingénieur après-vente
    Inscrit en
    Avril 2012
    Messages
    32
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur après-vente
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2012
    Messages : 32
    Points : 21
    Points
    21
    Par défaut
    Bonjour,

    L'utilisation de la fonction uiimport organise exactement les données comme je le souhaite, c'est à dire sur en plusieurs colonnes. Le seul point négatif est de devoir importer la selection manuellement ce qui n'est pas pratique...j'ai essayé d'utiliser importdata mais je n'arrive pas à obtenir les données organiser comme avec uiimport....quelqu'un aurait une idée car là je rame !!!

    Merci d'avance

  5. #5
    Membre éclairé
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    640
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 640
    Points : 776
    Points
    776
    Par défaut
    Bonjour,

    j'avais des fichiers similaires à celui que tu présentes et je passais souvent par la fonction textscan en sautant les premières lignes.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    A=fopen('test.txt','r')
    B=textscan(A,'%s %s %s','headerlines',12)
    % avec les fonctions qui vont bien pour ensuite faire des tests etc...
    cell2mat(B{1}(1))
    str2double(cell2mat(B{2}(1)))
    Là, tu as une organisation par 3 colonnes, mais tu peux changer tout ça.
    A modifier si tu as un nombre de ligne de commentaire non constant sur tes différents fichiers. Tu peux à ce moment là faire des tests pour trouver le nombre de ligne à sauter.

  6. #6
    Membre à l'essai Avatar de neodole
    Homme Profil pro
    Ingénieur après-vente
    Inscrit en
    Avril 2012
    Messages
    32
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur après-vente
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2012
    Messages : 32
    Points : 21
    Points
    21
    Par défaut
    Bonjour Merel,

    Merci pour ces informations, en effet ça marche plutôt pas mal...je suis en cours de test et j'essaye d'adapter le code en fonction du fichier à charger.
    J'ai cependant une question: la structure du fichier texte est toujours du même type au regard du nombre de caractères. Je m'explique: il faudrait que je puisse choisir le nombre de caractères à définir dans chaque colonne...mais pour l'instant je n'y arrive pas car dans ces caractères il y a des nombres des chiffres et des blancs!!!! j'espère être clair dans le vocabulaire que j'utilise.

    Merci encore

  7. #7
    Rédacteur/Modérateur

    Avatar de Jerome Briot
    Homme Profil pro
    Freelance mécatronique - Conseil, conception et formation
    Inscrit en
    Novembre 2006
    Messages
    20 316
    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 316
    Points : 52 948
    Points
    52 948
    Par défaut
    Ne pas oublier de fermer le fichier avec fclose juste après textscan

  8. #8
    Membre à l'essai Avatar de neodole
    Homme Profil pro
    Ingénieur après-vente
    Inscrit en
    Avril 2012
    Messages
    32
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur après-vente
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2012
    Messages : 32
    Points : 21
    Points
    21
    Par défaut
    Bonjour,

    Pourquoi fermer le fichier avec fclosed? Dans mon cas ça marche sans !!!

    Merci d'avance

  9. #9
    Rédacteur/Modérateur

    Avatar de Jerome Briot
    Homme Profil pro
    Freelance mécatronique - Conseil, conception et formation
    Inscrit en
    Novembre 2006
    Messages
    20 316
    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 316
    Points : 52 948
    Points
    52 948
    Par défaut
    Parce que !

    Selon le système d'exploitation, on ne peut ouvrir qu'un nombre donné de fichier. De plus l'accès a un fichier ouvert peut être bloqué tant que celui-ci n'est pas fermé.

    C'est donc toujours une bonne habitude de fermer le fichier dès que possible.

  10. #10
    Membre à l'essai Avatar de neodole
    Homme Profil pro
    Ingénieur après-vente
    Inscrit en
    Avril 2012
    Messages
    32
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur après-vente
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2012
    Messages : 32
    Points : 21
    Points
    21
    Par défaut
    Ok c'est vrai que ça paraît assez logique et puis autant prendre les bonnes habitudes dès le début.

    Concernant mon message précédant, as-tu une idée?
    J'aimerai charger le fichier texte en ne prenant pas en compte les 2 premiers caractères (Blanc précédant KOORD), puis en ayant 2 colonnes de 5 caractères ensuite et puis un certains nombre de colonnes de 10 caractères. Je ne sais pas si c'est possible avec la fonction textscan mais en tout cas je n'y arrive pas.

    Merci d'avance

  11. #11
    Membre à l'essai Avatar de neodole
    Homme Profil pro
    Ingénieur après-vente
    Inscrit en
    Avril 2012
    Messages
    32
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur après-vente
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2012
    Messages : 32
    Points : 21
    Points
    21
    Par défaut
    ReBonjour,

    Merci pour votre aide, j'ai réussi à résoudre mon problème. J'ai cependant une autre question et un autre problème...je sais j'ai un peu de mal mais bon je débute sur Matlab donc c'est pas forcément facile.
    Je veux écrire dans écrire dans une cellule d'un fichier excel une valeur de la manière suivante:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    NodePal=xlsread(xlsfile,'Nodes','B8:B100');
    n=1;
    while NodePal(n)~=0
        xlswrite(xlsfile,NodePal(n),'Géo','B38:B38');
        n=n+1;    
    end
    J'arrive à lire le fichier excel avec xlsread et à récupérer une partie des données (colonne de B8 à B100)...jusque là pas de problème. Mais ensuite je souhaiterai à la première boucle recopier la valeur en B38:B38 puis si la second boucle répond à la condition du while copier la valeur NodePal(n+1) dans B39:B39 et ainsi de suite. Malheureusement je n'arrive pas à mettre la variable n dans l'argument Range de la fonction xlswrite. J'ai essayé de mettre Bn:Bn; b{n}:b{n}....mais impossible et je ne trouve pas d'infos sur le forum ou sur internet donc si quelqu'un peut m'aider ça serait très gentil.

    Merci d'avance
    Neodole

  12. #12

  13. #13
    Membre à l'essai Avatar de neodole
    Homme Profil pro
    Ingénieur après-vente
    Inscrit en
    Avril 2012
    Messages
    32
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur après-vente
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2012
    Messages : 32
    Points : 21
    Points
    21
    Par défaut
    Ok ça marche, j'arrive à concaténer un caractère et un nombre. Merci

    Dans mon programme ci-dessous:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    NodeBal=xlsread(xlsfile,'Nodes','N8:N100');
    NameBal=xlsread(xlsfile,'Nodes','O8:O100');
    n=1;
    while NodeBal(n)~=0
        y=36+n;
        B=sprintf('G%d:G%d',y,y);
        A=sprintf('A%d:A%d',y,y);
        xlswrite(xlsfile,NodeBal(n),'Géo',B);
        xlswrite(xlsfile,NameBal(n),'Géo',A);
        n=n+1;    
    end

    J'ai un problème avec ma variable NameBal qui vient lire une colonne des noms de variables. L'objectif est ensuite de copier la valeur dans une autre feuille (B/NodeBal) puis de copier le nom de cette données à l'aide de 1/NameBal. Ca marche pour B qui correspond à des valeurs numériques par contre impossible pour le nom des variables. La fonction xlsread renvoie une variable NameBal qui ne contient pas le texte des cellule O8 à O100 mais [] et je ne comprends pas pourquoi. Je pense qu'il s'agit d'un problème de type de données mais je ne trouve pas la solution. Avez-vous une idée?

    Merci d'avance

  14. #14
    Rédacteur/Modérateur

    Avatar de Jerome Briot
    Homme Profil pro
    Freelance mécatronique - Conseil, conception et formation
    Inscrit en
    Novembre 2006
    Messages
    20 316
    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 316
    Points : 52 948
    Points
    52 948
    Par défaut
    C'est le comportement normal de xlsread.

    Le premier argument de sortie contient les valeurs numériques alors que le second contient les chaines de caractères. Voir la documentation de la fonction.

    Il faut donc faire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    [pasbesoin,NameBal] = xlsread(xlsfile,'Nodes','O8:O100');
    ou avec les versions récentes de MATLAB :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    [~,NameBal] = xlsread(xlsfile,'Nodes','O8:O100');

Discussions similaires

  1. [XL-2007] Ouvrir tous les fichiers txt d'un répertoire
    Par discus23 dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 20/06/2012, 15h34
  2. [XL-2007] Manipulation fichier txt / fonction Save As
    Par familledacp dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 14/11/2011, 21h49
  3. [XL-2003] Manipulation fichier txt et erreur 14, Espace de chaîne insuffisant
    Par ted the Ors dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 07/01/2010, 14h58
  4. Ouvrir et écrire dans un fichier .txt en T-SQL
    Par joul's dans le forum MS SQL Server
    Réponses: 11
    Dernier message: 27/10/2008, 21h04
  5. PB manipulation fichier txt en php
    Par toulonnais83 dans le forum Langage
    Réponses: 1
    Dernier message: 24/04/2007, 00h23

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