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 :

[Débutante] Transformation de fichiers texte


Sujet :

MATLAB

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    78
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Mai 2007
    Messages : 78
    Par défaut [Débutante] Transformation de fichiers texte
    Bonjour à tous!
    J'ai encore des difficultés avec un programme...
    Je cherche à faire un programme qui me modifie plus de 2000 fichiers textes (qui ont la même structure)
    Les fichiers se présentent sous la forme : 2000041200-2000041300.txt (=du 12/04/2000 à 00/00 au 13/04/2000 à 00/00).
    et :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    latitude,	longitude,	swath_count,	wind_speed,	zonal_wind_speed,	meridional_wind_speed,	wind_stress,	quality_flag
       45.25,	   -3.25,	       2,	     722,	     651,	     260,	      75,	  0
       45.25,	   -2.75,	       2,	     683,	     601,	     246,	      66,	  0
       45.25,	   -2.25,	       2,	     660,	     581,	     260,	      61,	  0
       45.25,	   -1.75,	       2,	     610,	     533,	     230,	      50,	  0
       45.25,	   -1.25,	       0,	     574,	     476,	     234,	      44,	  0
       45.25,	   -0.75,	       0,	     560,	     436,	     250,	      42,	  0
       45.25,	   -0.25,	   32767,	   32767,	   32767,	   32767,	   32767,	  2
       45.25,	    0.25,	   32767,	   32767,	   32767,	   32767,	   32767,	  2
       45.25,	    0.75,	   32767,	   32767,	   32767,	   32767,	   32767,	  2
       44.75,	   -3.25,	       2,	     603,	     544,	     184,	      50,	  0
       44.75,	   -2.75,	       2,	     565,	     504,	     176,	      42,	  0
    etc
    et j'aurais besoin de faire différentes transformations pour integrer ensuite les fichiers txt dans un autre programme :
    1)enlever la première ligne
    2) retirer les lignes ou les valeurs sont 32767
    3) enlever les virgules

    - J'ai fait un programme (pas tres beau je sais) qui me permet d'effacer les lignes comportant les 32767 et les virgules mais je n'arrive pas à le reécrire dans un autre fichier txt (je pense que ma fonction fprintf n'est pas bonne).
    - J'ai également du mal à faire la boucle appelant tous les fichiers (de 2000 à 2007) du fait du format des fichiers txt de base : 2000041200-2000041300.txt car je ne trouve pas le format équivalent sous matlab (0-0???)

    Voici mon code
    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
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    function TexteVent2
    
    d=datenum('01/01/2000',23):datenum('12/31/2007',23)
    for n=1:numel(d);
    file=datestr(d(n),0-0);
    file=[strrep(file,'/','') '.txt'];
    if exist(file,'file')==2
    
    fid=fopen('file','r');
    
    fgetl(fid); % Saute la première ligne
    at(1,:)=fgetl(fid) %recupere la ligne suivante
    att(1,:)=strrep(at(1,:),',','')
    at(2,:)=fgetl(fid) %recupere la ligne suivante
    att(2,:)=strrep(at(2,:),',','')
    at(3,:)=fgetl(fid) 
    att(3,:)=strrep(at(3,:),',','')
    at(4,:)=fgetl(fid) 
    att(4,:)=strrep(at(4,:),',','')
    at(5,:)=fgetl(fid) 
    att(5,:)=strrep(at(5,:),',','')
    at(6,:)=fgetl(fid) 
    att(6,:)=strrep(at(6,:),',','')
    fgetl(fid); 
    fgetl(fid); 
    fgetl(fid); 
    at(10,:)=fgetl(fid) 
    att(10,:)=strrep(at(10,:),',','')
    at(11,:)=fgetl(fid) 
    att(11,:)=strrep(at(11,:),',','')
    fclose(fid)
    resultat=fopen('vent2.txt','wt');
    for i=1:length(att(:,1))
    fprintf(resultat,'%6.2f %6.2f %6.2f %6.2f %6.2f %6.2f %6.2f %6.2f\n',att(i,:));
    end
    Merci encore à tous ceux qui pourront m'aider à avancer!

  2. #2
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    78
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Mai 2007
    Messages : 78
    Par défaut
    J'ai pu transformer mes fichiers 2000041200-2000041300.txt en 2000041200.txt. Donc devrait suffir dans le programme ?

  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 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
    Pose les questions les unes après les autres... ce sera plus simple pour toi.

    Pour la modification d'un fichier :
    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
    16
    17
    18
    19
    20
    21
    22
    23
    24
    % Ouverture du fichier en lecture (mode text => rt)
    fid=fopen('2000041200.txt','rt');
     
       % Saut de la première ligne
       fgetl(fid); 
     
       % Récupération de toutes les valeurs
       X=fscanf(fid,'%f,%f,%d,%d,%d,%d,%d,%d',[8,inf]);
     
    fclose(fid)
     
    % Recherche des valeurs de X égales à 32767
    idx=(X==32767);
    idx=any(idx);
    % Supression des "lignes" correspondantes (en fait des colonnes ici)
    X(:,idx)=[];
     
    % Ouverture du fichier en écriture (mode text => wt)
    fid=fopen('vent2.txt','wt');
        % Ecriture des données modifiées
        fprintf(fid,'%6.2f %6.2f %6.2f %6.2f %6.2f %6.2f %6.2f %6.2f\n',X);   
    fclose(fid)
     
    edit vent2.txt
    La matrice X est la transposée des valeurs contenues dans le fichier. C'est tout à fait normale car les fonctions de lecture/écriture sont calquées sur le C (si je ne me trompe pas).

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    78
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Mai 2007
    Messages : 78
    Par défaut
    Salut!

    j'ai essayé ton programme qui est bien plus court que le mien et qui effecivement fonctionne bien mieux (mais je ne desepère pas d'y arriver un jour!).

    - Pourrait tu juste m'expliquer pourquoi dans mon programme, le fichier txt réecrit ne voulais pas se creer?

    J'ai remodifié mes fichier txt de base de sorte qu'ils se présentent maintenant sous la forme : 20000412.txt au lieu de 2000041200-2000041300.txt. pour faire ma boucle j'utilise :

    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
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    function TransformationTexteVent
     
    d=datenum('01/01/2000',23):datenum('12/31/2007',23);
     
    for n=1:numel(d);
     
       file=datestr(d(n),26);
       file=[strrep(file,'/','') '.txt'];
       if exist(file,'file')==2
     
     
    fid=fopen('file','r');
     
       fgetl(fid); 
       X=fscanf(fid,'%f,%f,%d,%d,%d,%d,%d,%d',[8,inf]);
     
    fclose(fid)
     
    idx=(X==32767);
    idx=any(idx);
     
    X(:,idx)=[];
     
    fid=fopen(['transformé','_',file,'.txt'],'wt');
     
        fprintf(fid,'%6.2f %6.2f %6.2f %6.2f %6.2f %6.2f %6.2f %6.2f\n',X);   
    fclose(fid)
     
    edit file.txt
     
    end
    end
    mais le programme bloque sur la lecture des fichiers et me dit
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    ??? Error using ==> fgetl
    Invalid file identifier.
     
    Error in ==> TransformationTexteVent at 17
       fgetl(fid);
    Les noms de fichiers sont t'ils mal définis ?

    merci encore
    caro

  5. #5
    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
    La ligne ci-dessus devrait être
    Par précaution, il faut toujours faire ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    fid=fopen(...);
       if fid==-1
           error('Mon message d''erreur')
       end
     
       % Lecture/écriture du fichier
     
    fclose(fid);
    Ta précédente méthode ne fonctionnait pas simplement parce que att est un tableau de caractères (char array) et que tu utilisait un format à base de données numériques (%f) dans FPRITNF. Il aurait fallut un format type %c ou %s.

    Mais, comme le contenu du fichier text n'est pas très compliqué, il est bien plus simple d'utiliser la solution que j'ai donnée.

  6. #6
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    78
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Mai 2007
    Messages : 78
    Par défaut
    Oui, je venais juste de voir pour le t de rt ...
    Mais même en corrigeant, il m'affiche la même erreur...
    J'ai l'impression que c'est mon 'file' qui est mal défini non?

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

Discussions similaires

  1. TransformationS de fichier texte
    Par carterslap dans le forum Solaris
    Réponses: 1
    Dernier message: 29/02/2008, 14h18
  2. Réponses: 3
    Dernier message: 06/08/2007, 03h44
  3. [Débutant] Manipulation de fichier texte ?
    Par Badaboumpanpan dans le forum Général JavaScript
    Réponses: 6
    Dernier message: 26/06/2007, 10h42
  4. [Débutant] Lire un fichier texte
    Par marcm dans le forum Pascal
    Réponses: 2
    Dernier message: 05/06/2007, 14h51
  5. Réponses: 1
    Dernier message: 24/11/2004, 16h54

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