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 :

Créer une matrice à partir d'un fichier .txt [Débutant]


Sujet :

MATLAB

  1. #1
    Débutant
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    193
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 193
    Points : 58
    Points
    58
    Par défaut Créer une matrice à partir d'un fichier .txt
    bonjour
    j'aimerais créer un programme pour lire un fichier txt de trois caractères en trois (espaces compris et dernier caractères ignoré) afin de séparer mes valeurs et ensuite de créer une matrice en mettant sur une ligne les 11 premieres et ainsi de suite

    j'ai essayé et j'arrive pas à faire un code pour qu'il lise le fichier txt de trois en trois caractères et en ignorant le dernier

    ce code là ne marche pas

    Code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Z=textread(fichier,'%3c %*c')
    message d'erreur

    Citation:
    ??? Error using ==> dataread
    Trouble reading characters from file (row 541, field 1) ==>

    Error in ==> textread at 177
    [varargout{1:nlhs}]=dataread('file',varargin{:});

    Error in ==> comptage at 2
    Z=textread(fichier,'%3c %*c'
    il est trés important qu'il lise tous les trois caractères pour séparer mes valeurs

    merci pour l'aide voilà un exemple du fichier à lire


    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
    999 11 10 11 11 11 13 15999999999  9  8 12 13 11 10 10999999999 14 12 11 10 
     13 14 14999999999 12 12 12 15 16 15 17999999999 15 14 15 17 17 18 17999999 
    999 12 13 16 16 16 15 13999999999 12 12 14 14 14 14 16999999999 15 14 14 15 
     15 13  9999999999  6  7  4  9  7  7  7  6  6  5  6  6  5  5  4  5  7  5  6 
      6  6  6  6  7  6  6  7  6  7  9 10  8  9 12 16 17 18999999 18 16 17 21 19 
     17 19999999999 16 15 16 17 18 19 19999999999 17 19 19 18 17 17 14999999999 
     15 15 15 12 11  7  7  8  7  6  6  8  8  8  8 10  9  8  8  8  9 10  9  7  8 
     10  9999999999 12 12  9 10 12 11 15999999999 14 13 12 11 11 11  7999999999 
     15 16 15 17 18 16 14999999999 16 17 17 17 17 15 11999999999 13 16 16 15 15 
     14 13999999999 13 14 15 15 16 16 16999999999 12 13 12 13 14 12  9999 11 14 
     11 10  9  7 10 13  9  8  8  8 12 13 12 13 13 14999999999 14 14 14 13 15 14 
    999  9 10  9 10 12 15 13999999999  7  8  9 10 10 10 10999999999 10  9  9 10 
     11 11 11999999999 14 12 14 13 14 14 15999999999 15 14 15 15 15 16 16999999 
    999 15 15 16 14 16 18 17999999999 11 13 14 14 15 16 15999999999 15 13 14 15 
     13 12 13999999 10  9  5  5  6  6  6  7  5  7  6  7  5  5  5  5  8  6  7  6 
      6  7  6  7  6  5  7  7  8 10  8  7  8  9 10 14 13999999999 19 18 18 18 20 
     19 18999999999 17 17 17 18 18 19 20999999999 17 17 19 18 19 16 15999999999 
     19 15 13 12 10  8  8  6  8  7  9  9  9  9  8 10  9  8  8 12  5 10  8  7  9 
      7  9999999999 12 14 12 12 12 12 13999999999 14 12 10 11 11  9 11999999999 
     14 15 16 15 16 15 18999999999 17 15 15 16 16 15 10999999999 14 15 12 15 15 
     15 11999999999 11 14 14 16 15 14999999999 11 10 11 10 11 12 11999999999  8 
      9 10 10 11 10 11999 10 11  8 11 12 11  8  9 10999999999 13 12 14 12  9 12 
    999 13 13 11 12 11 14 11999999999  7  8 11 11 12 10  9999999999 11 11 11 10 
     11 12 14999999999 11 10 12 13 14 15 16999999999 15 16 16 17 16 16 15999999 
    999 11 14 14 14 14 13 12999999999 14 12 14 14 15 13999999999 14 13 13 14 13 
     12 12999999999  9  8  4  6  8  8  7  8  6  7  7  6  7  5  6  6  5  7  6  6 
      7  5  6  7  7  6  6  6  5  9  9  8 10 12 10  9 12999999999 19 16 17 19 20 
     20 21999999999 15 17 17 19 20 20 22999999999 16 17 19 20 19 15 14999999999 
     16 13 13 12 10 10  8  8  8  9 10 11 10  8  8  8  8  9  7  7  6  7  8  9 10 
     10 11999999999 12 12 11 12 13 13 13999999999 12 12  9 10 11 11 10999999999 
     13 15 13 15 15 14999999999 14 16 16 16 17 16 14999999999 13 14 12 12 13 14 
     13999999999 11 11 12 11 13 14 13 11  7 10 12 12 11 11 11  9 10999999999 11 
     10 10  9  9  8  6  7  8  7  7 10  8  5  8 10 12999999999 10 11 10  8 10 11
    la présence de un,deux ou aucun espace suivant la ligne permet de séparer en les valeurs en prenant trois caractères et ainsi de suite....


    merci par avance pour l'aide

  2. #2
    Candidat au Club
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    2
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 2
    Points : 2
    Points
    2
    Par défaut juste une piste ci ca peut t'aider
    Voici un petit bout de code. Tu pourrais regarder dans le help pour comprendre comment
    f=fopen(fichier.txt);
    i=0;
    while(~feof(f))

  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 304
    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 304
    Points : 52 883
    Points
    52 883
    Par défaut
    Il est possible ici de lire le fichier txt comme un simple fichier binaire (ce qu'il n'a jamais cessé d'être d'ailleur )

    Voici une idée :

    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
    M = [];
     
    fid = fopen('data.txt','r');
     
    while ~feof(fid)
     
        % Lecture de 3*25 caractères sur une ligne
        [C,count] = fread(fid,[3,25],'*uchar');
     
        if count~=75
            break
        end
     
        % Saut des trois derniers caractères de chaque ligne 
        % (espace + retour chariot)
        fseek(fid,3,'cof');
     
        C = char(C.');
        C = cellstr(C);
        C = str2double(C);
     
        M = [M C];
     
    end
     
    fclose(fid);
     
    M = M.'
    Et en optimisant un peu la gestion de la mémoire :

    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
    fid = fopen('data.txt','r');
     
    % Calcul rapide du nombre de lignes dans le fichier
    fseek(fid,0,'eof');
    filesize = ftell(fid);
    fseek(fid,0,'bof');
    nlignes = round(filesize/(3*25+3));
     
    % Préallocation de la matrice résultat
    M = zeros(nlignes,25);
    k = 1;
     
    while ~feof(fid)
     
        % Lecture de 3*25 caractères sur une ligne
        [C,count] = fread(fid,[3,25],'*uchar');
     
        if count~=75
            break
        end
     
        % Saut des trois derniers caractères de chaque ligne 
        % (espace + retour chariot)
        fseek(fid,3,'cof');
     
        C = char(C.');
        C = cellstr(C);
        C = str2double(C);
     
        M(k,:) = C.';
        k = k+1;
    end
     
    fclose(fid);

  4. #4
    Débutant
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    193
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 193
    Points : 58
    Points
    58
    Par défaut
    merci DUT

    le deuxieme code fonctionne mieux que le premier j'arrive à avoir mes valeurs séparées correctement c'est la premiere fois
    je vais me pencher dessus pour voir si tout va bien
    merci pour l'aide precieuse

  5. #5
    Débutant
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    193
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 193
    Points : 58
    Points
    58
    Par défaut
    je comprends pas DUT pourquoi la matrice fait 2033 lignes alors qu'elle devrait en faire beaucoup moins, 180 lignes maximum

    l'idée est de regrouper les 11 premieres lignes de mon fichier et ainsi de suite

    ça doit faire 180 lignes (180*11=1980) sur 275 valeurs soit 275 colonnes

    je vous mets en fichier compressé le fichier txt à traiter
    fichier txt.zip


    merci pour l'aide

  6. #6
    Débutant
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    193
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 193
    Points : 58
    Points
    58
    Par défaut
    c bon j'ai reussi à avoir ma matrice qui fait 1981 lignes,

    je vais essayer de créer ma matrice de latitude de 180 lignes sur 275 colonnes

    bonne soirée

  7. #7
    Débutant
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    193
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 193
    Points : 58
    Points
    58
    Par défaut
    bonsoir

    j'ai réussi à obtenir mon image souhaitée

    je n'ai plus qu'à modifier les axes pour pouvoir savoir a quoi correspond un pixel, genre créer un vecteur pour les abscisses et un vecteur pour les latitudes

    je vous mets en fichier ZIP un fichier texte de base et le programme en entier si quelqu'un a une idée pour l'optimiser je suis preneur

    bonne soirée

    programme et fichier texte.zip

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

Discussions similaires

  1. créer une matrice à partir d'un fichier
    Par dododawn dans le forum Entrée/Sortie
    Réponses: 2
    Dernier message: 22/11/2008, 23h02
  2. Réponses: 2
    Dernier message: 16/11/2008, 16h09
  3. tracer une courbe à partir d'un fichier txt
    Par defcom60 dans le forum Calcul scientifique
    Réponses: 54
    Dernier message: 18/07/2008, 10h16
  4. créer une vue à partir d'un fichier de mapping
    Par sajedose dans le forum Hibernate
    Réponses: 1
    Dernier message: 17/06/2008, 10h16
  5. [GD] Créer une image à partir d'un fichier
    Par MarcCC dans le forum Bibliothèques et frameworks
    Réponses: 1
    Dernier message: 24/01/2008, 23h03

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