Alors la Big Probleme de chez big probleme

Alors la Big Probleme de chez big probleme - C++ - Programmation

Marsh Posté le 29-08-2002 à 16:24:18    

j ai pratiquement fini mon programme
 

Code :
  1. #include <stdio.h>
  2. #include <string.h>
  3. char nom1[64]={0},temp[64]={0},var[64]={0},c;
  4. FILE *fichier1,*fichier2,*fichier3;
  5. void ouverture(FILE **fichier,char *nom,char *attribut)
  6. {
  7. if ((*fichier = fopen(nom,attribut)) == NULL)
  8.         printf("ERREUR : impossible d'ouvrir le fichier %s .\n",nom);
  9.     else
  10.         printf("Fichier %s ouvert .\n",nom);
  11. }
  12. void espace(FILE *fichier,int vide)
  13. {
  14.     int i;
  15.     char c=' ';
  16.     for (i=1;i<=vide;i++)
  17.         fputc(c,fichier);
  18. }
  19. void getValeur(FILE *source,char *valeur)
  20. {
  21.     char lettre;
  22.     int i;
  23.     i=0;
  24.     while (((lettre=fgetc(source)) != ';') && (lettre != '\n'))
  25.             {
  26.                 valeur[i]=lettre;
  27.                 i++;
  28.             }
  29.     valeur[i]='\0';
  30. }
  31. void setValeur(FILE *resultat,char *valeur,int format)
  32. {
  33.     fputs(valeur,resultat);
  34.     espace(resultat,format-strlen(valeur));
  35. }
  36.        
  37. void constante(FILE *resultat,char *cons)
  38. {
  39.     fputs(cons,resultat);
  40. }
  41. void ligne(FILE *source1,FILE *source2,FILE *resultat,char *test)
  42. {
  43.     char var1[128];
  44.      
  45.     espace(resultat,7);                         //ANODOS//
  46.     constante(resultat,"10590" );                //ACNOCL//     
  47.     setValeur(resultat,test,20);                 //AREFCL//               
  48.     while ((strcmp(test,var1) != 0) && (var1 != '\0'))
  49.     {
  50.         getValeur(source2,var1);
  51.     }
  52.     constante(resultat,"11" );                    //ACAPDE//
  53.     getValeur(source1,var1);
  54.     setValeur(resultat,var1,30);                 //ANOMDE//
  55.     espace(resultat,30);                         //AENSEI//
  56.     getValeur(source2,var1);
  57.     setValeur(resultat,var1,30);                 //ANRUE1//
  58.     getValeur(source2,var1);
  59.     setValeur(resultat,var1,30);                 //ANRUE2//
  60.     espace(resultat,5);                          //AINSEE//
  61.     getValeur(source2,var1);                   
  62.     setValeur(resultat,var1,30);                 //ANCOMM//
  63.     getValeur(source2,var1);                   
  64.     setValeur(resultat,var1,5);                  //ACDPOS//
  65.     getValeur(source2,var1);                   
  66.     setValeur(resultat,var1,30);                 //ABDIST//
  67.     getValeur(source2,var1);                   
  68.     setValeur(resultat,var1,12);                 //ANTEL1//
  69.     getValeur(source2,var1);                   
  70.     setValeur(resultat,var1,12);                 //ANTEL2//
  71.     constante(resultat," " );
  72.     getValeur(source2,var1);                   
  73.     setValeur(resultat,var1,14);                 //ANOREG//
  74.     constante(resultat," " );
  75.     getValeur(source1,var1);                   
  76.     setValeur(resultat,var1,2);                  //ASSFAC//
  77.     constante(resultat," " );
  78.     getValeur(source1,var1);                   
  79.     setValeur(resultat,var1,4);                  //ADTFAC//
  80.     constante(resultat," 000000000,00" );         //AMNTPR//
  81.     constante(resultat,"B" );                     //ATARIF//
  82.     constante(resultat,"2" );                     //ATYPCC//
  83.     constante(resultat," 000000000,00" );         //APRFFR//
  84.     constante(resultat," 00" );                   //ASSMED//
  85.     constante(resultat," 000000" );               //ADTMED//
  86.     espace(resultat,80);                         //ABFACT//
  87.     espace(resultat,80);                         //ABFDCR//
  88.     constante(resultat,"1" );                     //ATAROP//
  89.     espace(resultat,2);                          //ACDPAY//
  90.     espace(resultat,80);                         //ADIVER//
  91.     constante(resultat,"N" );                     //ALITIG//
  92.     constante(resultat,"C" );                     //ATYDEB//
  93.     espace(resultat,73);                         //ADIVER//
  94.     constante(resultat,"EU" );                    //ACDDEV//
  95.     constante(resultat," 000000000,00" );         //APRIVD//
  96.     constante(resultat," 000000000,00" );         //APRIND//
  97.     constante(resultat,"\n" );
  98.    
  99.      
  100. }
  101.    
  102.          
  103. main()
  104. {
  105.     printf("Entrez le nom du fichier source :\n" );
  106.     scanf("%s",nom1);
  107.     ouverture(&fichier1,nom1,"r" );
  108.     printf("\n" );
  109.    
  110.     printf("Entrez le nom du fichier source :\n" );
  111.     scanf("%s",nom1);
  112.     ouverture(&fichier2,nom1,"r" );
  113.     printf("\n" );
  114.    
  115.     printf("Entrez le nom du fichier destination :\n" );
  116.     scanf("%s",nom1);
  117.     ouverture(&fichier3,nom1,"w" );
  118.    
  119.    
  120.     while (feof(fichier1) != 1)
  121.      {getValeur(fichier1,temp);
  122.       if (strcmp(var,temp) == 0)
  123.       {
  124.           while (fgetc(fichier1) != '\n')
  125.                     fgetc(fichier1);
  126.       }
  127.       else             
  128.       {
  129.          ligne(fichier1,fichier2,fichier3,temp);
  130.          fseek(fichier2,0,SEEK_SET);
  131.          strcpy(var,temp);
  132.       }
  133.      }       
  134. }

Reply

Marsh Posté le 29-08-2002 à 16:24:18   

Reply

Marsh Posté le 29-08-2002 à 16:25:42    

par contre ta pas du finir ton poste :D


---------------
What butter and whiskey won't cure, there is no cure for.
Reply

Marsh Posté le 29-08-2002 à 16:27:34    

vi j cé pas mon PC ramce a donf la
 
bon donc mon programme marche a moitie car qd je lance le programme , je specifie bien tous les fichiers a traiter mais il ne traite pas toutes les ligne de mon fichier source .....
 
sachant que dans le fichier source il y a 8000 lignes ......

Reply

Marsh Posté le 29-08-2002 à 16:31:47    

les règles de ponctuation s'appliquent dans le code, à savoir un espace après chaque virgule. tu verras, c'est beaucoup plus lisible.

Reply

Marsh Posté le 29-08-2002 à 16:34:46    

youdontcare a écrit a écrit :

les règles de ponctuation s'appliquent dans le code, à savoir un espace après chaque virgule. tu verras, c'est beaucoup plus lisible.




 
hehe je le saurais pour la prochaine ;D

Reply

Marsh Posté le 29-08-2002 à 16:49:03    

Lenoiche a écrit a écrit :

 
 
hehe je le saurais pour la prochaine ;D




 
est ce que vous pensez que c du a la taille du fichier source ????

Reply

Marsh Posté le 29-08-2002 à 17:29:06    

nan
explique et commente ton prog

Reply

Marsh Posté le 31-08-2002 à 01:24:55    

Code :
  1. while (feof(fichier1) != 1)

Eh ! Si la fin du fichier est atteinte, feof renvoie "différent de 0", pas "1" !

Code :
  1. while (!feof(fichier1) == 0)) //ça
  2. while (!feof(fichier1)) //ou ça


 

Code :
  1. while (feof(fichier1) != 1){
  2. getValeur(fichier1,temp);
  3. if(strcmp(var,temp) == 0){
  4. while(fgetc(fichier1) != '\n')
  5.  fgetc(fichier1);

Mais... tu fais fgetc après avoir atteint du fichier ?
Et ton while lit 2 caractères par boucle !
 
Tu devrais donner des noms plus explicites... Tout ça est trop vague:
constante -> qu'est qui est constant ?
ligne ? -> de quoi ?
getValeur ? -> quel genre de valeur ?  
 
Il est légitime de mettre plusieur instructions par ligne pour aligner des opérations similaires:

Code :
  1. getValeur(source2,var1); setValeur(resultat,var1,30); //ANRUE1//  
  2. getValeur(source2,var1); setValeur(resultat,var1,30); //ANRUE2//

Mais de toutes façon ça mériterait une fonction...


---------------
Bricocheap: Montage de ventilo sur paté de mastic silicone
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed