Bonjour,
dans le cadre d'un projet , je dois lire un fichier texte et récupérer certaines informations.
Mon fichier à traiter possède ce format là :
Je lis une première fois mon fichier afin de compter le nombre de séquences qu'il contient ( je compte les lignes commençant par >).Puis je ferme le fichiers. Je créé un tableau de chaines de caractères ayant la taille nécessaire. Je réouvre mon fichier et je récupère que les lignes différentes de >.... et je les stocke dans mon tableau.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13 >Sequence 1 cccaaaaccactcaaaccattactcaaaccccaattcccaatatcgtcaa tcaaacaacggcaacagaactagtaacccgtttaaagataataaaacaaa >Sequence 2 ttatgggctacacaacatagaagaagaaaaactcacccaacactgcctta ccaacttaaattttcaggcacccgcctcaggaacccaacaggatacataa >sequence 3 atcctaccacacatgcaacatcccttccatacataactctaaacctccaa caaaaattccctttatcatttcttatcgatacaggatccaataactcctt >Sequence 4 cattgacccagaatctgcaaaccaactagagtgcacaattctaccaacat ccacttcaattacaacagcattaaatagtttcaaaattgaagaaaaggca atattcccaatgccacccgagttcaaaaccgaaggtcaaattaccctact
Le problème c'est je ne peux pas réouvrir une seconde fois mon fichier, et cela même si je l'ai bien fermé. J'ai une erreur d'exécution " segmentation fault" ou alors "bus error" ( je l'ai testé sous un autre pc).
Voici mon code :ce code ne récupère pas les séquences à la deuxième lecture, c'est juste un fichier test qui fait deux lecture à suite.
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 #include <stdio.h> #include <string.h> /* Nom : lecturefasta.c */ /* Date : 12 octobre 2006 */ /* But : lecture d'un fichier fasta et récupération des séquences */ main(){ FILE* fichier_entree; char* ligne; char* sequence=""; /* initialisation de la séquence */ int nbseq=0; /* Ouverture en lecture seulement du fichier à traiter */ fichier_entree = fopen("fasta.txt","r"); /* Parcours du fichier jusqu'à la fin */ while(!feof(fichier_entree)){ /* lecture ligne par ligne*/ ligne=fgets(ligne,1000,fichier_entree); /* Traitement des lignes si ce n'est pas la fin du fichier */ if (ligne!=NULL){ /* détection d'une ligne de commetaire */ if(strchr(ligne,'>')!=NULL){ nbseq++; printf("Ligne de commentaire\n"); }else{ printf("Séquence\n"); } } //printf("ligne : %s \n",ligne); } printf("Le fichier contient %d sequence\n",nbseq); /* Fermeture du fichier */ fclose(fichier_entree); nbseq=0; /* Ouverture en lecture seulement du fichier à traiter */ fichier_entree = fopen("fasta.txt","r"); /* Parcours du fichier jusqu'à la fin */ while(!feof(fichier_entree)){ /* lecture ligne par ligne*/ ligne=fgets(ligne,1000,fichier_entree); /* Traitement des lignes si ce n'est pas la fin du fichier */ if (ligne!=NULL){ /* détection d'une ligne de commetaire */ if(strchr(ligne,'>')!=NULL){ nbseq++; printf("Ligne de commentaire\n"); }else{ printf("Séquence\n"); } } //printf("ligne : %s \n",ligne); } printf("Le fichier contient %d sequence\n",nbseq); /* Fermeture du fichier */ fclose(fichier_entree); }
Si je fais une seule lecture tout fonctionne correctement , enfin chez moi , mais deux lecture de fichiers à la suite non ...
pouvez vous me dire pourquoi et comment résoudre ce problème?
merdi d'avance.
Partager