begin process at 2012 05 30 02:41:26
  Trouver un code source :
 
dans
 
Accueil > Forum > 

C++ & C++ .NET

 > 

Algorithme

 > 

Compression, Split & Cryptage

 > 

Justification d'un texe


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

Justification d'un texe

dimanche 23 novembre 2008 à 18:01:44 | Justification d'un texe

mimosa803

Bonjour tous le monde,

J'ai voulu faire un programme qui consiste à faire la justication d'un texte, c'est à dire toutes les lignes du texte doivent avoir la même longueur à l'exception de la dernière ligne.
Bon, j'ai utilisé un fichier comme entrée pour lire mon texte. Puis j'ai fais une fonction qui permet d'éléminer les espaces inutiles : un seul espace entre deux mots, pas d'espaces avant la ponctuation, un espace après la ponctuation.
Après avoir éléminer les espaces j'ai fait une fonction qui prend en argument la longueur d'un ligne et j'ai fais une fonction de justification. Mais, j'ai un problème : quand je regarde l'exécution j'ai toujours un problème dans la première ligne de chaque paragraphe de mon texte, j'ai toujours un nombre de caractère inférieur à longueur d'une ligne. Par contre dans les autres lignes tout va bien.

Voilà mon code commenté, j'espère que vous pouvez m'aider :
#include <stdio.h>
#include <stdlib.h>
#include <string.h>


FILE * Ouvrir_Fichier(char * nom_fichier)
{
     FILE * f=fopen(nom_fichier,"r");
     if (f==NULL)
        return NULL;
     else
         return f;
}

int Lecture_Nombre_Caractere()
{
    int nb;
    printf("Donner le nombre de carcatere par ligne :\n");
    scanf("%d",&nb);
    return nb;
}
void Justifier_Fichier(FILE * f,int nb)
{
   
    FILE * ftmp=fopen("c:/FichierJusitifie.txt","w");
   
    int i;
    char c;
    while (!feof(f))
    {
          i=1;
          while(i<=nb)
          {
                   c=fgetc(f);
                   printf("%c",c);                  
                   fputc(c,ftmp);                 
                   i++;                     
          }
         
          if(i>nb)
          {                 
                   c='\n';
                   printf("%c",c);   
                   fputc(c,ftmp);
                                                    
          }
    }
    fclose(f);
    fclose(ftmp);
}

// Fonction qui élémine les espaces du texte principale, après un signe de ponctuation on laisse uniquement
// 1 seul espace aussi entre chaines consécutives on laisse un seul espace.
 
void Effacer_Espace(FILE * f)
{
     FILE * ftmp=fopen("c:/FichierSansEspace.txt","w");//C'est le fichier qui va contenir le texte après avoir effacé
     char c;                                           //les espaces inutiles.
     int nb_space;
   
     while(!feof(f))// Tanque on n'a pas atteint la fin du fichier on lit caractère par caractère
     {
                    c=fgetc(f);
                    if ( (c!=' '))// si le caractère lu n'est pas un espace on vérifie s'il n'est pas une ponctuation
                    {
                                   if ( (c!=',') && (c!='.'))//S'il n'est pas une ponctuation on ajoute le caractère lu au fichier
                                             fputc(c,ftmp);//On l'insère dans le nouveau fichier crée au dessus
                                   else
                                   {
                                        nb_space=0;//Sinon, il faut insérer uniquement un espace après la ponctuation
                                        char tmp;
                                        while((tmp=fgetc(f))==' ')//Cette boucle teste le nombre d'espace après la ponctuation
                                        {
                                            nb_space++;// Tanqu'on a un espace après la ponctuation on boucle
                                        }
                                        fputc(c,ftmp);// enfin on ajoute la ponctuation suivie d'un espace et le caractère suivant
                                        fputc(' ',ftmp);
                                        fputc(tmp,ftmp);
                                   }
                    }
                    else // Si on a un espace c a d un espace entre deux mots, on doit laisser uniquement un seul espace
                    {
                          nb_space=1;
                          while((c=fgetc(f))==' ')
                          {
                                            nb_space++;
                          }
                          if ( (c!=',') && (c!='.') )                  
                          {
                               fputc(' ',ftmp);
                               fputc(c,ftmp);
                          }
                          else
                          {
                               fputc(c,ftmp);// Ici on traite les espaces avant la virgule donc pas d'esapce avant la virgule ou
                               fputc(' ',ftmp);//un point
                          }
                             
                    }                                                      
     }   
     fclose(f);
     fclose(ftmp);
                                              
}
int main(int argc, char *argv[])
{
  FILE * fich1=Ouvrir_Fichier("c:/teste.txt");
  FILE * fich2=NULL;
  //FILE * f1;
  int longueur;
  if(fich1!=NULL)
  {
              printf("Elimination des espaces...\n");
              Effacer_Espace(fich1);
              //wait(5);
              fich2=Ouvrir_Fichier("c:/FichierSansEspace.txt");
              if(fich2!=NULL)
              {
                            longueur=Lecture_Nombre_Caractere();
                            Justifier_Fichier(fich2,longueur);
              }           
  }
  else
  printf("Veuillez verifier le nom du fichier ! \n");
  //Justifier_Fichier(fich1,30);
  system("PAUSE");   
  return 0;
}



Cette discussion est classée dans : fichier, espace, nb, ftmp, fputc


Répondre à ce message

Sujets en rapport avec ce message

[C] lignes d'un fichier dans un tableau : Segmentation fault [ par Michel76 ] Bonjour,Pardonnez-moi de cette question de débutant.Soit un fichier contenant :-----001002-----Je souhaiterais mettre chacune des lignes de ce fichier Ecriture de fichier texte & Séparateur !! [ par Misutsu ] bonjour :)C'est la première fois que j'ai à utiliser des fichiers en C++, et je vois que l'espace sert de séparateur.Dans mon cas, j'ai besoin d'enreg Lecture sur un fichier par ligne [ par gagaet22 ] Bonjour, Je cherche à lire sur un fichier ligne par ligne.J utilise fscanf et il s arrete des qu il y a un espace... Je cherche donc une fonction qui lecture/écriture fichier binaire [ par SesechXP ] Salut !J'ai un programme modulaire à faire en C sous Borland C++ 5 pour un TP dont la fonction principale est donnée et je dois faire les différentes espace disque [ par konik ] y a t'il un moyen simple de vérifier avant de créer un fichier sur disque qu'il y a assez de place.Le fichier doit être créer dynamiquement et peux fa fstream [ par Mcjo ] Bonjour, me rémettant depuis peu au c++ j'ai testé un code de lecture dans un fichier mais la fonction bad() ne semble pas fonctionnée correctement. Fscanf ne fait pas ce que je veux ... [ par tichadok ] Bonjour, voici mon problème condensé dans ce bout de code : un fichier fic.txt contient : 2.0 3.0 un fichier lect.c contient : #include int main( espace à la fin d'une chaine extraite d'un fichier [ par graall ] bonjour, je me pose des questions sur ce code :     ifstream fTemplate("fichier.txt"); // le fichier contient la chaine "hello"     if(fTemplate.is_ Lire un fichier txt contenant des nombres [ par wwalker ] Je souhaite qu'une variable integer prennent successivement les valeurs contenus dans un fichier txt.Forme du fichier nombres.txt:123445677890...Voila fichier ligne par ligne [ par blinix123 ] Yop!Bon voilou, je ne suis pas fortiche dans la manipulation de fichiers ^^J'ai un fichier qui contient des lignes de suite de nombre: 000112033011140


Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

A découvrir



 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,733 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales