probléme programmation C
Répondre à la discussion
Affichage des résultats 1 à 15 sur 15

probléme programmation C



  1. #1
    MANTA..

    probléme programmation C


    ------

    Bonjour,

    J'ai besoin de votre aide car je dois faire un programme qui coupent les colonne d'un fichier.

    Par exemple si l'utilisateur donne 5 et que le fichier contient;

    123456789xxxxxxxxxxxxxxxxxxxxx xxxxxxxxxxxxxxx
    123456789xxxxxxxxxxxxxxxxxxxxx xxxxxxxxxxxxxxx
    123456789xxxxxxxxxxxxxxxxxxxxx xxxxxxxxxxxxxxx
    123456789xxxxxxxxxxxxxxxxxxxxx xxxxxxxxxxxxxxx

    le fichier de destination contiendra

    12345
    12345
    12345
    12345

    J'ai réussi à recopié le contenu du fichier source mais je ne sais pas comment dire au programme, de passer à la ligne du dessous.

    Merci d'avance pour votre aide

    -----
    Dernière modification par MANTA.. ; 28/09/2011 à 16h53.

  2. #2
    invite4492c379

    Re : probléme programmation C

    Hello,

    quel est ton code ? Qu'utilises-tu comme primitives IO ?

    Sinon si tu es sous unix tu as le tool cut ...

  3. #3
    Jack
    Modérateur

    Re : probléme programmation C

    Il suffit de lire le fichier ligne par ligne, par exemple à l'aide de la fonction fgets pour la lecture d'une ligne, puis de traiter la ligne après chaque lecture à l'aide de la fonction strchr par exemple.

    A+
    Dernière modification par Jack ; 28/09/2011 à 18h42.

  4. #4
    MANTA..

    Re : probléme programmation C

    Pour l'instant mon code c'est ca:

    Code:
    void retourn_n_colonne (unsigned int n) 
    {
         FILE* fichier = NULL;
        FILE* fichiers = NULL;
    
        int caractereActuel = 0;
        int compt=0;
     
        fichier = fopen("test.txt", "r");
         fichiers = fopen("test1.txt", "w");
    
     
        if (fichier != NULL)
        {
            caractereActuel = fgetc(fichier); 
    
    
        
        while (caractereActuel != EOF /*&& compt<45*/) 
        {
          if (compt<=n) je lui dis si le compteur n'est pas arrivé a n, il ecrit le caractere dans le fichier
          {
            fputc(caractereActuel, fichiers);
          }
          else
          {
            while(caractereActuel!=('\n'))  sinon tant que le caractere lu n'est pas \n on continue de lire
            {
          caractereActuel = fgetc(fichier); 
              compt=0;
            }
        }
     
        fclose(fichier);
        fclose(fichiers);
        }
    
    }
    }
    Pense à ajouter les balises code la prochaine fois
    Dernière modification par Jack ; 29/09/2011 à 11h58. Motif: Ajout des balises code

  5. A voir en vidéo sur Futura
  6. #5
    Jack
    Modérateur

    Re : probléme programmation C

    Pas très efficace de lire le fichier caractère par caractère, mais bon ...

    Sinon, quel est le problème exactement?
    Ca donne quoi en debogant en pas à pas?
    Tu développes avec quoi comme compilateur?

    A+

  7. #6
    invite4492c379

    Re : probléme programmation C

    En plus des questions de Jack, pourquoi n'utilises-tu pas fscanf ?
    fscanf te permettra de récupérer une ligne entière de ton fichier dans un char*. Ce serait beaucoup plus simple.

    S'agit-il d'une contrainte d'exercice ?

  8. #7
    MANTA..

    Re : probléme programmation C

    Code:
     #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    
    int main(int argc, char *argv[])
    {
    
         FILE* fichier = NULL;
        FILE* fichiers = NULL;
    
        char caractereActuel = 0;
        int compt=0;
     
        fichier = fopen("test.txt", "r");
         fichiers = fopen("test1.txt", "w");
    
     
        if (fichier != NULL)
        {
            caractereActuel = fgetc(fichier); 
    
    
    	
    	while (caractereActuel != EOF && compt<45) 
    	{
    	  if (compt<=(atoi(argv[1]))) ---> (atoi(argv[1]))  ca me convertit l'argument passé en parametre en int
    	  {
    	    fputc(caractereActuel, fichiers);
                compt=compt+1;
    	  }
    	  else
    	  {
    	    while(caractereActuel!=('\n')) si on est pas arrivé a arg on continue à lire mais on écrit pas... si il y a un passage de ligne on met compt à zero et on retourne au premié while
    	    {
    	  caractereActuel = fgetc(fichier); 
      	  
    	    }
    	      compt=0;
    	}
     
    	fclose(fichier);
    	fclose(fichiers);
        }
    
    }
    return 0;
    
    }

  9. #8
    MANTA..

    Re : probléme programmation C

    Le code que j'ai donner au dessus (et que je n'arrive pas a supprimer) ne se lance pas du tout, à chaque fois il me met "*** glibc detected *** ./tp3: double free or corruption (top): 0x095cc008 *** etc..." ou "Erreur de segmentation"

    Je ne sais pas compiler pas à pas. Je compile en faisant gcc -g -Wall -Werror -ansi -pedantic -o tp3 tp3.c. et j'execute via gdb ou en tapant ./tp3

    Je ne connaissait pas fscanf , je vais essayer en l'utilisant. Je vous tient au courant.

    Merci
    Dernière modification par MANTA.. ; 29/09/2011 à 13h08.

  10. #9
    Jack
    Modérateur

    Re : probléme programmation C

    fscanf ne lit pas forcément une ligne entière. Il est préférable d'utiliser fgets.

    Je ne sais pas compiler pas à pas
    On ne compile pas en pas à pas, mais on peut exécuter en pas à pas grâce à gdb notamment. Tu devrais utiliser un IDE comme code::blocks, ça pourrait t'aider.

    A+

  11. #10
    invite4492c379

    Re : probléme programmation C

    Citation Envoyé par Jack Voir le message
    fscanf ne lit pas forcément une ligne entière. Il est préférable d'utiliser fgets.
    (...)
    A+
    Évidemment Au temps pour moi ...

  12. #11
    Jack
    Modérateur

    Re : probléme programmation C

    Ton programme est tellement mal indenté qu'on ne voyait pas que les fclose étaient très mal placés.

    C'est tout de même plus visible comme çà:
    Code:
    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    
    int main(int argc, char *argv[])
    {
    
        FILE* fichier = NULL;
        FILE* fichiers = NULL;
    
        char caractereActuel = 0;
        int compt=0;
     
        fichier = fopen("test.txt", "r");
        fichiers = fopen("test1.txt", "w");
    
     
        if (fichier != NULL)
        {
            caractereActuel = fgetc(fichier); 
            while (caractereActuel != EOF && compt<45) 
            {
                if (compt<=(atoi(argv[1])))// ---> (atoi(argv[1]))  ca me convertit l'argument passé en parametre en int
                {
                    fputc(caractereActuel, fichiers);
                    compt=compt+1;
                }
                else
                {
                    while(caractereActuel!=('\n'))// si on est pas arrivé a arg on continue à lire mais on écrit pas... si il y a un passage de ligne on met compt à zero et on retourne au premié while
                    {
                        caractereActuel = fgetc(fichier); 
                    }
                    compt=0;
                } 
                fclose(fichier);
                fclose(fichiers);
            }
        }
        return 0;
    }

  13. #12
    MANTA..

    Re : probléme programmation C

    J'ai essayer avec fgets mais ca me recopie juste le contenu du fichier source dans le fichier de destination. Après étant donné que je ne connsaissait pas du tout fgets il se peut que ca soit moi qui l'ai mal utilisé..Je pense avoir compris ce qui ne va pas mais je ne sais pas comment lui dire de lire la ligne suivante après avoir fait un fgets
    Code:
    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    
    int main(int argc, char *argv[])
    {
    
        FILE* fichier = NULL;
        FILE* fichiers = NULL;
    
    
    
    
     char caractereActuel[5];
    
        fichier = fopen("test.txt", "r");
        fichiers = fopen("test1.txt", "w");
    
     
        if (!feof(fichier))
        {
          
          while (!feof(fichier))
          {
    	fgets(caractereActuel,5,fichier); 
    	fputs (caractereActuel, fichiers);
     
    	}
    	fclose(fichier);
    	fclose(fichiers);
        }
        return 0;
    }
    Dernière modification par MANTA.. ; 03/10/2011 à 13h24.

  14. #13
    invite4492c379

    Re : probléme programmation C

    En gros tu lis le fichier d'entrée 4 par 4 avec ton fgets et ce que tu lis tu le recopies en sortie : tu copie donc tout le contenu de l'entrée vers la sortie. Il faudrait que tu lises toutes une lignes avec fgets et que tu n'en garde que le 5 premiers caractères.
    Tu voies comment faire ?

  15. #14
    Jack
    Modérateur

    Re : probléme programmation C

    la soultion se trouvait dès le message #3.

    A+

  16. #15
    MANTA..

    Re : probléme programmation C

    Citation Envoyé par photon57 Voir le message
    En gros tu lis le fichier d'entrée 4 par 4 avec ton fgets et ce que tu lis tu le recopies en sortie : tu copie donc tout le contenu de l'entrée vers la sortie. Il faudrait que tu lises toutes une lignes avec fgets et que tu n'en garde que le 5 premiers caractères.
    Tu voies comment faire ?
    CA Y'EST CA MARCHE, Merci infiniment à vous 2!!!!!!!!! En voulant répondre à ta question photon57 j'ai trouvé la methode à utilisé ensuite il ne me restait plus qu'a faire quelque test pour bien comprendre ce que fais la fonction fgets et a utiliser la fonction strchr donné par jack dans le message #3 pour mettre en application ce que j'avais en tête . C'EST NICKEL , ENCORE MERCI A VOUS 2!!!!!!!!!!!
    Dernière modification par MANTA.. ; 03/10/2011 à 18h33.

Discussions similaires

  1. Probleme de programmation cn
    Par invite7b760caf dans le forum Logiciel - Software - Open Source
    Réponses: 0
    Dernier message: 29/03/2011, 19h32
  2. Probleme programmation
    Par invite94502ba2 dans le forum Programmation et langages, Algorithmique
    Réponses: 2
    Dernier message: 08/01/2011, 17h43
  3. problème de programmation
    Par invitec93fa417 dans le forum Programmation et langages, Algorithmique
    Réponses: 8
    Dernier message: 12/12/2010, 09h36
  4. probleme programmation C
    Par invitebceb089b dans le forum Programmation et langages, Algorithmique
    Réponses: 8
    Dernier message: 13/11/2010, 13h17
  5. Probleme de Programmation CN
    Par invitec07cc70f dans le forum Technologies
    Réponses: 2
    Dernier message: 10/02/2007, 16h54