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 :

Concaténation fichiers


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    18
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2010
    Messages : 18
    Par défaut Concaténation fichiers
    Bonjour,

    Je souhaite ouvrir plusieurs fichiers txt afin de concaténer leurs données (et en les modifiant un petit peu - changement et ajout de caractères) dans un même fichier. Mon programme de lecture+modification fonctionne sans problème lorsque je ne lis qu'un fichier, mais lorsque j'en lis plusieurs, la lecture se termine par un "segmentation fault".
    Voici le 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
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    #include <string.h>
    #include <stdio.h>
    #include <dirent.h>
    #include <stdlib.h>
     
    int main(void)
    {
      char *suiteChaine;
      int cpt=0;
      int tpc=0;
      DIR * rep = opendir("/home/mehdi/essai");
     
      if (rep != NULL)
        {
          struct dirent * ent;
     
          while ((ent = readdir(rep)) != NULL)
    	{
    	  cpt++;
    	  suiteChaine = strstr(ent->d_name,"Vloc_Rloc");
    	  if (suiteChaine != NULL)
    	    {
    	      tpc++;
    	    }
     
    	}
     
          closedir(rep);
        }
     
      int i;
      char fname[100];
      FILE* suite=fopen("finish.dat","w");
     
      for (i=1;i<=tpc;i++)
        {
          sprintf(fname,"/home/mehdi/essai/Vloc_Rloc.OUT.%d",i);
          FILE* vlocrloc=fopen(fname,"r");
          FILE* traitement=fopen("essai.dat","w+");  
     
          int c_lu;
          int c_ecrit;
          int last=0;
     
          while ((c_lu = fgetc(vlocrloc)) != EOF)
    	{
    	  c_ecrit = c_lu;
    	  if (c_lu == '!')
    	    {
    	      c_ecrit = ' ';
    	    }
    	  else
    	    if (c_lu == '=')
    	      {
    		c_ecrit = ' ';
    	      }
    	    else
    	      if (c_lu == '-')
    		{
    		  if(last == 'H') 
    		    {
    		      putchar(' ');
    		      putc(' ',traitement);
    		    } 
    		}
    	      else    
    		if (c_lu == 'D')
    		  {
    		    c_ecrit = 'e';
    		  }
    	  putchar(c_ecrit);
    	  putc(c_ecrit,traitement);
    	  last = c_lu;
    	}
     
          fclose(vlocrloc);      
          fclose(traitement);
     
        }
     
      fclose(suite);
      return 0;  
    }
    Explication: La première partie permet de compter le nombre de fichiers Vloc_Rloc.OUT dans mon répertoire essai/.
    Ensuite, je lis+modifie les fichiers Vloc_Rloc.OUT.x un par un, et je les écris chacun à leur tour dans le fichier traitement.

    Qu'en pensez vous? Est-ce que je dois plutôt tous les lire et les modifier avant d'écrire?

    PS: il me semble que le putchar ne rencontre pas de problème, puisque le message segmentation fault apparaît après l'écriture dans le flux de sortie standard (la lecture et la modification apparaissent bien sur mon terminal). L'origine serait donc plutôt le putc, donc l'écriture dans traitement.

  2. #2
    Membre Expert
    Avatar de muad'dib
    Homme Profil pro
    Développeur Java
    Inscrit en
    Janvier 2003
    Messages
    1 013
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2003
    Messages : 1 013
    Par défaut
    Petite question : il te sert à quoi le pointeur sur FILE* suite ?

    De plus tu ne testes jamais si l'ouverture de tes fichiers a fonctionné
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    FILE* f = fopen(..);
    if(f != NULL) { ... }
    Ça enlèvera des bugs potentiels.

    Je peux pas beaucoup plus t'aider j'ai pas de compilateur C à disposition.

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    18
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2010
    Messages : 18
    Par défaut
    Bonjour muad' dib,

    J'ai oublié d'enlever le FILE *suite! En fait, après avoir écrit mes données dans mon fichier "traitement" (si j'y parviens!), je les lis (avec un scanf) pour ensuite ne sélectionner que certaines informations qui seront écrites dans mon fichier "suite".
    Je vais rajouter de ce pas le test d'ouverture des fichiers.

    Relance...

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

Discussions similaires

  1. [Batch] Concaténation Fichiers avec suppression premieres lignes
    Par Tequilapaf dans le forum Scripts/Batch
    Réponses: 3
    Dernier message: 09/04/2009, 12h35
  2. Concaténer fichiers en Perl
    Par Arg0l dans le forum Langage
    Réponses: 4
    Dernier message: 09/03/2009, 16h10
  3. concaténation fichier video
    Par kain31 dans le forum C++
    Réponses: 3
    Dernier message: 22/03/2007, 14h50
  4. [VBA-E]Concaténer fichier texte
    Par illight dans le forum Macros et VBA Excel
    Réponses: 19
    Dernier message: 11/05/2006, 10h16
  5. concaténer fichiers texte ligne par ligne
    Par tiboleo dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 16/03/2006, 13h45

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