Skip to main content
Announcements
Live today at 11 AM ET. Get your questions about Qlik Connect answered, or just listen in. SIGN UP NOW
cancel
Showing results for 
Search instead for 
Did you mean: 
Not applicable

Chargement et séparation de donnée après chaque ";"

Bonjour à tous,

Je charge actuellement des fichiers dans un folder via ce script récupéré sur le forum. Et je doit aussi transformer les données.

- 1er etape chargement données

- 2 eme étape transformation

1er etape via ce script

set Concatenate=; // used to insert concatenate in load statement after the first file loaded

// subroutine

sub ScanFolder(Root)

for each Ext in '*.txt' // use this to identify file names to load

//for each Ext in 'txt' // or simply indicate an extension types to load

for each FoundFile in filelist(Root & '\*' & Ext)

FileList: // don't worry about the squigly lines.  they are there because of the concatenate variable.  will run fine.

$(Concatenate)

load *

from [$(FoundFile)](txt, utf8, no labels, delimiter is '\t', msq, no eof); // parameters here might change depending on the files you are loading

set Concatenate = concatenate;

next FoundFile

next Ext

for each SubDirectory in dirlist(Root&'\*')

call ScanFolder(SubDirectory)

next SubDirectory

end Sub

// place the root directory you want to cycle through here.

Call ScanFolder('.....');

Les données sont dans une table avec FileList avec un champ @1.

2 eme étape : transformation.

Or les données ont ce format par exemple sans en tête.

20170929;0312;4040000000D93086;111

Que je transforme via ce script:

LOAD *

From_Field (FileList,data)

(txt, utf8, explicit labels, delimiter is ';', no quotes);

Mais j'aimerais avoir le nom du fichier d'origine répété pour chacune des lignes avec les données bien splittées.

Ex fichier

nom fichier         code1            code2     code3                                 code4

toto1                    20170929    0312      4040000000D93086            111


Pense qui faudrait faire ce travail directement lors du chargement  plutôt qu'en deux étapes? Mais je vois pas comment?

Merci d'avance.

1 Solution

Accepted Solutions
martinien
Partner - Contributor III
Partner - Contributor III

Bonjour,

Si les fichiers ont tous le même format, l'étape de transformation peut être fait directement dans la boucle de chargement de la routine ScanFolder ; La deuxième étape n'est pas nécessaire.

Dans la routine chargement, il faudrait donc:

-Spécifier les bonnes propriétés des fichiers sources (encodage, séparateur...)

-Ajouter une fonction pour récupérer le nom du fichier (FileBaseName(), FilePath()...).

Ce qui donnerait quelque chose comme:

$(Concatenate)

load * ,

FileBaseName() as [nom fichier]

from [$(FoundFile)](txt, utf8, explicit labels, delimiter is ';', no quotes);

A noter également, si tous les fichiers sont dans le même dossiers (pas de sous dossiers), il n'y a pas besoin de la boucle récursive et le script peut etre simplifié.

Martin

View solution in original post

3 Replies
martinien
Partner - Contributor III
Partner - Contributor III

Bonjour,

Si les fichiers ont tous le même format, l'étape de transformation peut être fait directement dans la boucle de chargement de la routine ScanFolder ; La deuxième étape n'est pas nécessaire.

Dans la routine chargement, il faudrait donc:

-Spécifier les bonnes propriétés des fichiers sources (encodage, séparateur...)

-Ajouter une fonction pour récupérer le nom du fichier (FileBaseName(), FilePath()...).

Ce qui donnerait quelque chose comme:

$(Concatenate)

load * ,

FileBaseName() as [nom fichier]

from [$(FoundFile)](txt, utf8, explicit labels, delimiter is ';', no quotes);

A noter également, si tous les fichiers sont dans le même dossiers (pas de sous dossiers), il n'y a pas besoin de la boucle récursive et le script peut etre simplifié.

Martin

Not applicable
Author

Salut martin,

Merci pour ton aide,

Juste une précision. Pour la boucle récursive, j'ai essayé de l’alléger mais je vois pas ce que je peux enlever sans faire planter le lancement?

Martin Sorel <span class="icon-status-icon icon-partner" title="Partner"></span> a écrit:

A noter également, si tous les fichiers sont dans le même dossiers (pas de sous dossiers), il n'y a pas besoin de la boucle récursive et le script peut etre simplifié.

Martin

Pour la partie séparation des données dans la boucle cela fonctionne parfait.

Juste une précision j'ai pas tous les champs qui sont séparés correctement dans ma ligne pour chaque  ";"


Alors que lorsque je traitais les données aprés coup j'avais bien une colonne pour chaque élément de la ligne.


Exemple :

nom fichier         code1            code2     code3                        code4

toto1                    20170929    0312      8004                            120


La j'ai bien les 3 premiers codes mais j'ai pas le code 4 par exemple, surtout que je dois avoir une dizaine d'éléments séparés par une ";" après qui n’apparaissent pas.



Merci par avance et bonne soirée.

Not applicable
Author

J'ai trouvé mon problème, je posterais sur une nouvelle discussion car cela n'a pas vraiment de lien avec le sujet actuel.