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 :

Comment extraire une chaine d'un fichier texte en ASCII


Sujet :

C

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    29
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2009
    Messages : 29
    Points : 20
    Points
    20
    Par défaut Comment extraire une chaine d'un fichier texte en ASCII
    Bonjour,

    Pour un projet scolaire, j'ai besoin d'extraire une chaine de caractère d'un fichier txt (en ASCII)
    Prenons cet extrait du texte :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    THE TRAGEDY OF ROMEO AND JULIET
     
    by William Shakespeare
     
     
     
    Dramatis Personae
     
    Chorus.
    Je souhaites extraire les chaines avant chaque passage à la ligne suivante. Exemple :
    tmpfile = ("THE TRAGEDY OF ROMEO AND JULIET")
    un traitement (code en cours)
    tmpfile = ("by William Shakespeare")
    un traitement (code en cours)
    tmpfile = ("Dramatis Personae")
    un traitement (code en cours)
    tmpfile = (" Chorus.")
    J'ai l'idée bien en tête mais le code correspondant est la mais ne marche pas :
    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
    23
    void extract(char* nomFichier,FILE* f){
     
    FILE* tmp;
    int caractereActuel;
    char* chartmp[1000];
     
    tmp = NULL;
    caractereActuel = 0;
    tmp = fopen("nomFichier", "rb");
    caractereActuel = fgetc(tmp);
     
    while (curseur != EOF) {
      while (le curseur n'est pas sur un '\n'){
      pos=pos+1
      }
        if (curseur = \n){
        Copie tout ce qu'il y a avant dans tmp
        Traitement
        }
    }
    fclose(tmp);
     }
    }
    Sauf erreur de ma part, une ligne à rajouter (je ne sais pas ou) serais :
    caractereActuel=fscanf(f,"%s",chartmp);

    Merci d'avance

  2. #2
    Membre chevronné
    Profil pro
    Inscrit en
    Août 2006
    Messages
    1 104
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 1 104
    Points : 1 750
    Points
    1 750
    Par défaut
    Pourquoi ne pas utiliser fgets ? La fonction est faite pour cela.
    http://man.developpez.com/man3/fgets.3.php

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    29
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2009
    Messages : 29
    Points : 20
    Points
    20
    Par défaut
    Merci pour votre aide.
    Le problème est que je sais que j'en ai besoin mais je ne sais pas comment l'utiliser pour les chaines et un fichier en entier.
    C'est pour cela que je poses une question sur ce forum

  4. #4
    Membre habitué
    Homme Profil pro
    Inscrit en
    Mars 2011
    Messages
    102
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mars 2011
    Messages : 102
    Points : 153
    Points
    153
    Par défaut
    Citation Envoyé par jeroman Voir le message
    Pourquoi ne pas utiliser fgets ? La fonction est faite pour cela.
    http://man.developpez.com/man3/fgets.3.php
    ha oui oui !! +1
    fonction secure et pratique !

    en n'oubliant pas de retirer le '\n' à la fin de la chaine avant de faire un traitement sur celle-ci.
    Si le \n n'est pas présent c'est que la ligne est trop grande par rapport à la taille du buffer, ou que t'es arrivé à la fin de ton fichier.

    edit:
    Citation Envoyé par tim91700 Voir le message
    Merci pour votre aide.
    Le problème est que je sais que j'en ai besoin mais je ne sais pas comment l'utiliser pour les chaines et un fichier en entier.
    C'est pour cela que je poses une question sur ce forum
    Comment lire une ligne à appliquer sur un fichier et non sur stdin.
    FAQ C le retour
    FAQ C résurrection

  5. #5
    Membre à l'essai
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    29
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2009
    Messages : 29
    Points : 20
    Points
    20
    Par défaut
    Apres des heures d'efforts, voila mon code :
    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
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    void extractTexte(FILE* f)
    {
    char buffer[1000];
      // open the file "fred.txt" for reading
      FILE *in = fopen("romeojuliet.txt", "rt");
     
      //while(buffer != \n){
      // read the first line from the file
      fgets(buffer, 1000, in);
      // display what we've just read
      printf("first line of \"romeojuliet.txt\": %s\n", buffer);
      //in=in+1;
      //}
      // close the stream
      fclose(in);
    }
     
    void frequenceMot(FILE* f){
    	int casier[95];
    	int i;
    	char car;
    	for(i=0; i<95; i++){
    		casier[i] = 0;
    	}
    	car = fgetc(f);
    	while(!(feof(f))){
    		casier[car-32]++;
    		car = fgetc(f);
    	}
    	for(i=0; i<95; i++){
    		printf("%c : %d fois \n", i+32, casier[i]);
    	}
    }
    Je progresses doucement et surement.
    J'ai un problème pour la recursivité de l'extraction de chaque ligne
    Je souhaites connaitre le critère d'arret de la boucle et le critère pour passer à la ligne d'après

    Merci d'avance pour votre réponse

  6. #6
    Expert éminent sénior
    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
    Points : 13 926
    Points
    13 926
    Par défaut
    La réponse est dans la valeur renvoyée par fgers() :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    while (fgets(buffer, 1000, in) != NULL)
    {
      // display what we've just read
      printf("\"romeojuliet.txt\": %s\n", buffer);
    }
    //ici le fichier a été entièrement lu (ou une erreur s'est produite)

  7. #7
    Membre à l'essai
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    29
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2009
    Messages : 29
    Points : 20
    Points
    20
    Par défaut
    Merci pour ton aide, voila le code finie :
    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
    void extractTexte(FILE* f)
    {
    char buffer[1000];
      // open the file "fred.txt" for reading
      FILE *in = fopen("romeojuliet.txt", "rt");
     
    while (fgets(buffer, 1000, in) != NULL)
    {
      // display what we've just read
      printf("\"romeojuliet.txt\": %s\n", buffer);
    }
    //ici le fichier a été entièrement lu (ou une erreur s'est produite)
    frequenceMot
      // close the stream
    fclose(in);
    }

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

Discussions similaires

  1. Réponses: 13
    Dernier message: 23/09/2013, 04h21
  2. Extraire une chaine d'un fichier texte
    Par Fikou-Sama dans le forum Langage
    Réponses: 8
    Dernier message: 24/08/2009, 08h18
  3. detruire une chaine dans un fichier texte
    Par rober dans le forum VB 6 et antérieur
    Réponses: 13
    Dernier message: 08/11/2006, 09h27
  4. comment copier une table vers un fichier texte ou le contraire
    Par kham40 dans le forum Bases de données
    Réponses: 3
    Dernier message: 04/11/2006, 13h51
  5. Comment faire une insertion dans un fichier texte ?
    Par Isa31 dans le forum Langage
    Réponses: 10
    Dernier message: 28/12/2004, 09h06

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