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 :

lire valeurs séparées par virgules


Sujet :

MATLAB

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Juin 2010
    Messages
    31
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2010
    Messages : 31
    Points : 14
    Points
    14
    Par défaut lire valeurs séparées par virgules
    salut,

    j'ai un fichier avec des abscisses et ordonnées séparés par des virgules pour N points, chaque point étant sur une ligne.

    je recupere les valeurs par fgets, mais ca me renvoie une chaine unique de caractere !!!
    j'utilise alors textscan mais pareil, format chaine de caractere.

    en fait j'ai du mal a voir la stratégie de résolution de mon probleme.

    voici un exemple du fichier source :

    1, 472.999451, -25.2571011, 60.9760513
    2, 473.553314, -21.2145004, 51.2163658
    3, 504.453888, -21.2694378, 51.3489647


    merci pour votre aide

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

    TEXTSCAN (ou FSCANF) est pourtant un bon choix pour obtenir des valeurs numériques au lieu de chaînes de caractères...
    Qu'as-tu essayé de codé?
    As-tu regardé sa documentation et/ou fait des recherches sur le forum?

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    124
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Avril 2010
    Messages : 124
    Points : 52
    Points
    52
    Par défaut textscan
    Salut,

    Comment écris tu ton code avec textscan ?
    tud evrait utiliser qqchose qui définisse ton séparateur (la virgule) du genre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
     fid = fopen('fichier.txt');
    C = textscan(fid, '%f %f %f %f', 'delimiter', ',');
    fclose(fid);

  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 302
    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 302
    Points : 52 884
    Points
    52 884
    Par défaut
    Si le fichier ne contient que des valeurs numériques séparées par des virgules, alors c'est un fichier CSV.

    Donc :

    Ingénieur indépendant en mécatronique - Conseil, conception et formation
    • Conception mécanique (Autodesk Fusion 360)
    • Impression 3D (Ultimaker)
    • Développement informatique (Python, MATLAB, C)
    • Programmation de microcontrôleur (Microchip PIC, ESP32, Raspberry Pi, Arduino…)

    « J'étais le meilleur ami que le vieux Jim avait au monde. Il fallait choisir. J'ai réfléchi un moment, puis je me suis dit : "Tant pis ! J'irai en enfer" » (Saint Huck)

  5. #5
    Membre à l'essai
    Profil pro
    Inscrit en
    Juin 2010
    Messages
    31
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2010
    Messages : 31
    Points : 14
    Points
    14
    Par défaut
    j'ai oublié de préciser que je voulais récupérer les valeurs pour les écrire dans un fichier.

    j'ai ça :
    1, 472.999451, -25.2571011, 60.9760513
    et je veux ça :
    I 1 X 472.999451 Y -25.2571011 Z 60.9760513
    @Dut : justement non, il y a du texte

    je lis les valeurs par : textscan(fid,'%f %f %f %f')et j'écris avec : fprintf(fud,'%f %f %f %f',str2)j'ai ça comme erreur :
    Function is not defined for 'cell' inputs.

  6. #6
    Invité
    Invité(e)
    Par défaut
    Donc le problème n'est pas la lecture mais l'écriture.
    Donc sachant que T = textscan(fid,'%f %f %f %f','delimiter',',');, On aura:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    fprintf(fud,'I %d X %f Y %f Z %f\n',[T{:}].')

  7. #7
    Membre à l'essai
    Profil pro
    Inscrit en
    Juin 2010
    Messages
    31
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2010
    Messages : 31
    Points : 14
    Points
    14
    Par défaut
    énoooorme
    merci bcp Winjerome

    j'aurais jamais trouvé le [T{:}]
    ca veut dire quoi au juste ?

  8. #8
    Invité
    Invité(e)
    Par défaut
    Oui, c'est pas évident
    C'est une une conversion tableau de cellules => tableau simple.
    On utilise dans un premier temps l'indexage linéaire, puis une concaténation.
    Pour simplifier, tu peux aussi utiliser la fonction cell2mat qui a le même effet:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    fprintf(fud,'I %d X %f Y %f Z %f\n',cell2mat(T).')

  9. #9
    Membre à l'essai
    Profil pro
    Inscrit en
    Juin 2010
    Messages
    31
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2010
    Messages : 31
    Points : 14
    Points
    14
    Par défaut
    par contre j'ai l'impression que textscan scanne TOUT le fichier et pas ligne par ligne ?

  10. #10
    Invité
    Invité(e)
    Par défaut
    Oui, c'est bien le cas. N'est-ce pas ce que tu veux?
    Si tel est le cas, tu peux spécifier le nombre de lignes à lire:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    T = textscan(fid,'%f %f %f %f',Nb_lignes,'delimiter',',')

  11. #11
    Membre à l'essai
    Profil pro
    Inscrit en
    Juin 2010
    Messages
    31
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2010
    Messages : 31
    Points : 14
    Points
    14
    Par défaut
    je fais une boucle sur le nbre de lignes (je filtre le texte), donc mieux vaut faire ligne par ligne ?

    en tt cas merci bcp

  12. #12
    Invité
    Invité(e)
    Par défaut
    Tu ne nous as donné que la mise en forme des valeurs numériques... N'ayant aucune information sur le texte, ni sur ce que tu veux en faire, je ne saurai me prononcer

  13. #13
    Membre à l'essai
    Profil pro
    Inscrit en
    Juin 2010
    Messages
    31
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2010
    Messages : 31
    Points : 14
    Points
    14
    Par défaut
    nan mais c'est bon ça marche nickel

    thanks

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

Discussions similaires

  1. Réponses: 7
    Dernier message: 27/02/2015, 15h02
  2. [AC-2002] Récupérer chaîne de caractères séparées par virgules
    Par benziz dans le forum Requêtes et SQL.
    Réponses: 8
    Dernier message: 31/12/2010, 10h06
  3. lire valeurs séparées par point-virgule
    Par iznogoud_23 dans le forum Fortran
    Réponses: 12
    Dernier message: 10/05/2010, 16h07
  4. récupérer des valeurs séparées par un point virgule
    Par Spaccio dans le forum Requêtes
    Réponses: 9
    Dernier message: 10/04/2009, 11h22
  5. Champs contenant plusieurs valeurs séparées par ;
    Par sabine34 dans le forum Requêtes
    Réponses: 3
    Dernier message: 11/05/2007, 12h20

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