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 des valeurs dans un fichier


Sujet :

MATLAB

  1. #1
    Membre du Club
    Inscrit en
    Septembre 2008
    Messages
    147
    Détails du profil
    Informations forums :
    Inscription : Septembre 2008
    Messages : 147
    Points : 56
    Points
    56
    Par défaut lire des valeurs dans un fichier
    Probleme vieux comme l'informatique, les formats de fichier lu par tel ou tel logiciel.
    J'ai un ensemble de valeur dans un fichier comme ceci :
    1 2 3 4 5 6
    7 8 9 10 11 12
    ...
    Je souhaites ne prendre qu'un morceau et assigner les valeurs a une variable P. J'ouvre donc mon fichier et je boucle sur ma variable pour le remplir des valeur du fichier. Mais je ne sais pas comment dire, prends la valeur lu puis la suivante sur la meme ligne et quand c'est la fin de la ligne va a la suivante.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    file = fopen('file.dat','r')
     for i=1:Nx
        for j=1:Ny
            for k=1:Nz 
                      P(i.j.k)=fread('file.dat'??)
             end
         end
     end
    fclose(file)
    Merci a la communaute.

  2. #2
    Membre du Club
    Homme Profil pro
    Étudiant:chaque jour on aprend des choses ;)
    Inscrit en
    Septembre 2011
    Messages
    43
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Espagne

    Informations professionnelles :
    Activité : Étudiant:chaque jour on aprend des choses ;)
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2011
    Messages : 43
    Points : 68
    Points
    68
    Par défaut
    Bonjour,

    si le fichier n'a que de valeurs numériques enregistrées (fichier ascii) essai:

    doc textread
    doc textscan
    doc dlmread
    doc csvread
    doc strread
    doc fscanf
    Je pense que là tu trouveras la réponse.

  3. #3
    Membre à l'essai
    Femme Profil pro
    Étudiant
    Inscrit en
    Décembre 2010
    Messages
    38
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2010
    Messages : 38
    Points : 23
    Points
    23
    Par défaut
    Salut
    essaye avec ce code là et j’espère que ce code est ta réponse
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    out = fopen('test.dat');
    ph = importdata('test.dat');
    Lph = size(ph);  
    for i= 1:Lph
    disp(ph(i, :));
    end
    fclose('all');

  4. #4
    Membre du Club
    Inscrit en
    Septembre 2008
    Messages
    147
    Détails du profil
    Informations forums :
    Inscription : Septembre 2008
    Messages : 147
    Points : 56
    Points
    56
    Par défaut
    Merci a vous deux.

    importdata me parait pas mal, simple et efficace.

    Mais je ne veux extraire qu'un nombre restreint de donnees. Comment restreint-on l'import a un certain nombre de valeur. Par exemple si je ne veux en importer que les 100 premieres ? (je n'ai pas trouver comment faire dans le fichier d'aide de importdata)

  5. #5
    Modérateur

    Homme Profil pro
    Ingénieur en calculs scientifiques
    Inscrit en
    Août 2007
    Messages
    4 639
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Ingénieur en calculs scientifiques

    Informations forums :
    Inscription : Août 2007
    Messages : 4 639
    Points : 7 614
    Points
    7 614
    Par défaut
    Bonjour,

    La méthode la plus rapide à mettre en oeuvre est de lire tous le fichier puis de sélectionner que les lignes qui t'interresse. Si dans ton fichier, toutes les lignes contiennent le même nombre de nombres, tu peux utiliser load :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    A  = load('fichier')
    A = A(1:100,:); % sélection des 100 premières lignes
    Mais peut-être voulais-tu lire que les 100 premières lignes du fichier car il est volumineux et le charger entièrement prends trop de temps? Une solution serait de passer par dlmread :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    A = dlmread('untitled',' ',[0 0 99 5]);
    pour lire les 100 premières lignes d'un fichier comprenant 6 colonnes.
    Pour une bonne utilisation des balises code c'est ici!
    Petit guide du voyageur MATLABien : Le forum La faq Les tutoriels Les sources


    La nature est un livre écrit en langage mathématique. Galilée.

  6. #6
    Membre du Club
    Inscrit en
    Septembre 2008
    Messages
    147
    Détails du profil
    Informations forums :
    Inscription : Septembre 2008
    Messages : 147
    Points : 56
    Points
    56
    Par défaut
    Citation Envoyé par magelan Voir le message
    Bonjour,

    La méthode la plus rapide à mettre en oeuvre est de lire tous le fichier puis de sélectionner que les lignes qui t'interresse. Si dans ton fichier, toutes les lignes contiennent le même nombre de nombres, tu peux utiliser load :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    A  = load('fichier')
    A = A(1:100,:); % sélection des 100 premières lignes
    Mais peut-être voulais-tu lire que les 100 premières lignes du fichier car il est volumineux et le charger entièrement prends trop de temps? Une solution serait de passer par dlmread :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    A = dlmread('untitled',' ',[0 0 99 5]);
    pour lire les 100 premières lignes d'un fichier comprenant 6 colonnes.
    Exactement, le fichier est trop gros. Je pense que dlmread est une bonne solution. Je vais tester ca. Merci.

  7. #7
    Membre du Club
    Inscrit en
    Septembre 2008
    Messages
    147
    Détails du profil
    Informations forums :
    Inscription : Septembre 2008
    Messages : 147
    Points : 56
    Points
    56
    Par défaut
    dlmread est une bonne solution en effet.
    Reste un probleme pour moi, la variable genere garde la forme initiale de mon fichier. Mais j'aimerai que ces valeurs prennent la forme d'une autre variable. Par exemple avec dlmread j'obtients un tableau a 6 colonnes et 10 lignes et j'aimerai que ces valeurs soir rangees dans P2 en mettons i lignes et j colonnes tout en assignant les valeurs (dans ma nouvelle variable P2) en lisant P de droite a gauche et de haut en bas.

  8. #8
    Modérateur

    Homme Profil pro
    Ingénieur en calculs scientifiques
    Inscrit en
    Août 2007
    Messages
    4 639
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Ingénieur en calculs scientifiques

    Informations forums :
    Inscription : Août 2007
    Messages : 4 639
    Points : 7 614
    Points
    7 614
    Par défaut
    Par défaut matlab "lit" de haut en bas et de la droite vers la gauche, il faut donc modiifier le tableau afin d'ordonner correctement les valeurs.
    Quelqiues opérations qui peuvent t'être utile :
    inversion entre les colonnes :
    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
    >> A = randi(10,3,4)
     
    A =
     
         8     1     7     1
         1     1     4     5
         3     9    10     4
     
    >> B = A(:,end:-1:1)
     
    B =
     
         1     7     1     8
         5     4     1     1
         4    10     9     3
    transposé :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    >> C = B.'
     
    C =
     
         1     5     4
         7     4    10
         1     1     9
         8     1     3
    et enfin la fonction reshape permet de redéfinir le nombre de lignes et de colonnes :
    Pour une bonne utilisation des balises code c'est ici!
    Petit guide du voyageur MATLABien : Le forum La faq Les tutoriels Les sources


    La nature est un livre écrit en langage mathématique. Galilée.

  9. #9
    Membre du Club
    Inscrit en
    Septembre 2008
    Messages
    147
    Détails du profil
    Informations forums :
    Inscription : Septembre 2008
    Messages : 147
    Points : 56
    Points
    56
    Par défaut
    ok c'est bon.
    Merci a tous.

    J'ajouterai aussi en bonus, qu'on peut faire B=A(1:60,1;150), pour ne prendre qu'une partie d'une matrice. Mais vu la forme de ma matrice initiale, ca ne s'applique pas dans mon cas.

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

Discussions similaires

  1. Ecrire & Lire des énumérés dans un fichier Texte
    Par WebPac dans le forum Langage
    Réponses: 8
    Dernier message: 18/06/2008, 11h04
  2. Comment sauvegarder des valeurs dans un fichier txt
    Par NELLLY dans le forum MATLAB
    Réponses: 3
    Dernier message: 16/04/2007, 18h39
  3. [VBS]Lire des données dans un fichier .txt
    Par kacxial dans le forum VBScript
    Réponses: 4
    Dernier message: 28/02/2007, 14h44
  4. [VBA-E] Lire des valeurs dans un fichier excel
    Par nicobox dans le forum Macros et VBA Excel
    Réponses: 7
    Dernier message: 11/05/2006, 16h40
  5. [VB]vérifier des valeurs dans un fichiers et trier
    Par Mut dans le forum VB 6 et antérieur
    Réponses: 4
    Dernier message: 16/02/2006, 18h35

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