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 rapide d'un fichier texte


Sujet :

MATLAB

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    171
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 171
    Points : 75
    Points
    75
    Par défaut Lecture rapide d'un fichier texte
    Bonjour à tous,

    je cherche à améliorer un vieux script permettant de lire de gros fichiers texte : dans les 500 mo.
    les fichiers sont constitué de bloc de 7 lignes avec un nombre fini de colonnes que l'on peut connaitre. Le nombre de colonnes change tous les 7 lignes et peut être vraiment important. voici un petit exemple

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8:2: 1           1           1           1           1           1           1           1
    8:3: 234.62      41.602      139.25      145.75      208.28      74.254      185.67      101.62
    8:4: 5.0338      19.496       74.35      177.87      190.65      204.74      211.74      228.23
    8:5: 23401       31239       27903       28591       26152       26176       27314       27855
    8:6: 1.5         1.5         1.5         1.5         1.5         1.5         1.5         1.5
    8:7: 0           0           0           0           0           0           0           0
    8:8: 10          10          10          10          10          10
    je cherche à utiliser la fonction fscanf car elle fournit directement des doubles contrairement à fgets et fgetl.

    mais sur l'exemple donné ici (première ligne) la commande
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    value = fscanf(fid, '%d:%d: %f', [1 10])
    retourne :
    je comprendrai quelle me fournisse
    puisque je ne définie ma ligne qu'avec 2 entier et un flottant! mais qu'elle fournisse un deuxième flottant puis plus rien là je comprends pas
    si vous connaissez des méthode plus rapide de lecture, n'hésitez pas à me les conseiller : je suis preneur.

    merci d'avance pour votre aide

    Z

  2. #2
    Membre régulier
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    171
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 171
    Points : 75
    Points
    75
    Par défaut
    Bonjour à tous,

    j'ai finalement réussi à améliorer (facteur 10) la vitesse de lecture de mes fichiers de données. le secret consiste en l'usage de la fonction 'scantext' en voici le code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    header = '%d:%d: ';   
            for t = 1 : nt
                ligne = fgets(fid);
                npfr = sscanf(ligne,'# NEW_DATA_SPT : %d',1);
                model = [header, repmat('%f ', 1, npfr)];
                value = textscan(fid, model, 'CollectOutput', 1);        
                for l = 1 : 7            
                    data{l}(t,1 : npfr) = value{2}(l, :);
                end
            end
    en espérant que cela serve à quelqu'un.

    Z

  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 302
    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 302
    Points : 52 884
    Points
    52 884
    Par défaut
    Citation Envoyé par Zhitoune Voir le message
    la commande
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    value = fscanf(fid, '%d:%d: %f', [1 10])
    retourne :
    C'est normal car MATLAB répète le format autant de fois que tu lui demande.

    La commande :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    value = fscanf(fid, '%d:%d: %f', [1 10])
    est équivalente à :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    value = fscanf(fid, '%d:%d: %f%d:%d: %f%d:%d: %f%d:')
    Pour lire correctement une ligne, il faudrait donc écrire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    value = fscanf(fid, '%d:%d: %f%f%f%f%f%f%f%f')
    ou encore :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    fscanf(fid, '%d:%d:');
    value = fscanf(fid, '%f', [1 8]);
    (j'ai omis le retour à la ligne '\n' pour simplifier l'explication et j'ai aussi considéré que chaque ligne avait le même nombre de valeur à lire)
    Ingénieur indépendant en mécatronique - Conseil, conception et formation
    • Conception mécanique (Autodesk Fusion 360)
    • Impression 3D (Ultimaker)
    • Développement informatique (Python, MATLAB, C)
    • Programmation de microcontrôleur (Microchip PIC, ESP32, Raspberry Pi, Arduino…)

    « J'étais le meilleur ami que le vieux Jim avait au monde. Il fallait choisir. J'ai réfléchi un moment, puis je me suis dit : "Tant pis ! J'irai en enfer" » (Saint Huck)

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

Discussions similaires

  1. Réponses: 1
    Dernier message: 26/07/2015, 19h43
  2. lecture/écriture dans un fichier texte
    Par the watcher dans le forum Delphi
    Réponses: 23
    Dernier message: 15/05/2007, 10h57
  3. [RegEx] Remplacement rapide dans un fichier texte (RTF)
    Par johweb dans le forum Langage
    Réponses: 12
    Dernier message: 17/01/2007, 09h04
  4. [VB.NET]Problème de lecture et écriture sur fichier texte
    Par zouhib dans le forum Windows Forms
    Réponses: 25
    Dernier message: 23/05/2006, 15h30
  5. [RegEx] Lecture/transformation de mon fichier texte
    Par charlysquare dans le forum Langage
    Réponses: 4
    Dernier message: 24/04/2006, 14h24

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