Bonjour, j'ai encore un pb avec mon fgets.
J'ai N fichiers qui s'appellent Particle1.txt, Particle2.txt,..., ParticleN.txt. Tous ces fichiers ont 28 colonnes et 72001 lignes. La 1e colonne de chacun de ces fichiers est identique. Ce que je désire faire est tout simple : récupérer les colonnes 4 à 28, et calculer les moyennes (donc j'additionne toutes les 4e colonnes entre elles, toutes les 5e colonnes entre elles etc puis je divise par N). D'où l'utilisation de mon fgets.
J'ai un autre fichier qui s'appelle MeanPTm.txt.
Ce que je veux en sortie :
1e colonne : la 1e colonne d'un fichier Particle*.txt (qui est la même pour tous les fichiers)
2e et 3e colonne : les 1e et 2e colonnes du fichier MeanPTm.txt
colonnes 4 à 28 : les moyennes que j'ai calculées.

Voici 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
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
 
#include<stdio.h>
#include<stdlib.h>
#include<assert.h>
#include<string.h>
 
void Pause(void)
{
  printf("Pause : Press return to continue\n");
  getc(stdin);
}
 
int main()
{
  int N=2; // mon nombre de particules
  int i,j,k; // des compteurs
  FILE * pfile1=fopen("MeanPTm.txt","r");
  FILE * pfile2=fopen("Mean.txt","w+"); // mon fichier de sorties
  char * NameFileOutput[N];
  FILE ** fileOutput=malloc(N*sizeof(*fileOutput));
  assert(fileOutput!=NULL);
 
// ici je cree mes strings "Particle1.txt", "Particle2.txt", etc...
  for(i=0;i<N;++i)
  {
    char s[]="Particle";
    char buf[5];
    sprintf(buf,"%u",i+1);
    strcat(s,buf);
    strcat(s,".txt");
    NameFileOutput[i]=strdup(s);
    printf("name = %s\n",NameFileOutput[i]);
    fileOutput[i]=fopen(NameFileOutput[i], "r");
    assert(fileOutput[i]!=NULL);
  }
 
  double a,b,c;
  char line1[35000],line3[35000];
  double tab[25],theta; // theta : variable qui va recuperer la valeur de ma 1e colonne de mon fichier Particle*.txt
  for(i=0;i<25;++i) tab[i]=0.;
  char * line32=malloc(35000*sizeof(*line32));
  assert(line32!=NULL);
 
  for(i=1;i<=72001;i++)
  {
    printf("i = %d\n",i);
    fgets(line1,sizeof line1, pfile1);
    sscanf(line1,"%lf%lf%lf",&a,&b,&c);
    printf("%f\t%f\t%f\n",a,b,c);
 
      for(j=0;j<N;++j)
      {
        fgets(line3,sizeof line3, fileOutput[j]);
	assert(fgets!=NULL);
	printf("line3 = %s\n",line3); // l'erreur est ici : line3 est nulle !!
 
	strcpy(line32,line3);
	theta=strtod(line32,&line32);
	strtod(line32,&line32);
	strtod(line32,&line32);
	for(k=0;k<25;++k) tab[k]+=strtod(line32,&line32);	
      }
 
      for(k=0;k<25;++k) tab[k]/=N;
      fprintf(pfile2,"%14.6le\t%14.6le\t%14.6le",theta,a,b);
      for(k=0;k<25;++k) fprintf(pfile2,"\t%14.6le",tab[k]);
      fprintf(pfile2,"\n");      
  }
 
  fclose(pfile1); fclose(pfile2);
  for(i=0;i<N;++i) fclose(fileOutput[i]);  
 
  free(fileOutput); fileOutput=NULL;
  free(line32); line32=NULL;
 
  return EXIT_SUCCESS;
}
Certes, le code n'est peut-être pas le mieux écrit qui soit, mais j'aimerais savoir pourquoi est-ce que line3 est nulle ?

Merci.