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

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    47
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juin 2007
    Messages : 47
    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 317
    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 317
    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
    Membre averti
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    47
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juin 2007
    Messages : 47
    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 317
    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 317
    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
    Membre averti
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    47
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juin 2007
    Messages : 47
    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 317
    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 317
    Par défaut
    Pourquoi chercher à remplacer les virgules par des espaces ?
    Ma solution devrait fonctionner avec les virgules dans le fichier...

+ 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