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


Sujet :

MATLAB

  1. #1
    Membre du Club
    Femme Profil pro
    Inscrit en
    Février 2011
    Messages
    221
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations forums :
    Inscription : Février 2011
    Messages : 221
    Points : 62
    Points
    62
    Par défaut lecture d'un fichier
    Bonjour,
    Pour lire un fichier texte ligne par ligne en c++, je procède comme suit :
    Code C++ : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    QString monfichier = "D:/applications deuxičme partie/FichierConfiguration.txt";
        QFile fichier(monfichier);
        fichier.open(QIODevice::ReadOnly | QIODevice::Text);
        QTextStream reseau(&fichier);
        reseau.setCodec("UTF-8");
    Sous Matlab, comment convertir les deux ligne suivantes spécifiquement ?
    Code C++ : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
     QTextStream reseau(&fichier);
        reseau.setCodec("UTF-8");

    Merci d'avance

  2. #2
    Membre averti
    Femme Profil pro
    Ingénieur informatique scientifique
    Inscrit en
    Mai 2010
    Messages
    313
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 34
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur informatique scientifique
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Mai 2010
    Messages : 313
    Points : 301
    Points
    301
    Par défaut
    Bonjour,
    je pense que ce qui se rapproche le plus de ce que tu souhaites est:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    reseau = fopen(monfichier,'r','n','UTF-8');
    Pour plus d'infos voir la documentation de fopen.

  3. #3
    Membre du Club
    Femme Profil pro
    Inscrit en
    Février 2011
    Messages
    221
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations forums :
    Inscription : Février 2011
    Messages : 221
    Points : 62
    Points
    62
    Par défaut
    Merci infiniment pour cette réponse pertinente
    J'ai une autre question en ce même sujet SVP; comment puis-je remplacer ou convertir l'écriture suivante sous matlab (spécification ".atEnd")?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
     if (! reseau.atEnd())
        {
          .....
         }

  4. #4
    Membre averti
    Femme Profil pro
    Ingénieur informatique scientifique
    Inscrit en
    Mai 2010
    Messages
    313
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 34
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur informatique scientifique
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Mai 2010
    Messages : 313
    Points : 301
    Points
    301
    Par défaut
    Cette fois tu peux regarder du côté de feof.

  5. #5
    Membre du Club
    Femme Profil pro
    Inscrit en
    Février 2011
    Messages
    221
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations forums :
    Inscription : Février 2011
    Messages : 221
    Points : 62
    Points
    62
    Par défaut
    Bonjour,
    Merci la faq est très claire; il faut en fait effectuer un test de fin de fichier pour lecture ligne par ligne comme suit :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
           while ~ischar(ligne) 
            ........        
            end
            fclose(reseau);
    Mais là je me pose la question suivante pour le même sujet : comment puis-je convertir l'écriture suivante sous matlab (spécification ".atEnd")?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
            cout << ligne.toStdString() << endl;
            QTextStream in(&ligne);
            in >> label_orig;
            in >> dec >> nombre_origines;

  6. #6
    Membre averti
    Femme Profil pro
    Ingénieur informatique scientifique
    Inscrit en
    Mai 2010
    Messages
    313
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 34
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur informatique scientifique
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Mai 2010
    Messages : 313
    Points : 301
    Points
    301
    Par défaut
    Je ne crois pas qu'en matlab tu puisses lire mot à mot une ligne comme en C++ avec l'opérateur ">>", ni qu'il ait d'équivalent à QTextStream.
    Pour récupérer tes données dans ton fichier, regarde la doc de fscanf et fgets.

  7. #7
    Membre du Club
    Femme Profil pro
    Inscrit en
    Février 2011
    Messages
    221
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations forums :
    Inscription : Février 2011
    Messages : 221
    Points : 62
    Points
    62
    Par défaut
    Voilà ci-joint mon fichier texte (FichierConfiguration.txt) :
    FichierConfiguration.txt
    En c++ j'ai créé une classe et j'ai lu ce même fichier ligne par ligne et mot à mot.
    Là j'essaye de convertir mon code sous c++ en code sous matlab en créant aussi une classe (.m) et en utilisant la méthode "fgetl", mais là je suis coincée !
    Je ne sais pas comment je pourrai utilisé les données qui se trouvent dans mon fichier (chaque mot et chaque valeur)

  8. #8
    Membre averti
    Femme Profil pro
    Ingénieur informatique scientifique
    Inscrit en
    Mai 2010
    Messages
    313
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 34
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur informatique scientifique
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Mai 2010
    Messages : 313
    Points : 301
    Points
    301
    Par défaut
    Tu pourrais par exemple lire la première ligne "nombre_origine 1" et récupérer uniquement le nombre (ici 1) dans une variable n.
    Ensuite tu passes 3 lignes (les lignes "====", ligne d'entête et de nouveau "=====").

    Puis tu récupères n lignes (toujours avec avec fgetl) et tu récupères chaque mot grâce à fscanf par exemple.

    Tu passes une ligne, puis tu reproduis l'opération pour chaque "bloc" de ton fichier texte.

    Tu pourrais également te servir des expressions régulières si tu en as l'habitude.

  9. #9
    Membre du Club
    Femme Profil pro
    Inscrit en
    Février 2011
    Messages
    221
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations forums :
    Inscription : Février 2011
    Messages : 221
    Points : 62
    Points
    62
    Par défaut
    J'ai pas totalement saisi
    Mais est ce que jusqu'à maintenant c'est juste 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
    14
    15
    16
    17
     
    function LireFichierConfiguration (obj)
            monfichier = 'C:/FichierConfiguration.txt';
            fichier = monfichier;
            reseau = fopen('FichierConfiguration.txt','r','n','UTF-8');
            nbr_tronc=0;
            ligne = fgetl(reseau);
            while ~ischar(ligne) 
                %traitement du mot:origine
                ligne = fgetl(reseau);
     
                .....
     
            end
            fclose(reseau);
     
        end

  10. #10
    Membre averti
    Femme Profil pro
    Ingénieur informatique scientifique
    Inscrit en
    Mai 2010
    Messages
    313
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 34
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur informatique scientifique
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Mai 2010
    Messages : 313
    Points : 301
    Points
    301
    Par défaut
    Oui j'avoue que ce n'eétait pas forcément clair
    Pour ton code, c'est l'idée, même si je ne comprend pas trop ce que tu fais de tes variables fichier et monFichier du début.
    Voici ce que je voulais dire:

    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
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    function lireFichierConfiguration(obj)
        monFichier = 'C:/FichierConfiguration.txt';
        nb_origine = 0;
        nb_tronc = 0;
        nb_dest = 0;
        nb_jonc = 0;
     
        reseau = fopen(monFichier, 'r', 'n', 'UTF-8');
     
        while feof(reseau) == 0
     
            %Traitement de la partie "origine" du fichier
            %--------------------------------------------
            %Recuperation de la valeur de "nombre_origine"
            ligne = fgetl(reseau);
            mots = regexp(ligne, '\s+', 'split'); %Renvoie les mots de la ligne separement dans un cell array
            nb_origine = str2num(char(mots(2)));
     
            %On passe les 3 lignes d'entete
            fgetl(reseau);
            fgetl(reseau);
            fgetl(reseau);
     
            %On recupere les donnees pour chaque ligne de "origine"
            for i = 1:nb_origine
                ligne = fgetl(reseau);
                mots = regexp(ligne, '\s+', 'split');
                %ici tu peux recuperer la valeur de chaque mot
                %Pour la mettre dans tes variables, avec
                %char(mots(1)), char(mots(2)), etc.
            end
     
            %On passe une ligne
            fgetl(reseau);
     
            %Traitement de la partie "troncons" du fichier
            %--------------------------------------------
            %Meme principe que ci dessus
     
            %Traitement de la partie "destinations" du fichier
            %-------------------------------------------------
            %Meme principe que ci dessus
     
            %Traitement de la partie "jonctions" du fichier
            %-------------------------------------------------
            %Meme principe que ci dessus
            return;
     
        end
     
        fclose(reseau);
    end
    Après je ne sais pas comment sont organisées les variables dans lesquelles tu veux mettre les valeurs lues dans le fichier.
    Ma version de Matlab ne possède pas la fonction "strsplit" qui peut être utilisée pour séparer un texte en mots, j'ai donc utilisé regexp (expression régulière) en indiquant comme séparateur de mots "\s+", c'est à dire, tout type d'espace (plusieurs espaces à la suite possibles).

  11. #11
    Membre du Club
    Femme Profil pro
    Inscrit en
    Février 2011
    Messages
    221
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations forums :
    Inscription : Février 2011
    Messages : 221
    Points : 62
    Points
    62
    Par défaut
    Bonjour,
    Votre dernière réponse m'a été très bénéfique; merci encore une fois.
    En fait le but de la lecture de ce fichier c'est de se servir de toutes les variables qu'il y a dedans.
    Par exemple pour la partie origine en faisant comme suit :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    for i = 1:nbr_origines 
                    ligne = fgetl(reseau);
                    mots = regexp(ligne, '\s+', 'split');
     
                    nom_orig = str2num(char(mots(1)));
                    Nom_jonction_destination_orig = str2num(char(mots(2)));
                    longueur_orig = str2num(char(mots(3)));
                    nbr_voies_orig = str2num(char(mots(4)));
                    vitesse_orig = str2num(char(mots(5)));
                    debit_orig = str2num(char(mots(6)));
     
                end
    au niveau de la même boucle je dois utiliser mes variables (nom_orig, Nom_jonction_destination_orig, longueur_orig,....) pour remplir les fonctions de ma classe objet (origine.m) sachant que j'utilise le concept de programmation orientée objet (POO). Donc au niveau de ma classe (fichier.m) je dois faire appel à la classe (origine.m) qui est déjà définie.
    En c++ je faisais (au niveau de la même boucle) comme suit :
    Code C++ : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
                    Origine* orig;  //orig est un objet origine
                    orig = new Origine(); //création de l'objet orig
                    //incrémentation des variables de l'objet origine
                    orig.SetNomOrig(nom_orig);
                    orig.index_orig = i;
                    orig.SetNomJonctionDestination(Nom_jonction_destination_orig);
                    orig.SetLongueurOrig(longueur_orig);
                    orig.SetNbrVoiesOrig(nbr_voies_orig);
                    orig.SetVitesseLibreOrig(vitesse_orig);
                    orig.SetDebitMaxOrig(debit_orig);
                    m_ListeOrigine.append(orig);
    Je ne sais pas sous matlab comment à partir de la classe "Fichier" je pourrai faire appel à la classe "Origine", créer mon objet "orig" et incrémenter les variables de mon objet (nom_orig, longueur_orig, nbr_voies_orig, vitesse_orig,...etc ) de la même manière comme j'ai fais en c++ ?

Discussions similaires

  1. Lecture d'un fichier .dbf
    Par San Soussy dans le forum Autres SGBD
    Réponses: 8
    Dernier message: 07/07/2004, 16h30
  2. Réponses: 6
    Dernier message: 02/09/2003, 15h12
  3. Lecture et ecriture fichier .ini
    Par despe dans le forum C
    Réponses: 6
    Dernier message: 23/07/2003, 20h40
  4. [langage] Optimiser la lecture d'un fichier
    Par And_the_problem_is dans le forum Langage
    Réponses: 4
    Dernier message: 05/02/2003, 08h54
  5. [langage] Optimiser la lecture d'un fichier
    Par And_the_problem_is dans le forum Langage
    Réponses: 2
    Dernier message: 11/06/2002, 10h24

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