11 Replies Latest reply: Dec 30, 2014 4:40 AM by Julien LEJEUNE RSS

    Chargement incremental fichier Excel

      Bonjour à tous ,

      J'ai besoin d'aide.

      Je dispose d'un répertoire  C:\\Doc\History

      composé des fichiers Excel :

      20141204-TeamControl.csv

      20141204-Control.csv

      20141205-TeamControl.csv

      20141205-Control.csv

      20141208-TeamControl.csv

      20141208-Control.csv

       

      Pour info ses fichiers sont journaliers. Moi je ne veux que les fichiers -Control.csv.

      Les Teamcontrol.csv sont à ignorer.

       

      Je veux intégrer les fichiers -Control.csv

      La règle de gestion est la suivante : intégrer le dernier fichier -Control.csv dans mon modèle QVW en ne prenant qu'en compte que les ajouts et les modifications apporter au fichier de la veille.

       

      Pouvez m'aider à créer la boucle qui me permettra de l’intégrer à mon modèle.

      Cordialement,

        • Re: Chargement incremental fichier Excel
          Almamy DIABY

          SET ThousandSep=' ';

          SET DecimalSep=',';

          SET MoneyThousandSep=' ';

          SET MoneyDecimalSep=',';

          SET MoneyFormat='# ##0,00 €;-# ##0,00 €';

          SET TimeFormat='hh:mm:ss';

          SET DateFormat='DD/MM/YYYY';

          SET TimestampFormat='DD/MM/YYYY hh:mm:ss[.fff]';

          SET MonthNames='janv.;févr.;mars;avr.;mai;juin;juil.;août;sept.;oct.;nov.;déc.';

          SET DayNames='lun.;mar.;mer.;jeu.;ven.;sam.;dim.';

           

           

           

           

           

          LET DATE_JOUR = PurgeChar(Date(Today(),'YYYY/MM/DD'),'/'); ///variable permettant la date du jour au format AAAAMMJJ

           

           

           

           

          //// Chargement du dernier fichier. le fichier qui correspond au fichier de DATE_JOUR

          Control:

          LOAD

          champ1,

          champ2,

          champN

          from  C:\Desktop\$(DATE_JOUR)-Control.csv

             (txt, codepage is 1252, embedded labels, delimiter is ';', msq);

           

           

           

           

          /// ajouter le dernier fichier aux autres deja charger. cela implique qu'on a

          // deja créer  un qvd qui renferme les données des autres jours

          // 'dossier qvd\Control.qvd' représente le fichier qvd qui contient les données  des autres jours

           

           

          IF  FileSize('dossier qvd\Control.qvd')> 0 THEN

           

           

                  Concatenate

                

            LOAD

            champ1,

            champ2,

            champN

            From [dossier qvd\Control.qvd](qvd);

           

           

          ENDIF

           

           

           

           

          STORE * FROM Control into 'dossier qvd\Control.qvd';

          • Re: Chargement incremental fichier Excel

            Merci pour votre réponse.

            Le script marche. Mais il y a un petit bémol. c'est un cas de figure que je n'avais pas prévu.

            Mon appli se recharge chaque 1 heure et  le Fichier Xls du jour est Présent dans le répertoire à partir de 16 H.

            Donc avant cette heure (16 Heure ) le script actuel ne fonctionne pas. Puisque  à la date du jour (20141208) il n'y pas de fichier avant 16 h.

            Dc en attendant l'appli doit pouvoir fonctionner avec le dernier fichier control.XLS présent dans le repertoire (c'est à dire 20141207-Control.csv.

            Avec le script tant que le fichier du jour n'est pas dans le répertoire , l'application se plante.

            • Re: Chargement incremental fichier Excel

              Merci encore Almany,

              Mais à partir de 16 h qaund mon fichier du jour (20141208) sera présent dans mon repertoire est ce que le script sera toujours opérationnel ?

              Parce que je retiens le fichier de la veille (ou le dernier fichier le plus recent ) dans le cas où mon fichier du jour n'est pas encore disponible .

              • Re: Chargement incremental fichier Excel

                Merci encore,

                Mais j'ai déjà utilisé cette technique.

                Mais le client vient de me dire que le principe de fichier journalier n'est pas toujours respecté.

                par exemple pour le mois de novembre , le dernier fichier date du 26 novembre et le premier fichier de décembre date du 01  Décembre, Par ailleurs ya de fichier en date du 3 Décembre.

                Donc là je suis en train de créer une variable qui va me stocker la date du fichier le plus récent.

                Par exemple aujourd'hui il n'aura pas de fichier pareil pour demain . Pour que l'appli tourne il faut charger le dernier fichier présent dans le répertoire. (Si le prochain fichier est celui du 20 Décembre par exemple le fichier à charger pour que l'application tourne devra être celui du 07 décembre).

                Encore désolé pour ces imprécisions concernant les règles de gestions.

                • Re: Chargement incremental fichier Excel

                  Jeu de données.

                  Création du DVD à partir de 20141201.

                  Première de gestion : On intègre le fichier du jour

                  Deuxième de gestion : Si le fichier du jour n'est pas générer dans le répertoire on récupère le fichier le plus récent . c'est à dire 20141206.

                  • Re: Chargement incremental fichier Excel

                    Oui. Le but c'est de récuperer le dernier fichier. si c'est le fichier du jour tant mieux sinon on prend le dernier fichier le plus récent.

                    Je réflechis à la création d'un script qui balaie toute les dates et qui retient que le dernier fichier.

                      • Re: Chargement incremental fichier Excel

                        Voici un script qui te permettra de créer un QVD du dernier fichier csv à ta dispo  :

                         

                        //Démarrage de la boucle For Each

                        For Each File in FileList('$(vCheminDataSource)\Nom_Fichier*.csv')

                         

                         

                        fileTable:

                        LOAD FileName('$(File)') as Filename,

                             FileBasename() as FileBasename,

                             FileExtension() as FileExtension,

                             FileDir() as FileDir,

                             //FilePath() as FilePath,

                             FileSize('$(File)') as FileSize,

                             FileTime('$(File)') as FileTime

                             FROM '$(File)';

                        Next File

                         

                         

                         

                         

                        //Création d'une table temporaire trier par Date-heure de création descroissante

                        Table_TMP:

                        LOAD

                          Filename,

                          FileBasename,

                          FileTime as FileTime,

                        RESIDENT fileTable

                        ORDER BY FileTime desc;

                         

                         

                        //Déclaration des variables : nom complet (avec extension) et nom du fichier

                        LET vLatestFileWithExtension = peek('Filename',0,'Table_TMP');

                        LET vLatestFile = peek('FileBasename',0,'Table_TMP');

                         

                         

                         

                        //Suppresion de la table temporaire

                        DROP TABLE Table_TMP ;

                         

                         

                        //Création du QVD se basant sur le dernier fichier CSV mis à disposition

                        [$(vLatestFile)]:

                          LOAD *

                          FROM $(vCheminDataSource)\$(vLatestFileWithExtension)

                          (txt, unicode, embedded labels, delimiter is ';', msq);

                         

                          //Appelle fonction pour affichage du tableau récap

                          CALL Recapitulatif ('$(vLatestFile)');

                         

                          //Stockage du QVD créé

                          STORE [$(vLatestFile)] INTO $(vCheminQVD)\$(vLatestFile).qvd;

                         

                         

                          //Suppression de la table

                          DROP Table [$(vLatestFile)];