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 :

extraire une colonne/une ligne d'un fichier texte


Sujet :

C

  1. #1
    Nouveau Candidat au Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Août 2011
    Messages
    1
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Calvados (Basse Normandie)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Santé

    Informations forums :
    Inscription : Août 2011
    Messages : 1
    Points : 1
    Points
    1
    Par défaut extraire une colonne/une ligne d'un fichier texte
    Bonjour,
    Je dispose d'un fichier texte de quelques 2000 lignes et 700 colonnes et j'aimerais pouvoir faire des opérations sur une ligne ou un colonne n. Par exemple extraire la 100ème colonne et l'enregistrer dans un fichier à part ou alors additionner des lignes. Je viens de passer toute la journée à jouer avec les fgetc, fgets, fscanf mais je n'arrive à rien de concluant (faut dire que je suis une quiche en programmation). j'ai parcouru quelques forums aussi et faut croire que je suis la seule personne à vouloir faire ça (ou la seule à pas être assez douée...). Si quelqu'un peut m'aider je lui en serait reconnaissante.
    Merci d'avance

  2. #2
    Modérateur
    Avatar de Obsidian
    Homme Profil pro
    Développeur en systèmes embarqués
    Inscrit en
    Septembre 2007
    Messages
    7 397
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Développeur en systèmes embarqués
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2007
    Messages : 7 397
    Points : 23 761
    Points
    23 761
    Par défaut
    Bonjour,

    Sympatique, ton pseudonyme ! :-)

    Citation Envoyé par quichinfo Voir le message
    Bonjour, Je dispose d'un fichier texte de quelques 2000 lignes et 700 colonnes et j'aimerais pouvoir faire des opérations sur une ligne ou un colonne n. Par exemple extraire la 100ème colonne et l'enregistrer dans un fichier à part ou alors additionner des lignes. Je viens de passer toute la journée à jouer avec les fgetc, fgets, fscanf mais je n'arrive à rien de concluant (faut dire que je suis une quiche en programmation). j'ai parcouru quelques forums aussi et faut croire que je suis la seule personne à vouloir faire ça (ou la seule à pas être assez douée...).
    C'est effectivement une opération assez répandue et non, ce n'est pas trivial. Donc :

    — Avant toute chose, est-ce bien en langage C que tu cherches à faire cela, ou le langage C n'est-il qu'un langage comme un autre, auquel cas on t'orienterait peut-être vers quelque chose de plus adapté pour cette opération en particulier ?
    — Avec quoi sont séparées tes colonnes dans ton fichier texte ? Une tabulation, une virgule, un point-virgule ou un mélange de tout cela ?

    Étant donné que toutes tes données sont enregistrées de manière linéaire les unes après les autres dans ton fichier texte, et que tes lignes sont de longueur variable, tu n'as pas d'autre choix que parcourir ton fichier de manière séquentielle, c'est-à-dire en commençant par le début et en comptant les lignes.

    Dans un premier temps, tu peux utiliser fgets() pour lire directement le contenu d'une ligne dans un buffer alloué au préalable. À noter que cette fonction tient compte de la taille de ce buffer. Donc si la ligne que tu lis depuis ton fichier est plus longue que ce buffer, elle ne sera pas lue en entier.

    Ce n'est pas forcément compliqué en soi, mais ça demande de faire beaucoup de tests annexes lorsqu'on lit des données de gros fichiers comme le tien : il faut vérifier que fgets() n'a pas renvoyé NULL, mais également si l'on atteint '\n' (le retour à la ligne) ou '\0' (fin de chaîne) quand on lit le contenu du buffer fraîchement chargé, et si l'on tombe sur '\0', vérifier également que l'on n'a pas atteint la fin de ce buffer, ce qui signifierait qu'il y a potentiellement une suite mais que fgets() s'est arrêté là — pour le moment — faute de place.

    En fait, ceci est surtout dû au fait qu'il n'y a pas de type « string » natif en C, et que c'est à toi de gérer la mémoire (pas simple quand on débute, effectivement).

    De là, les « colonnes » sont en fait formées par les rangs respectifs de chaque cellule au sein de ta ligne. Si tu cherche à récupérer la douzième colonne de ton fichier, il faut en fait récupérer le douzième élément de chaque ligne.

    Donc, tu fais une boucle qui lit toutes les lignes de ton fichier comme indiqué au-dessus et, à l'intérieur de cette boucle, tu en écris une deuxième qui ignore les n-1 premiers éléments et qui renvoie le suivant.

    Essaie d'écrire deux ou trois lignes en suivant cette idée et on t'aidera à finaliser ton programme.

Discussions similaires

  1. MFC d'une colonne à une colonne et planning perpetuel
    Par mlegentil dans le forum Excel
    Réponses: 0
    Dernier message: 12/04/2014, 17h43
  2. Réponses: 5
    Dernier message: 08/02/2013, 11h05
  3. Réponses: 6
    Dernier message: 10/11/2009, 19h08
  4. Réponses: 2
    Dernier message: 19/08/2006, 12h47

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