Bonjours tous le monde,

Je suis en stage et mon projet est de créer un petit programme en C.
Celui ci devra récupérer des références de produit qui ce trouve dans un fichier .txt sous cette forme la :

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
-----------------------------------------
|     date_cmde     | ref_article_elm_c |
-----------------------------------------
|        12/10/2006 | SE60116           |
-----------------------------------------
|        12/10/2006 | SE60117           |
-----------------------------------------
|        12/10/2006 | SE60118           |
-----------------------------------------
|        12/10/2006 | 51189             |
-----------------------------------------
|        12/10/2006 | V410512           |
-----------------------------------------
|        12/10/2006 | V410642           |
-----------------------------------------
|        12/10/2006 | V410512           |
-----------------------------------------
|        12/10/2006 | V410512           |
-----------------------------------------
|        12/10/2006 | V410642           |
-----------------------------------------
|        12/10/2006 | V410642           |
-----------------------------------------
|        12/10/2006 | CUSTOMS TARIFF    |
-----------------------------------------
Pour ensuite les rechercher sur le disque dur et les copier dans un dossier spécial.

Donc tous d'abord j'ai reformaté le fichier de référence pour simplifier la suite du programme
Voici le deuxieme fichier .txt avec les références sans présentation
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
SE60116 
SE60117
SE60118
51189
V410512
ETC...
Maintenant je dois chercher chacun des références sur le disque et les copier mais ca je n'y arrive pas !
Pour le moment j'ai un code qui marche mais seulement si on donne le nom de fichier exacte (Qui est de la forme si on prend la 1ere ref SE60116_Ind_A.pdf) et le dossier exacte ou rechercher.
Ce qu'il me faudrait c'est rechercher une partie du nom de fichier (Donc SE60116) dans un dossier puis tous ses sous dossier.

Donc voici mon Main.c

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
#include <stdio.h>
#include <stdlib.h>
#include "Fonction.h"
#include <windows.h>
#define TAILLE_MAX 10000
#define NOM_FICHIER_FINAL \
        "C:\\Documents and Settings\\BE\\Mes documents\\Jonathan\\ReferenceFormatees.txt" 
 
int main(int argc, char *argv[])
{
    FILE* fichierFinal = NULL;
 
    /*Ouverture de access pour recuperer les reference dans la base de donnéee 
    dans un fichier ReferenceNonFormatees.txt*/
    system("\"C:\\Documents and Settings\\BE\\Mes documents\\Jonathan\\Base GPS.mdb\"");
 
    /*creation d'un fichier ReferenceFormatees.txt formaté avec les nom de fichier(Reference)
    a rechercher, separé par des \n*/
    recuperationReferences();
 
 
/***********************Comptage nbLigne du fichier final.txt crée*************/
 
 
  fichierFinal = fopen(NOM_FICHIER_FINAL, "r");
  int nbLigne = 0;
  char chainenbligne[TAILLE_MAX] = "";
 
 
    if (fichierFinal != NULL)
    {
        while (fgets(chainenbligne, TAILLE_MAX, fichierFinal) != NULL)
        {
            nbLigne++;
        }
    }
    fclose(fichierFinal);
 
 
 
 
/***********************************Lecture des references*********************/
 
  fichierFinal = fopen(NOM_FICHIER_FINAL, "r");
  int i=0;
  char referenceARechercher[TAILLE_MAX] = "";
 
 
  for(i=0;i<nbLigne;i++)
  {
        if (fichierFinal != NULL)
        {
           fgets(referenceARechercher, TAILLE_MAX, fichierFinal);
        }
        virerN(referenceARechercher);
        rechercheDuFichier(referenceARechercher);
  }
 
  fclose(fichierFinal);
 
  /*Supression des fichier temp*/
  remove("C:\\Documents and Settings\\BE\\Mes documents\\Jonathan\\ReferenceNonFormatees.txt");
  remove("C:\\Documents and Settings\\BE\\Mes documents\\Jonathan\\ReferenceFormatees.txt");
 
  system("PAUSE");
  return 0;
 
}



Et mes fonction

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
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
#include "Fonction.h"
#define TAILLE_MAX 1000
#include <windows.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define NOM_FICHIER_IN \
        "C:\\Documents and Settings\\BE\\Mes documents\\Jonathan\\ReferenceNonFormatees.txt"
#define NOM_FICHIER_OUT \
        "C:\\Documents and Settings\\BE\\Mes documents\\Jonathan\\ReferenceFormatees.txt"
#define NOM_DOSSIER_TEMP \
        "C:\\Documents and Settings\\BE\\Mes documents\\Jonathan\\temp\\" 
 
/************************************************************************************************
**********************************Recuperation de la reference***********************************
************************************************************************************************/
 
void recuperationReferences()
{
  FILE* fichier_in = NULL;
  fichier_in = fopen(NOM_FICHIER_IN, "r");
  FILE* fichier_out = NULL;
  fichier_out = fopen(NOM_FICHIER_OUT, "w");
  int caractereActuel = 0, i=0, nbLigne = 1;
  char chainenbligne2[TAILLE_MAX] = "";
 
       /*********************************Comptage nbLigne**********************/
      if (fichier_in != NULL)
    {
        while (fgets(chainenbligne2, TAILLE_MAX, fichier_in) != NULL) // On lit le fichier tant qu'on ne reçoit pas d'erreur (NULL)
        {
            nbLigne++;
        }
    }
    printf("nbligne %d",nbLigne);
       /*******************************creation du final.txt*******************/    
    /* Si il y a au moin une reference */ 
    if(nbLigne>4)
    {
 
                /* On deplace le curseur de 151 caracteres pour arriver a la 1ere
               lettre de la 1ere reference */
                fseek(fichier_in, 151, SEEK_SET);
 
                /* On lit la 1ere reference */
                do
                {
                    caractereActuel = fgetc(fichier_in);
                    /* On suprime les espace, les | et les saut de ligne */
                    if(caractereActuel != ' ' && caractereActuel != '|' && caractereActuel != '\n')
                    fputc(caractereActuel, fichier_out);
                }  
                while (caractereActuel != '\n');
                fputs("\n",fichier_out);
 
                /* Lecture de toutes les autres references */
 
                for(i=0;i<(nbLigne/2)-3;i++) 
                /*(nbLigne/2)-3 car il faut allenver toutes les ligne avec des "-"
                donc on divise le nb de ligne par deux et - 3 pour les 2 lignes
                 de l'entete ainsi que la derniere ligne du fichier test.txt*/
                {
                    fseek(fichier_in, 65, SEEK_CUR);
                    do
                      {
                            caractereActuel = fgetc(fichier_in); // On lit le caractère
                            if(caractereActuel!= ' ' && caractereActuel!= '|' && caractereActuel!= '\n')
                            fputc(caractereActuel, fichier_out);
                      } while (caractereActuel != '\n');
                      fputs("\n",fichier_out);
                }
    }
    fclose(fichier_in);
    fclose(fichier_out);
}
 
 
 
 
 
 
 
 
 
 
/******************************************************************************
************recherche de la reference sur le disque et copie du fichier *******
******************************************************************************/
 
void rechercheDuFichier(char* referenceARechercher)
{
 
     HANDLE hFind;
     WIN32_FIND_DATA FindData;
     char LienDuDossierTemp[TAILLE_MAX] = NOM_DOSSIER_TEMP;
     int rechercheOK = 0;
     char Dossier[TAILLE_MAX] = "M:\\BUREAU D ETUDES\\Plans SERV\\SE\\SE904";
     char LienDuFichier[TAILLE_MAX] = "M:\\BUREAU D ETUDES\\Plans SERV\\SE\\SE904\\";
 
     /* Je recopie la reference a rechercher dans le lien du fichier pour 
     obtenir le chemin du fichier a copier*/
     strcat(LienDuFichier, referenceARechercher);
 
     /* Je recopie la reference a rechercher dans le lien du dossier temp
     pour le collé */     
     strcat(LienDuDossierTemp, referenceARechercher);
 
     // Change de dossier
     SetCurrentDirectory (Dossier);
 
    // Début de la recherche
    hFind=FindFirstFile (referenceARechercher, &FindData);
    if (hFind!=INVALID_HANDLE_VALUE)
    {
          // Si le fichier trouvé n'est pas un dossier mais bien un fichier, on affiche son nom
          if (!(FindData.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY))
          {
          copieFichier(LienDuFichier,LienDuDossierTemp);
          }
          // Fichiers suivants
          while (FindNextFile (hFind, &FindData))
          {
               if (!(FindData.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY))
               {
                    MessageBox (NULL, FindData.cFileName, "Fichier", MB_ICONINFORMATION);
               }
           }
    }
       // Fin de la recherche
       FindClose (hFind);
}
 
 
 
 
 
 
 
 
/******************************************************************************
****************Supression de \n de la chaine pour la recherche****************
*******************************************************************************/
 
void virerN(char * chaine) 
{
  int i = 0 ;
  char * ch = chaine ;
  while(*ch != '\n') {
    ch++ ;
  }
  *ch = '\0' ;
}
 
 
 
 
 
 
/******************************************************************************
***********************************Copie de fichier****************************
*******************************************************************************/
 
int copieFichier(char const * const LienDuFichier, char const * const LienDuDossierTemp)
{
   FILE* fSrc;
   FILE* fDest;
   char buffer[512];
   int NbLu;
 
    /*creation du dossier ou stocker les fichiers trouver*/
    CreateDirectory("C:\\Documents and Settings\\BE\\Mes documents\\Jonathan\\temp",NULL); 
 
   if((fSrc=fopen(LienDuFichier, "rb")) == NULL)
   {
      return -1;
   }
 
   if((fDest=fopen(LienDuDossierTemp, "wb")) == NULL)
   {
      fclose(fSrc);
      return -2;
   }
 
   while((NbLu=fread(buffer, 1, 512, fSrc)) != 0)
   {
      fwrite(buffer, 1, NbLu, fDest);
   }
 
   fclose(fDest);
   fclose(fSrc);
   return 0;
}



Merci d'avance a ceux qui m'aiderons