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

C Discussion :

Lire un fichier ligne par ligne et récupérer les resultats


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre très actif
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2011
    Messages
    317
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meuse (Lorraine)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2011
    Messages : 317
    Par défaut Lire un fichier ligne par ligne et récupérer les resultats
    bonjour,
    J'ai un fichier:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    seq_id01,ch_idx,pos1,end1,GGTGCTTCAAACGTTTTTTTTTTTACGACTAGCATTTTTTTTTTTTTTTTTCGACTACGCTACGACTCGATCACGATCC
    seq_id01,ch_idy,pos2,end2,TTTTGGTGCTTCAAACGTTTTTTTTTTTACGACTAGCATTTTTTCGACTACGCTACGGTGCTTCAAACGTTTTTTTTTTTACGACTAGCATGATCC
    seq_id01,ch_idd,pos3,end3,GCTAGCTACGACTACGACTACGCATAAAAAAAAAAAAAGACTACGCTACGACTCGATCACGATCC
    seq_id02,ch_idv,pos1,end2,AAAAAAAAAAAAAAAACGATCACGACTACGATCGCATCAGCTAGCATTTTTTTTTTTTTTACGACTTTCGCGCTCAGCATCTGACTAC
    seq_id02,ch_idu,pos2,end2,ACGACTAGCATCAGCATCTTTTTTTACGACGGGGGGGGGGGGGGCGCGCGCGCGAAAAAAAAAAAAAAAAAAAAAAAAAA
    seq_id03,ch_idx,pos1,end1,TTTTTTCGATCGTATAAACGATCGACTCGCTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTCGACGATCACA
    seq_id03,ch_idx,pos2,end2,AAAACATCAGCATCAGCTCGCCCCCCCCCCCCCCAGCATCAGCTAGCATCAGCTACGACTACGATCAGCTACGACTAAA
    .......
    Je veux recuperer les lignes mais je veux décomposer les lignes suivant les virgule(,) et stocker chaque partie dans une variable.
    comment faire?

  2. #2
    Membre actif
    Homme Profil pro
    Étudiant
    Inscrit en
    Septembre 2012
    Messages
    63
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2012
    Messages : 63
    Par défaut
    Salut,

    perso je ferais une liste chaînée, tu aura une case de liste par ligne, et dans cette case tu met un char **, comme sa tu pourra stoker chaque chaîne entre les virgules, et tu fait un next quand tu voie un '\0', tu malloc ton tab comme ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    tab = malloc(sizeof(char*)* 5)
    et après tu malloc ton tab[0][case_a_malloc] de la taille de se que tu a lus jusque a ta virgule.
    Je ne sais pas si je suis bien clair.

    Cordialement,

    Takago.

  3. #3
    Expert éminent

    Femme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2007
    Messages
    5 202
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Juin 2007
    Messages : 5 202
    Par défaut
    Un format de scanf tel que "%s,%s,%d,%d,%s" pourrait te servir. (en supposant que les positions sont des nombres).

    En fouillant un peu plus, je suis sur que tu peux même indiquer les tailles max des champs.

  4. #4
    Membre très actif
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2011
    Messages
    317
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meuse (Lorraine)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2011
    Messages : 317
    Par défaut
    Citation Envoyé par takago Voir le message
    Salut,

    perso je ferais une liste chaînée, tu aura une case de liste par ligne, et dans cette case tu met un char **, comme sa tu pourra stoker chaque chaîne entre les virgules, et tu fait un next quand tu voie un '\0', tu malloc ton tab comme ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    tab = malloc(sizeof(char*)* 5)
    et après tu malloc ton tab[0][case_a_malloc] de la taille de se que tu a lus jusque a ta virgule.
    Je ne sais pas si je suis bien clair.

    Cordialement,

    Takago.
    Je veux éviter les listes chainée.
    Je veux bien utiliser les tableaux. c-à dire stocker les valeurs dans un tableau.
    est-ce qu'il y a une solution?
    merci

  5. #5
    Membre actif
    Homme Profil pro
    Étudiant
    Inscrit en
    Septembre 2012
    Messages
    63
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2012
    Messages : 63
    Par défaut
    Salut,

    Si tu veux utiliser uniquement les tableaux tu vas devoir utiliser un char *** ... Se qu'y n'est pas forcement évident, pour moi passer par une liste chaînée est beaucoup plus simple, et tu pourra accédé a tes valeurs plus facilement.

    Takago.

  6. #6
    Membre Expert

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2013
    Messages
    610
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Finance

    Informations forums :
    Inscription : Avril 2013
    Messages : 610
    Billets dans le blog
    21
    Par défaut
    Ton fichier a l'air d'être au bon vieux format csv...

    1. Une solution pourrait donc être d'utiliser une librairie pour parser ce format, je suis sûr qu'il en existe plein (mais, expert plus en c++ qu'en c, je te laisse chercher :-)
    2. White_tentacle a écrit un très bon article sur la question pour le C++ mais la logique est là pour le C également: http://www.developpez.net/forums/d15...pp-faire-faut/
    3. Si tu veux un tableau tu auras un type homogène: que des strings, pas un mix int/strings, sauf à faire d'abord une structure perso, comme struct Line { int pos; int len; char* s; } puis un tableau de structs
    4. Après c'est selon la performance exigée, la volonté de gérer les erreurs, etc. Il faut un peu plus de renseignements pour te mettre sur la piste

  7. #7
    Membre Expert

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2013
    Messages
    610
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Finance

    Informations forums :
    Inscription : Avril 2013
    Messages : 610
    Billets dans le blog
    21
    Par défaut
    Au passage je confirme que la logique C serait plutôt de faire une liste chaînée car la gestion de la mémoire sera assez cauchemardesque si tu ne connais pas le nombre de lignes au départ.
    Ton désir de tableau s'accorderait mieux avec un vector du C++...

Discussions similaires

  1. Réponses: 9
    Dernier message: 03/07/2014, 18h08
  2. lire une base de donnee ligne par ligne
    Par thildouille dans le forum Langage
    Réponses: 9
    Dernier message: 03/06/2011, 00h50
  3. lire fichier .txt (NOTEPAD) ligne par ligne
    Par skambram dans le forum VB.NET
    Réponses: 1
    Dernier message: 06/06/2009, 18h41
  4. lire un fichier de string ligne par ligne
    Par bilzzbenzbilz dans le forum Entrée/Sortie
    Réponses: 4
    Dernier message: 11/02/2009, 10h44
  5. Réponses: 3
    Dernier message: 16/10/2007, 20h45

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