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 :

chercher le min et le max d'un fichier de taille inconnue


Sujet :

C

  1. #1
    Membre averti
    Femme Profil pro
    Inscrit en
    Novembre 2012
    Messages
    19
    Détails du profil
    Informations personnelles :
    Sexe : Femme

    Informations forums :
    Inscription : Novembre 2012
    Messages : 19
    Par défaut chercher le min et le max d'un fichier de taille inconnue
    Bonjour à tous,

    J'ai un fichier qui se compose de 4 colonne mais de le nombre de ligne est inconnue.

    Je veux lire ce fichier et chercher le min et le max de chaque colonne en parcourant tout le fichier.

    Pouvez vous me proposer une solution?
    Merci d'avance

  2. #2
    Membre émérite
    Homme Profil pro
    R&D imagerie 3D / prog embarquée
    Inscrit en
    Mars 2007
    Messages
    419
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : R&D imagerie 3D / prog embarquée
    Secteur : Santé

    Informations forums :
    Inscription : Mars 2007
    Messages : 419
    Par défaut
    Salut,

    Disons que tes colonnes sont séparé par des \t (ça marche avec n'imprte quel caractère) et contiennent des floats (ça marche aussi avec des int, il faut changer %f par %d).
    Je lirais le fichier ligne à ligne en faisant des fscanf.
    Dans le genre:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    float fCol0, fCol1, fCol2, fCol3;
    fscanf(file, "%f\t%f\t%f\t%f\n", fCol0, fCol1, fCol2, fCol3);
    Au fur et à mesure de ta lecture, tu garde les min et le max de chaque colonne.

  3. #3
    Membre émérite
    Avatar de Kirilenko
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2011
    Messages
    234
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 28
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2011
    Messages : 234
    Par défaut
    Citation Envoyé par IngenieurElec Voir le message
    J'ai un fichier qui se compose de 4 colonne mais de le nombre de ligne est inconnue.

    Je veux lire ce fichier et chercher le min et le max de chaque colonne en parcourant tout le fichier.
    Le plus simple pour toi sera de fixer un nombre de lignes maximal, et de lire ton fichier en formaté, tant que les valeurs de retour sont concordantes. Si tu veux vraiment faire quelque chose de flexible, tu peux toujours réallouer dynamiquement ton tableau, mais je n'aurais pas tendance à te le conseiller, personnellement. Un exemple, quand même, pour récupérer le maximum de chaque colonne :

    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
    #include <stdlib.h>
     
    static size_t read_file(FILE *fp, int **tmax)
    {
    	size_t cpct = 12;
    	size_t size = 0;
    	int t[4];
     
    	*tmax = malloc(cpct * sizeof **tmax);
    	while (fscanf(fp, "%d%d%d%d\n", t+0, t+1, t+2, t+4) == 4) {
    		if (size + 1 > cpct) {
    			cpct += (cpct >> 1);
    			*tmax = realloc(*tmax, cpct * sizeof **tmax);
    		}
    		int nmax = t[0];
    		if (nmax < t[1]) nmax = t[1];
    		if (nmax < t[2]) nmax = t[2];
    		if (nmax < t[3]) nmax = t[3];
    		(*tmax)[size++] = nmax;
    	}
    	return size;
    }
    Je ne l'ai pas fait, mais, malgré tout, je te conseille de tester le résultat des réallocations. Ça peut monter assez vite, si ton fichier est gros.
    Récursivité en C : épidémie ou hérésie ?

    "Pour être un saint dans l'Église de l'Emacs, il faut vivre une vie pure. Il faut se passer de tout logiciel propriétaire. Heureusement, être célibataire n'est pas obligé. C'est donc bien mieux que les autres églises" - Richard Stallman

  4. #4
    Membre chevronné
    Inscrit en
    Décembre 2010
    Messages
    290
    Détails du profil
    Informations forums :
    Inscription : Décembre 2010
    Messages : 290
    Par défaut
    Perso voilà ce que je ferais :
    Je lirais le fichier à ligne.
    Pour chaque ligne, je regarderais si la valeur que je lis dans chaque colonne est plus petite que la valeur best_min que j'ai déjà. Si oui, je la stocke dans best_min. Même chose pour le max.
    Je ne vois pas l'utilité de stocker tout le fichier en mémoire, juste les deux meilleures valeurs (pour chaque colonne).

    Edit : j'avais pas vu la réponse de djuju, qui propose la même chose, mais en plus avec un exemple.

  5. #5
    Membre émérite
    Avatar de Kirilenko
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2011
    Messages
    234
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 28
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2011
    Messages : 234
    Par défaut
    Citation Envoyé par phi1981 Voir le message
    Je ne vois pas l'utilité de stocker tout le fichier en mémoire, juste les deux meilleures valeurs (pour chaque colonne)
    Personne n'a proposé cela, pourtant.
    Récursivité en C : épidémie ou hérésie ?

    "Pour être un saint dans l'Église de l'Emacs, il faut vivre une vie pure. Il faut se passer de tout logiciel propriétaire. Heureusement, être célibataire n'est pas obligé. C'est donc bien mieux que les autres églises" - Richard Stallman

Discussions similaires

  1. Réponses: 13
    Dernier message: 11/04/2009, 19h03
  2. [XL-2003] Trouver le min et le max d'une colonne dans une plage filtrée
    Par Gwladys dans le forum Excel
    Réponses: 2
    Dernier message: 06/04/2009, 17h37
  3. Parcourir une image pour récupérer le min et le max
    Par Premium dans le forum Traitement d'images
    Réponses: 3
    Dernier message: 14/11/2006, 22h17
  4. Équivalent de std::min et std::max en C?
    Par vdumont dans le forum C
    Réponses: 2
    Dernier message: 08/10/2006, 18h15
  5. Comment faire un random avec un min et un max
    Par crocodingo dans le forum C++
    Réponses: 3
    Dernier message: 06/04/2006, 11h19

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