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 :

lecture d'un fichier .txt d'une certaine forme


Sujet :

MATLAB

  1. #1
    Membre à l'essai
    Inscrit en
    Avril 2007
    Messages
    12
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 12
    Points : 11
    Points
    11
    Par défaut lecture d'un fichier .txt d'une certaine forme
    bonjour,

    Mon problème est le suivant, j'ai un fichier .txt de cette forme :

    ncols 149
    nrows 128
    xllcorner 409176.254468
    yllcorner 1386725.316507
    cellsize 6.0188510000003
    NODATA_value -9999
    0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ....... 0
    .
    .
    .
    .
    0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ....... 0
    J'essaie de le lire avec matlab mais je n'y arrive pas. Avec textread, j'ai pu lire les 6 premieres ligne

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    [nom, taille] = textread('rastert_ms_test1.txt', '%s %f', 6);
    Mais après l'histoire se corse puisqu'il n'y pas le même nombre de colonne.
    L'idée c'est de commencer a lire le fichier .txt depuis la 7eme ligne, pour avoir une matrice [128;149]. Quelqu'un pourrait-t-il m'aider ?

    Merci d'avance ...

  2. #2
    Membre confirmé
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    1 002
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2008
    Messages : 1 002
    Points : 476
    Points
    476
    Par défaut
    Citation Envoyé par Liun971 Voir le message

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    [nom, taille] = textread('rastert_ms_test1.txt', '%s %f', 6);
    Il suffit alors de sauter le nombre de lignes voulues en définissant tes 7 premières lignes comme un Header (en-tête) :


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    [nom, taille] = textread('rastert_ms_test1.txt', '%f', n,'headerlines',7);

  3. #3
    Expert éminent sénior
    Avatar de Caro-Line
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    9 458
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 9 458
    Points : 14 828
    Points
    14 828
    Par défaut
    Comment passer l'entête d'un fichier texte en lecture ?

    Personnellement je préfère utiliser TEXTSCAN que TEXTREAD comme conseillé par l'aide de MATLAB.

  4. #4
    Membre émérite
    Homme Profil pro
    Inscrit en
    Mai 2008
    Messages
    2 040
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 2 040
    Points : 2 841
    Points
    2 841
    Par défaut
    Bonjour.
    Essaye :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    x=textread('fichier.txt','%s')
    Tu as tout dans x.

  5. #5
    Membre à l'essai
    Inscrit en
    Avril 2007
    Messages
    12
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 12
    Points : 11
    Points
    11
    Par défaut
    Re-bjr,

    euh oui merçi, j'ai lu le FAQ avant de poster le sujet ici mais avec textread ou textscan, le format me gene.

    J'ai 149 colonnes, comment faire pour mettre dans le format 149 de %f ?!

    Citation Envoyé par phryte Voir le message
    Essaye :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    x=textread('fichier.txt','%s')
    Tu as tout dans x.
    J'ai essayé ça aussi, mais ça me donne que des caracteres, j'ai essayé de le convertir en double comme ça double(x(n)), mais rien à faire, il n'aime pas.

  6. #6
    Expert éminent sénior
    Avatar de Caro-Line
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    9 458
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 9 458
    Points : 14 828
    Points
    14 828
    Par défaut
    Citation Envoyé par Liun971 Voir le message
    J'ai 149 colonnes, comment faire pour mettre dans le format 149 de %f ?!
    Ta question n'était pas claire alors.
    En fait tu voulais savoir comment former la chaine format.
    Si tu as 149 colonnes de double à lire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    nbCol=149;
    format = repmat('%f ',1,149); % replique 149 fois '%f '
    format(end) = [];%enleve le dernier espace en trop

  7. #7
    Membre à l'essai
    Inscrit en
    Avril 2007
    Messages
    12
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 12
    Points : 11
    Points
    11
    Par défaut
    Dsl si j'ai mal expliqué mon problème. Avec toutes vos explications j'en suis arrivé à là :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    format = repmat('%f ',1,149);
    format(end) = []; % enleve le dernier espace en trop
     
    fid=fopen('test.txt','rt');
     
    % J'écris en partant de la 7eme ligne
    for i=7:1:128
        A(i,:)=textscan(fid,format,'headerlines',i);
    end
     
    fclose(fid);
    Et ma matrice A devient une matrice <128*149 cell> rempli de [].
    Et pourtant le format c'est bien du double ... ?!

  8. #8
    Expert éminent sénior
    Avatar de Caro-Line
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    9 458
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 9 458
    Points : 14 828
    Points
    14 828
    Par défaut
    Euh non...
    Là :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    % J'écris en partant de la 7eme ligne
    for i=7:1:128
        A(i,:)=textscan(fid,format,'headerlines',i);
    end
    Bon le commentaire je suppose que tu t'es trompé et que tu voulais dire lire.
    Mais là en fait dans chaque A(i,: ) tu mets tout le fichier à partir de la ième ligne...

    Tu devrais plutôt faire :
    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
    nbCol = 149;
    format = repmat('%f ',1,nbCol);
    format(end) = []; % enleve le dernier espace en trop
     
    fid=fopen('test.txt','rt');
     
    %lit les 6 premières lignes
    C = textscan(fid, '%s %f', 6);
    nom=C{1};
    taille=C{2};
    %dans le fichier on est maintenant a la ligne 7 a partir de la c'est la
    %matrice :
    A = textscan(fid,format);
    A = [A{:}];
    fclose(fid);

  9. #9
    Membre à l'essai
    Inscrit en
    Avril 2007
    Messages
    12
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 12
    Points : 11
    Points
    11
    Par défaut
    Aaaahhh merci beaucoup pour votre aide a tous surtout toi Caro-line ...

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

Discussions similaires

  1. lecture d'un fichier.txt dans une classe
    Par loeca dans le forum C++
    Réponses: 3
    Dernier message: 23/03/2014, 17h24
  2. Réponses: 2
    Dernier message: 27/07/2011, 10h10
  3. Réponses: 4
    Dernier message: 24/05/2010, 13h06
  4. Lecture d'un fichier Txt dans une JSP !
    Par bim92i dans le forum Servlets/JSP
    Réponses: 11
    Dernier message: 29/04/2008, 09h55
  5. Réponses: 2
    Dernier message: 01/05/2007, 18h50

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