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 :

[textscan] lecture fichier csv complexe


Sujet :

MATLAB

  1. #1
    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 [textscan] lecture fichier csv complexe
    Bonjour,

    j'ai à lire des fichiers CSV relativement complexe
    avec un Header de 94 lignes finissant par une ligne

    puis ensuite les données de la forme (une seule ligne) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    0,"40951.1298148148","+25.8","0","","+621.45","0","","&B10000000","&B00000000"
    qui sont séparées par des , et encadrées entre ".

    puis le fichier fini par une ligne:

    J'ai jeté un coup d’œil ici dans cet ancien topic http://www.developpez.net/forums/d72...e-fichier-csv/

    d'où 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
    fid = fopen('file.csv', 'rt');
    car = fread(fid);
    fclose(fid);
     
    data = strrep(char(car'), ',', ':');
    % data = strrep(data, ';', ':');
    data = strrep(data, '"', '');
    fid=fopen('data.txt','w');
    fwrite(fid,data);
    fclose('all');
     
    fid=fopen('data.txt');
    data_txt=textscan(fid,'%f%f%s%f%f%s%f%f%s%s','delimiter',':/ ','headerlines',94);
    fclose('all')
    mais au lien de me créer un tableau de cellule de n*10 (n: nbr de ligne et 10 est le nombre de colonne), il me créer juste une variable data char de dimension 1*1038590.

    J'aurais donc 2 questions:

    -Pourquoi ne prend il pas en compte les delimiters et créer une seule variable aussi grande ?
    - Est il possible de définir la zone de données à l'aide des lignes :
    et
    Merci d'avance.
    OS : taff > Window 7 32bit - Home > Windows 7 64bit
    Matlab : taff > v2013b - Home > r2009a

  2. #2
    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 882
    Points
    52 882
    Par défaut
    Commençons par la lecture du fichier, je vois deux solutions

    Soit tu lis les valeurs sous formes de chaine de caractères :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    fid = fopen('data.txt', 'r');
    data = textscan(fid,'%f%q%q%q%q%q%q%q%q%q','delimiter',',','headerlines',94);
    fclose(fid);
    Il faudra ensuite convertir les valeurs utiles en valeurs numériques.

    Soit tu modifies le fichier avant la lecture :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    repinfile('data.txt',{'"'},{''});
     
    fid = fopen('new_data.txt', 'r');
    data = textscan(fid,'%f%f%f%f%f%f%f%f%s%s','delimiter',',','headerlines',94);
    fclose(fid);
    La fonction repinfile est disponible ici
    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)

  3. #3
    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
    Merci Dut,

    J'ai donc fait ça:

    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
    fid = fopen('file.csv', 'rt');
    car = fread(fid);
    fclose(fid);
    
    data = strrep(char(car'), ',', ':');
    % data = strrep(data, ';', ':');
    data = strrep(data, '"', '');
    fid=fopen('data.txt','w');
    fwrite(fid,data);
    fclose('all');
    
    fid = fopen('data.txt', 'r');
    data = textscan(fid,'%f%q%q%q%q%q%q%q%q%q','delimiter',':','headerlines',94);
    fclose(fid);
    
    % on tire la donnée temps par exemple à la 2eme colonne :
    
    time = data{2} ;
    time = cellfun(@str2double,time,'uniformoutput',false);
    time = cell2mat(time);
    OS : taff > Window 7 32bit - Home > Windows 7 64bit
    Matlab : taff > v2013b - Home > r2009a

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

Discussions similaires

  1. lecture fichier CSV
    Par kodshadow dans le forum Débuter
    Réponses: 6
    Dernier message: 22/12/2008, 16h42
  2. [MySQL] Lecture fichier CSV et enregistrement dans la base
    Par tifsa dans le forum PHP & Base de données
    Réponses: 6
    Dernier message: 26/09/2008, 12h49
  3. Lecture fichier .csv par colonne
    Par BRAUKRIS dans le forum Langage
    Réponses: 3
    Dernier message: 05/10/2007, 14h08
  4. Lecture fichier CSV
    Par Iphelias dans le forum Entrée/Sortie
    Réponses: 4
    Dernier message: 14/06/2007, 21h58
  5. lecture fichier .csv
    Par wiss20000 dans le forum Entrée/Sortie
    Réponses: 4
    Dernier message: 06/06/2007, 20h48

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