4 Replies Latest reply: Dec 5, 2016 8:51 AM by Yann Antoine RSS

    concaténer 2 lignes provenant d'un fichier plat

    Yann Antoine

      Bonjour à tous,

       

      J'ai une problématique, je dois réaliser une comparaison de données logistique provenant de plusieurs outils différent.

      L'un des outil me met à disposition des fichiers plats (type CSV).

      Le problème est que dans le fichier plat, tout est regrouper dans un même colonne, répartit par position.

      De plus, l'outil dispatch même les données sur 2 lignes (car il y a trop de données, donc il répartit sur 2 lignes) avec un début commun (n° séquence) sur 7 caractères , suivant de 4 caractères non important, et un n° sur 3 désignant l'entête ou les caractéristiques. (sur la 1ère ligne = 110 => entête , sur la 2ème ligne = 111 => caract)

      Je souhaiterais concaténer ces 2 lignes, pour n'en faire qu'une et pouvoir chainer ces infos avec SAP qui lui me ramène bien sur une ligne

       

      Voici un exemple :

       

         

      1- 0000001HL17110013DSA80000480        90LIPCNF0000050000000000F0000003 00000000000000000000000000000000000000000000000000000000000000000026669 20161017201610182018101700000000000000000   00000000000000000000
      2 - 0000001HL17111             FR04         300Upload LOGIROSS        L1A 00010 01C12A16   1010            A0000001 L02476865 430BA13
      3 - 0000002HL17110013DSA80000480        90LIPCNF0000050000000000F0000003 00000000000000000000000000000000000000000000000000000000000000000026669 20161017201610182018101700000000000000000   00000000000000000000
      4 - 0000002HL17111             FR04         300Upload LOGIROSS        L1A 00010 01C12A16   1010            A0000001 L02476860 430BA17
      5 - 0000003HL17110013DSA80000480        90LIPCNF0000050000000000F0000003 00000000000000000000000000000000000000000000000000000000000000000026669 20161017201610182018101700000000000000000   00000000000000000000

      6 - 0000003HL17111             FR04         300Upload LOGIROSS        L1A 00010 01C12A16  

      1010            A0000001 L02476859 430BA25

       

       

      Dans l'exemple il y a 6 lignes dans le fichier, mais fonctionnellement il n'y en a que 3. (j'ai mis : 1- / 2- / 3-, ... pour repérer les lignes car ça ne rend pas bien)

       

      Si on décompose la 1ère ligne

      0000001 (n° séquence) sur 7 caractères

      HL (code application) sur 2 caract.

       

      17 (code interface) sur 2 caract

      110 (Rubrique) Sur 3 caract

       

      Ensuite, ce sont les données pures (Dépôt, Article, Lot, Client , ...)

       

       

      J'ai besoin que QlikView concatène les 2 lignes pour n'en faire qu'une.

       

      Avez-vous des pistes pour m'aider svp ?

      Si besoin de plus d'information, dîtes le moi j'essayerai d'être plus clair et plus précis.

       

       

      Merci par avance

      Yann

        • Re: concaténer 2 lignes provenant d'un fichier plat
          Sébastien Fatoux

          Bonjour Yann,

           

          Il y a 2 solutions, la 2ème étant plus simple :

           

          SOLUTION 1

          1. On utilise l'assistant Fichier de table (enregistrement fixe) pour découper les lignes en 5 champs : [Séquence], [Code application], [Code interface] et  [Rubrique et Données]
            Community_1170850-2.png
          2. Une fois le code généré, on regroupe les lignes en fonction des champs : [Séquence], [Code application], [Code interface]
          3. On concatène le champ [Rubrique et Données]
          4. On ajoute une seconde couche de LOAD pour découper le champ [Rubrique et Données] pour récupérer tous les champs.

           

          LOAD
          Séquence,
          [Code application],
          [Code interface],
          Mid([Rubrique et Données], 1, 3) as [Rubrique entête],
          //Mid([Rubrique et Données], 4, 191) as [Données entête],
          ...
          Mid([Rubrique et Données], 195, 3) as [Rubrique caract.],
          //Mid([Rubrique et Données], 198, 200) as [Données caract.]
          ... ;
          LOAD
          [@1:7]  as Séquence,
          [@8:9]  as [Code application],
          [@10:11]  as [Code interface],
          Concat([@12:n]) as [Rubrique et Données]
          FROM
          [C:\tmp.csv] (fix, codepage is 1252, no labels)

          Group By [@1:7], [@8:9], [@10:11];

           

          SOLUTION 2

          1. On utilise l'assistant Fichier de table (enregistrement fixe) avec les options correspondant exactement à ton type de fichier
            Community_1170850.png
          2. Les 2 lignes sont alors regroupé dans l'assistant et il ne reste plus qu'à découper tes lignes correctement pour récupérer tout tes champs.

          LOAD
          [@1:7]  as Séquence,
          [@8:9]  as [Code application],
          [@10:11]  as [Code interface],
          // [@12:14] as Rubrique,
          [@15:207]  as [Données entête],
          // [@208:214] as Séquence_tmp,
          // [@215:216] as [Code application_tmp],
          // [@217:218] as [Code interface_tmp],
          // [@219:221] as Rubrique_tmp,
          [@222:n]  as [Données caract]
          FROM
          [C:\Users\sfatoux\Desktop\tmp.csv]
          (fix, codepage is 1252, no labels, record is 2 lines
          );

           

          • Re: concaténer 2 lignes provenant d'un fichier plat
            Vineeth Pujari

            Hi,

            Sebastien's solutions will work for you, if you need more assistance; please sample data and desired output in excel.



            • Re: concaténer 2 lignes provenant d'un fichier plat
              Yann Antoine

              Merci pour votre réponse Sébastien, je vais tester cela et je vous retiens informé du résultat.

              • Re: concaténer 2 lignes provenant d'un fichier plat
                Yann Antoine

                Sébastien,

                 

                Un grand merci pour votre aide,

                J'ai mis en place la solution 1 et cela répond parfaitement à ce que je voulais réaliser.

                 

                Merci encore.

                 

                A bientôt.

                 

                Yann