Bonjour a tous,

Beaucoup de gens m'ont aidé sur le sujet suivant mais j'ai encore quelques soucis:

Je vais essayer d'etre très précis sur mon travail et clair sur mon objectif.

Je veux dans un premier temps lire la totalité d'un fichier txt. Ce fichier est divisé en plusieurs gros blocs avec une multitude d'informations que je ne souhaite pas toute sélectionner mais avec des tests je détermine le commencement du bloc puis je sélectionner par des myens qui seront dans mon code.Je souhaite donc lire ce txt, déterminer le commencement du bloc, inscire les informations souhaitées dans des structures.L'identifiant de la structure sera stocké dans une table de hachage pour me permettre de créer des liens entre mes structures (chaque identifiant donc commencement de bloc de structure peut être en lien avec une autre et je souhaite créer des liens).

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
84
85
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
 
/***************************Structure applications*****************************************/
typedef struct applications
{
    char id     [20];
    char descr  [20];
    char owner  [20];
    char preid  [20];
}applications;
 
 
/**************************Nombre de ligne du txt********************************/
 
int cpteLignes(FILE*batch){
char ligne_lue[255];
int nb_lignes=0;
                while(fgets(ligne_lue, 512, batch) != NULL)
                    {
                        printf("\t%s", ligne_lue);
                        nb_lignes++;
                    }printf("le fichier comporte %d lignes\n", nb_lignes);
                    return nb_lignes;
//                  rewind (ligne_lue);
                    fclose(batch),batch=NULL;
 
/**************************Fonction main**************************************************/
 
int main()
{
char ligne_lue[256];
char tableau1 []= "ADSTART";
char tableau []= "PREADID";
struct applications tab[1000];
int n=0;
int i=0;
struct applications applications = {"jean", "pierre", "paul","jack"};
 
 
FILE*batch;
batch=fopen("D:\\Users\\xxx\\Desktop\\xxx\\xxx\\xxx.txt","r");
 
FILE*extract;
extract=fopen("D:\\Users\\xxx\\Desktop\\xxx\\xxx\\xxx.txt","w");
 
/****************************Test de lecture fichier*****************************************/
 
        if (batch==NULL)
        {
		fputs("erreur a l'ouverture du fichier\n",stderr);
		return EXIT_FAILURE;
        }
/**************************Tests & Ecriture dans les structures******************************/
            n=cpteLignes;
                    for(i=0;i<n;i++)
                    {
                       fscanf(batch,"%s",&ligne_lue);
                           if(strcmp(ligne_lue,tableau1)==0)
                            {
                                fscanf(batch,"%*[^\n]\n  %*[^(](%99[^)])", &tab[i].id);
                                fscanf(batch,"%*[^\n]\n  %*[^(](%99[^)])", &tab[i].descr);
                                fscanf(batch,"%*[^\n]\n  %*[^(](%99[^)])", &tab[i].owner);
                                fscanf(batch,"%*[^\n]\n  %*[^(](%99[^)])", &tab[i].preid);
                                break;
                            }
 
                                        /*if (strcmp(ligne_lue,tableau)==0)
                                            {
                                                do
                                                {
                                                    fscanf(batch,"%*[^(](%99[^)])", &tab[i].preid);
                                                    break;
                                                }while (strcmp(ligne_lue,tableau1)==0);*/
                    }
printf("%s\n", tab[i].id);
printf("%s\n", tab[i].descr);
printf("%s\n", tab[i].owner);
printf("%s\n", tab[i].preid);
 
fclose(batch),batch=NULL;
return 0;
 
}
Pour la détermination d'un bloc, cela fonctionne très bien.Je vois en mode debogage que la lecture s'éxécute, j'arrive avec la condition a remplir une structure (break sur la ligne) (pas encore de manière optimale a cause du placement des informations dans le fichier mais j'y travaille).

Mes interrogations sont les suivantes :

1)Quand je ne met pas de break, cela fait fermé codeblock, le doublon fscan est-il une erreur pour reprendre la lecture ou je l'ai laissé après l'attribution dans la structure?
2)Je souhaite par la suite prendre id de la structure, le transformé en key puis stocké dans une table de hashage pour créé une sort de key plus data qui me permettra de lier les structures ensembles mais je ne vois pas comment m'y prendre

Merci