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 :

Convertir un fichier texte du format csv au format hws


Sujet :

MATLAB

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    47
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juin 2007
    Messages : 47
    Points : 26
    Points
    26
    Par défaut Convertir un fichier texte du format csv au format hws
    Bonjour tout le monde, voila je debute sur matlab , et je commence deja par un probleme.
    Mon but est de prendre des données a partir d'un fichier csv et de les reecrire convenablement sous format HWS, mon fichier source est comme suit:
    Field #,X,Y,Z,X,Y,Z,X,Y,Z,X,Y,Z,X,Y,Z,X,Y,Z,
    1,-444.5,-7.9,402.4,-428.8,33.6,498.8,-462.6,-64.1,289.0,-376.9,26.6,615.4,-495.2,-86.9,227.5,-462.8,-107.0,122.6
    2,...(le reste est de la meme forme)
    ...
    et ce que je veux faire c'est reecrire a partir de la ligne
    FIELD#,X,Y,Z,X,Y,Z,X,Y,Z,X,Y,Z,X,Y,Z,X,Y,Z,
    un nouveau fichier hws sous la forme :
    X Y Z X Y Z
    -444.5 -7.9,402 -428.8 33.6 498.8 -462.6
    ...
    ...
    Donc voila ce que j'ai fait
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    Tete=fgetl(fid); %je prend la premiere ligne %(Field#,X,Y,Z,X,Y,Z,X,Y,Z,X,Y,Z,X,Y,Z)
    Tete=strrep(Tete,'Field #','') %je supprime le premeir mot
    Tete=strrep(Tete,',','') % je remplace les virgules par des espaces
    longueur= (NbPoints*3);
    hauteur= ndata;
    Tab=zeros(longueur,hauteur); % je cree un tableau de 0 avec la bonne taille
    Tab=sscanf(Tete,'%c',[1,NbPoints*3]) %l'entete sur la premiere ligne du tab
     
    for 2=1:ndata  %a partir de la 2eme ligne du tableau 
            Valeurs=fgetl(fid);  % je prend la premiere ligne de valeur
            Valeurs=strrep(Valeurs,',',' ') % je remplace les virgules par des espaces
            Tab(2,:)=sscanf(Valeurs,'%f',NbPoints*3)%rempli 2eme ligne par valeurs
    end
    et ce que j'obtient c un tableau avec la bonne entete ,par contre les valeurs suivantes sont a ala bonne place mais sous forme de carrés et de charabia.
    et a chaque ligne de lecture du fichier ca m'ecris : qu'il y'a eu probleme de conversion de non integer a characters, et moi ce que je veux c des float comme ci dessus par des caracteres dans le tableau (appart l'entete).
    Aidez moi svp, j'ai besoin d'aide,merci d'avance.

  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 313
    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 313
    Points : 52 939
    Points
    52 939
    Par défaut
    Voici une méthode efficace de lecture :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    fid=fopen('data.txt','rt');
     
        header=fgetl(fid)
     
        fmt=['%*d' repmat(',%f',1,18)];
        X=fscanf(fid,fmt,[18,inf])
     
    fclose(fid);
    A étudier. La méthode d'écriture reprendra globalement le même principe.

  3. #3
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    47
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juin 2007
    Messages : 47
    Points : 26
    Points
    26
    Par défaut
    J'ai essayé ca mais ca marche, en passant tout ce que je veux faire, c'est remplir une matrice ligne par ligne avec les valeurs trouvée sur chaque ligne
    X Y Z X Y Z
    -444.5 -7.9,402 -428.8 33.6 498.8 -462.6
    -422.5 -8.9,402 -328.8 33.6 198.8 -422.6
    ....
    Pour avoir une matrice
    X Y Z X Y Z
    -444.5 -7.9,402 -428.8 33.6 498.8 -462.6
    -422.5 -8.9,402 -328.8 33.6 198.8 -422.6

    Voila, j'attends votre aide

  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 313
    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 313
    Points : 52 939
    Points
    52 939
    Par défaut
    Citation Envoyé par slayer23
    J'ai essayé ca mais ca marche
    Désolé mais je ne comprends pas si ça marche ou pas ?

    On verra le problème de l'écriture après... pour l'instant, arrives-tu à lire les données comme je te l'ai indiqué ?

    Sinon, es-tu sur du format des données est toujours le même dans ton fichier ? Comme tu l'a écris dans ton premier message.

  5. #5
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    47
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juin 2007
    Messages : 47
    Points : 26
    Points
    26
    Par défaut
    Dsl je voulais dire ca marche pas
    Pour ce qui est du format du fichier ,oui il est structuré de cette facon,pour pouvoir supprimer les virgules entre chaque 2 valeur j'ai utilisé un strrep(Valeurs,',',' ') pour remplacer les virgules dans 'Valeurs' par des espaces , je rappelle que Valeurs=fgetl(fid); où fid est mon fichier source.

  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 313
    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 313
    Points : 52 939
    Points
    52 939
    Par défaut
    Pourquoi chercher à remplacer les virgules par des espaces ?
    Ma solution devrait fonctionner avec les virgules dans le fichier...

  7. #7
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    47
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juin 2007
    Messages : 47
    Points : 26
    Points
    26
    Par défaut
    Au fait ma question principale etait plutot la manip des matrices (et tableaux),désolé de na pas avoir été assez precis, mais mon but c avant tout de copier le contenu de mon fichier ligne par ligne et de le placer dans une matrice sous la meme forme (ligne par ligne),je veux utiliser une matrice car quand je copie directement de mon fichier source vers le fichier destination (en mettant en forme chaque ligne), y'a des decallage a chaque fois que je passe a une autre decimale.
    Exemple de mon probleme avec le fichier resultant:
    t x y z
    1 2.6 3.3 6.25
    2 2.6 3.3 6.25
    ...
    ...
    10 6.6 4.4 3.3
    ...
    ...
    100 7.2 3.6 10.125
    Ce decalage ne pose pas probleme a petite echelle, par contre dans mon cas j'ai plus de 1200 lignes a copier, quand j'utilise un LOAD de mon fichier plus tard, ce decallage me fait un sortir un message du genre :the ligne 1153 must have same number of collumns then previous lines.
    Aidez moi svp.

  8. #8
    Rédacteur/Modérateur

    Avatar de Jerome Briot
    Homme Profil pro
    Freelance mécatronique - Conseil, conception et formation
    Inscrit en
    Novembre 2006
    Messages
    20 313
    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 313
    Points : 52 939
    Points
    52 939
    Par défaut
    Ton problème ne viendrait pas plutôt du fait que la dernière ligne de ton fichier est vide ou quelque chose comme ça ?

    Je ne vois pas pourquoi les "décalages" ne permettraient pas à Matlab de lire le fichier ?

  9. #9
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    47
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juin 2007
    Messages : 47
    Points : 26
    Points
    26
    Par défaut
    j'ai pu resoudre a peu pres tout mon probleme, pour ce qui est du load,le fichier s'ecrivait bien a la creation, cependant, le load modifiait la derniere ligne a la lecture (je comprends pas prkoi d'ailleurs), mais je me suis arrangé pour faire un fclose de mon fichier crée (qui etait en mode ecriture),puis je l'ai reouvert en mode lecture juste avant de faire le load et ca a passé nickel .j'ai pu donc creer mes matrices grace a ca, pour le reste,la maitrise de c++ aide bcps pour les manipuler.
    Je vous remercie tous pour votre aide !!!

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

Discussions similaires

  1. [CSV] convertir un fichier texte formaté en CSV
    Par cotede2 dans le forum Langage
    Réponses: 1
    Dernier message: 20/06/2009, 18h08
  2. [XSLT] Est-il possible de convertir un fichier texte en XML ?
    Par ANISSS dans le forum XSL/XSLT/XPATH
    Réponses: 2
    Dernier message: 04/04/2007, 16h51
  3. Réponses: 13
    Dernier message: 05/07/2006, 09h39
  4. [VBA-E] Macro pour convertir un fichier texte en excel
    Par Nicolas67 dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 15/05/2006, 14h47
  5. Convertir un fichier texte ms-dos
    Par frechy dans le forum Windows
    Réponses: 8
    Dernier message: 02/03/2006, 20h59

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