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 :

aide en fichiers


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Inscrit en
    Mai 2009
    Messages
    392
    Détails du profil
    Informations forums :
    Inscription : Mai 2009
    Messages : 392
    Par défaut aide en fichiers
    Bonjour,

    Je voulais faire un traitement en même temps sur un nombre de fichier.J'ai trouvé des difficultés pour résoudre ce problème.

    Je vous explique ma demande :
    J'ai un fichier nommé "resultat.txt" contenanat deux champs de type chaine de caractère: numero et son attribut.
    Soit le fichier "resultat.txt":
    Citation

    5 : dd cc aaa
    8 : aaa bb dd
    10 : bb cc aaa
    4 : dd bb cc


    Chaque mot formant le deuxième champ(attribut) présente le nom d'un fichier texte.
    Dans notre exemple on a les fichiers textes suivants:
    "dd.txt", "cc.txt", "aaa.txt" et "bb.txt".
    On peut avoir plus ou moins de ces fichiers textes car ceci dépend des mots formant le deuxième champ (attribut).
    Le contenu de ces fichiers existent et ils sont générés dans mon programme. chacun de ces fichiers est formant de deux champs: valeur(de type entier) et degree(de type réel).

    Dans cet exemple, on a le contenu :
    - de fichier "dd.txt" :
    257 0.860000
    233 1.000000
    144 0.880000
    377 0.000000
    257 0.860000
    562 0.000000
    456 0.000000
    388 0.660000
    644 0.000000
    277 0.460000
    - de fichier "cc.txt" :
    160 1.000000
    155 1.000000
    160 1.000000
    155 1.000000
    175 0.000000
    185 0.000000
    170 0.000000
    175 0.000000
    174 0.000000
    163 0.400000

    - de fichier "aaa.txt" :
    30 1.000000
    32 1.000000
    45 1.000000
    56 1.000000
    46 0.860000
    48 0.000000
    34 0.000000
    38 0.500000
    59 0.660000
    30 0.000000
    - de fichier "bb.txt" :
    257 0.860000
    233 1.000000
    144 0.880000
    377 0.000000
    257 0.860000
    562 0.000000
    456 0.000000
    388 0.660000
    644 0.000000
    277 0.460000
    Je voulais pour chaque numero (premier champ de fichier "resultat.txt") positionner sur la même ligne numéro 'numero' pour chaque fichier txt correspondant et calculer le minimum entre ces valeurs de 'degree'
    par exemple pour le numero 10 de fichier "resultat.txt" nous allons positionner sur la ligne numéro 10 en même temps pour tous les fichiers correspondant à ce numéro.
    Pour cet exemple, on va positionner sur la ligne numéro 10 du fichiers "cc.txt", "aaa.txt" et "bb.txt"
    puis on cherche le minimum entre les valeurs de 'degree'
    Dans notre exemple, on cherche le minimum entre
    0.400000 et 0.000000 et 0.460000

    Donc on a le minimum est 0.000000

    Et donc on souhaite obtenir le résultat final qui va être stocker dans un fichier nommée "resultat_final" est :

    5 : dd cc aaa : 0.00
    8 : aaa bb dd : 0.00
    10 : bb cc aaa : 0.00
    4 : dd bb cc : 0.00
    Que proposez vous ?

    Merci.

  2. #2
    Membre du Club
    Profil pro
    Inscrit en
    Juillet 2009
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Juillet 2009
    Messages : 8
    Par défaut Precision...
    Salut, tu pourrais donner quelques precisions concernant ce que tu n'arrive pas a faire ? Je ne comprend pas tres bien ton probleme.

    Peut-etre qu'une recherche du cote des expressions regulieres te sera utile. Tu travailles en C ou C++ ?

    Si le langage importe peu je te conseille Python pour les petits scripts. Il offre plein de possibilites pour le traitement de fichiers.


    PS. Desole pour les accents mais je suis a Oxford en ce moment et c pas mon ordi...

  3. #3
    Expert confirmé
    Avatar de diogene
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Juin 2005
    Messages
    5 761
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2005
    Messages : 5 761
    Par défaut
    siempre :
    Que proposez vous ?
    Que tu nous dises où tu butes dans ce problème :

    - pour lire les numéros et le nom des fichiers dans "resultat.txt" ?
    - pour se positionner sur la bonne ligne dans les fichiers ?
    - pour chercher le minimum ?
    - pour écrire le résultat ?

    Et qu'est ce que tu as déjà fait ?

  4. #4
    Membre éclairé
    Inscrit en
    Mai 2009
    Messages
    392
    Détails du profil
    Informations forums :
    Inscription : Mai 2009
    Messages : 392
    Par défaut
    Tu travailles en C ou C++ ?
    Mon programme est en C.

    Aidez-moi.

  5. #5
    Expert confirmé

    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    10 610
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 10 610
    Billets dans le blog
    2
    Par défaut
    Citation Envoyé par siempre Voir le message
    Aidez-moi.
    Citation Envoyé par diogene Voir le message
    Que tu nous dises où tu butes dans ce problème :

    - pour lire les numéros et le nom des fichiers dans "resultat.txt" ?
    - pour se positionner sur la bonne ligne dans les fichiers ?
    - pour chercher le minimum ?
    - pour écrire le résultat ?

    Et qu'est ce que tu as déjà fait ?

  6. #6
    Membre éclairé
    Inscrit en
    Mai 2009
    Messages
    392
    Détails du profil
    Informations forums :
    Inscription : Mai 2009
    Messages : 392
    Par défaut
    Bonjour,

    J'ai trouvé des difficultés au début pour extraire le premier champ et les différents mots de deuxième champ de fichier "resultat.txt" .

    Que proposez vous ?

    Merci.

  7. #7
    Expert confirmé
    Avatar de diogene
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Juin 2005
    Messages
    5 761
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2005
    Messages : 5 761
    Par défaut
    J'ai trouvé des difficultés au début pour extraire le premier champ et les différents mots de deuxième champ de fichier "resultat.txt" .
    Que proposez vous ?
    Ca dépend si le nombre de nom de fichiers derrière ':' est connu et fixe ou non.

    * Le premier cas est simple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    1- Ouvrir le fichier et vérifier que l'ouverture s'est correctement effectuée fopen()
    
    2- Tant qu'on n'est pas arrivé à la fin du fichier
      2.1- lire une ligne du fichier fgets() et la mettre dans un buffer buff
      2.2- lire le buffer buf avec sscanf(). Le format peut être "%d :%s%s%s", avec un blanc devant le ':' et autant de %s que de fichiers 
    
    3- Fermer le fichier.
    * Si le nombre de noms de fichiers est variable ou inconnu, mais inférieur à une valeur N connue (et raisonnable), on peut utiliser l'étape 2.2 avec un format comportant N fois %s et en mémorisant la valeur n retournée par sscanf. Le nombre de noms de fichiers est alors n-1.

    * Si on n'a aucune information sur le nombre de fichiers, il faut modifier radicalement l'étape 2.2. Par exemple, on peut faire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    2.2.a Lire le buffer buf avec sscanf() pour obtenir le nombre (format "%d")
      2.2.b Rechercher dans buf le caractère ':' p = strchr(buf,':');
            Si p est NULL, la ligne est mal formée. Sinon incrémenter p pour se placer derrière :.
      2.2.c Couper la chaine à partir de p avec pour séparateur le caractère ' ' p = strtok(p," ");
      2.2.d Tant que p est différent de NULL et que *p est différent de '\n'
         2.2.d.1 Copier la chaine pointée par p strcpy(); il s'agit du nom d'un fichier (ou sauvegarder la valeur de p).
         2.2.d.2 Couper la chaine à partir de p avec pour séparateur le caractère ' ' p = strtok(NULL," ");

Discussions similaires

  1. Aide sur fichier batch
    Par Flushovsky dans le forum Windows
    Réponses: 13
    Dernier message: 14/12/2007, 08h21
  2. aide java(fichier .chm)
    Par damned3 dans le forum Langage
    Réponses: 2
    Dernier message: 07/09/2006, 20h55
  3. Aide sur Fichier Formsweb
    Par momo9237 dans le forum Forms
    Réponses: 5
    Dernier message: 16/06/2006, 21h38
  4. Saisie à l'aide de fichier batch
    Par Ti-Pou dans le forum Installation
    Réponses: 2
    Dernier message: 14/02/2006, 01h12
  5. [DEBUTANT] Aide manip fichier EXCEL
    Par valal dans le forum Modules
    Réponses: 8
    Dernier message: 05/01/2006, 08h32

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