[Résolu] Transformation d'un fichier TXT

Discussions à propos du tableur Calc.
Les questions sur les macros doivent être postées dans la section dédiée en dessous.

Modérateur : Vilains modOOs

Règles du forum
Cette section est uniquement dédiée au tableur Calc. Vous ne devez pas poster ici de questions sur les macros mais utiliser la section éponyme.
JMD56
NOOuvel adepte
NOOuvel adepte
Messages : 12
Inscription : 26 juil. 2019 16:26

[Résolu] Transformation d'un fichier TXT

Message par JMD56 »

Bonjour,
Pourriez vous m'aider svp? Je ne sais pas si je suis dans la bonne section mais j'ai l'impression que ça peut être fait par OpenOffice Calc.
Je récupère un fichier TXT d'un terminal d'inventaire sous ce format. Je vous mets un exemple:

Code : Tout sélectionner

<inventaire>
<ligne>
<codelu>
3711111111113
</codelu>
<qte>
1
</qte>
</ligne>
<ligne>
<codelu>
9711111111115
</codelu>
<qte>
2
</qte>
</ligne>
</inventaire>
Et j'ai besoin de le transformer, pour qu'il finisse sous le format qui suit, pour pouvoir être utilisé par mon logiciel de back office. "Code Barre;Quantité" Exemple:

Code : Tout sélectionner

3711111111113;1
9711111111115;2
Comme vous vous en doutez mon comptage contient plus de 2 articles ^^.
J'ai tenté de comprendre la fonction "filtre". Mon idée était de copier sur une autre feuille les lignes qui ne commencent pas par <
Mais je n'ai pas réussi et même si j'avais réussi, il fallait que je trouve une solution pour ramener la quantité derrière le code barre et qu'il y ait un ; entre les deux données.
Qu'en pensez vous? Puis je arriver à faire ça avec Open Office Calc?
Merci de votre écoute.
JMD56
Dernière modification par JMD56 le 07 août 2019 08:08, modifié 4 fois.
Apache OpenOffice 4.1.1
AOO411m6(Build:9775) - Rev. 1617669
2014-08-13 09:06:54 (Mi, 13 Aug 2014)
Avatar de l’utilisateur
Dude
IdOOle de la suite
IdOOle de la suite
Messages : 25184
Inscription : 03 mars 2006 07:45
Localisation : 127.0.0.1

Re: Transformation d'un fichier TXT

Message par Dude »

Salut,

Il faut créer ton filtre d'importation XML/XSLT.
Tutoriel : https://wiki.openoffice.org/wiki/Docume ... ML_ou_XSLT
Avatar de l’utilisateur
OOotremer971
ManitOOu
ManitOOu
Messages : 2744
Inscription : 16 avr. 2010 13:31

Re: Transformation d'un fichier TXT

Message par OOotremer971 »

Bonjour,

Éventuellement une petite formule matricielle :) (à valider en maintenant les touches Ctrl et Maj enfoncées lors de l'appui sur la touche Entrée)
En C1 par exemple :

Code : Tout sélectionner

=INDEX($A$1:$A$18;PETITE.VALEUR(SI(ESTNUM($A$1:$A$18);LIGNE($A$1:$A$18);"");(LIGNE()*2)-1))&";"&INDEX($A$1:$A$18;PETITE.VALEUR(SI(ESTNUM($A$1:$A$18);LIGNE($A$1:$A$18);"");LIGNE()*2))
Il faudra remplacer les références à $A$1:$A$18 par les références à la plage réellement occupée par les lignes de codes.
Maintenir la touche Ctrl enfoncée pour étirer la formule vers le bas après la précédente démarche.
Vous ne pouvez pas consulter les pièces jointes insérées à ce message.
En principe, toujours à jour des dernières versions dites stables
AOO
LibreOffice
Debian 10 et 11
JMD56
NOOuvel adepte
NOOuvel adepte
Messages : 12
Inscription : 26 juil. 2019 16:26

Re: Transformation d'un fichier TXT

Message par JMD56 »

Bonjour,
Merci Dude et grand grand merci OOotremer971.
Cela fonctionne parfaitement.
Je vais marquer ce fil en résolu mais avant cela je vais un peu abuser sur une question de confort et de diminution de risque.
Serait il possible dans la formule matricielle de rentrer la valeur de la plage que je suis censé modifier comme une variable?
Je ne suis pas sur d'être clair. Exemple:
-Je récupère mon fichier par mon terminal d'inventaire.
-Je l'ouvre dans OpenOffice Calc
-Je vais vérifier le nombre de lignes de mon fichier.
-j'inscris ce nombre en b1
-Ensuite je copie la formidable formule de OOotremer971 en c1, formule qui récupère la fin de la plage en b1.
-Il ne me reste plus qu'à étirer la formule vers le bas et je n'y ai pas touché ce qui enlève le risque de mauvais manip.
J'ai essayé en indiquant b1 à la place des chiffres que je dois modifier mais ça n'a pas fonctionné.
Merci
JMD56
Apache OpenOffice 4.1.1
AOO411m6(Build:9775) - Rev. 1617669
2014-08-13 09:06:54 (Mi, 13 Aug 2014)
Avatar de l’utilisateur
OOotremer971
ManitOOu
ManitOOu
Messages : 2744
Inscription : 16 avr. 2010 13:31

Re: Transformation d'un fichier TXT

Message par OOotremer971 »

Bonjour,

Code : Tout sélectionner

=INDEX(_MaPlage;PETITE.VALEUR(SI(ESTNUM(_MaPlage);LIGNE(_MaPlage);"");(LIGNE()*2)-1))&";"&INDEX(_MaPlage;PETITE.VALEUR(SI(ESTNUM(_MaPlage);LIGNE(_MaPlage);"");LIGNE()*2))
_MaPlage est une expression nommée accessible par le raccourci clavier Ctrl+F3 (touche de fonction F3) et correspond à :

Code : Tout sélectionner

INDIRECT("A1:A"&$B$1) 
Vous ne pouvez pas consulter les pièces jointes insérées à ce message.
En principe, toujours à jour des dernières versions dites stables
AOO
LibreOffice
Debian 10 et 11
JMD56
NOOuvel adepte
NOOuvel adepte
Messages : 12
Inscription : 26 juil. 2019 16:26

Re: Transformation d'un fichier TXT

Message par JMD56 »

Bonjour,
Cela fonctionne parfaitement.
Un grand merci à vous OOotremer971.
Cordialement
Jean-Marc
Apache OpenOffice 4.1.1
AOO411m6(Build:9775) - Rev. 1617669
2014-08-13 09:06:54 (Mi, 13 Aug 2014)
JMD56
NOOuvel adepte
NOOuvel adepte
Messages : 12
Inscription : 26 juil. 2019 16:26

Re: Transformation d'un fichier TXT

Message par JMD56 »

Bonjour,
Je me permets de revenir vers vous car j'ai un soucis.
(Plutôt deux: le copier coller et la fonction (ou la cellule d'arrivée, je ne sais pas trop) m'enlève les zéros non significatifs des débuts de code barre.)
Les code barre avec des zéro non significatifs en début ne marchent pas. 0026102256138 devient 26102256138
Déjà rien que dans le copier coller de mon fichier txt, ils disparaissent.
J'ai essayé en formatant les cellules en forçant le nombre de zéros dans la description de la cellule
mais, de une j'ai des code barres qui font 13 chiffres et d'autres 14 donc impossible à gérer automatiquement avec un masque
et de deux les zéros non significatifs disparaissent quand même ensuite dans le résultat de la fonction.
J'ai tenté en indiquant les cellules comme des cellules de texte mais là la fonction ne marche plus car elle est basé sur la détection du numérique.
J'ai tenté également en séparant en deux la fonction pour essayer de traiter différemment le code et la quantité mais je n'ai pas trouvé de solution.

Avec la commande findstr/v "<" Inventaire.txt > Resultat.txt
j'arrive à avoir un fichier TXT où il ne reste plus que les code barre et les quantités mais ils ne sont pas sur la même ligne et il manque encore le ; entre les deux
Avez vous une idée?

5415203803573
1
5415203833310
1
5415203803580
1
3106232471278
1
3106232690587
2
3106232691423
2
3106232690556
2
3106239800422
1
3106239530015
1
5415203857170
1
3106233190024
2
0026102256138
1
3106233660138
1


Cordialement
Merci de votre écoute
Jean-Marc
Apache OpenOffice 4.1.1
AOO411m6(Build:9775) - Rev. 1617669
2014-08-13 09:06:54 (Mi, 13 Aug 2014)
Avatar de l’utilisateur
OOotremer971
ManitOOu
ManitOOu
Messages : 2744
Inscription : 16 avr. 2010 13:31

Re: Transformation d'un fichier TXT

Message par OOotremer971 »

Bonjour,

En copiant ta dernière liste dans Writer, on aperçoit des retours à la ligne forcés (Maj+Entrée) :
JMD56_1.png
Avec l'outil Rechercher & remplacer du menu Édition on peut obtenir un liste comme celle-ci :
JMD56_2.png
Il faudrait un extrait de quelques lignes de ton fichier txt (encapsulé dans un zip pour être accepté sur le forum) pour confirmer qu'une fois collé ou ouvert avec Writer il affiche bien le même type de retour à la ligne. Dans ce cas la procédure sera de rechercher les retours à la ligne pour les remplacer par des points virgules ; on obtient ça :
JMD56_3.png
:arrow: :arrow:
Vous ne pouvez pas consulter les pièces jointes insérées à ce message.
En principe, toujours à jour des dernières versions dites stables
AOO
LibreOffice
Debian 10 et 11
Avatar de l’utilisateur
OOotremer971
ManitOOu
ManitOOu
Messages : 2744
Inscription : 16 avr. 2010 13:31

Re: Transformation d'un fichier TXT

Message par OOotremer971 »

ensuite rechercher

Code : Tout sélectionner

;[:digit:]{13,14};[:digit:]{1}
et remplacer par

Code : Tout sélectionner

\n$0
JMD56_4.png
et pour finir, rechercher et remplacer par rien :
JMD56_5.png
Attention, si les quantités peuvent-être de l'ordre des dizaines ou des centaines, il faudra modifier en conséquence l'expression :

Code : Tout sélectionner

;[:digit:]{13,14};[:digit:]{1}
pour traiter les dizaines en la remplaçant par :

Code : Tout sélectionner

;[:digit:]{13,14};[:digit:]{1,2}
ou pour traiter les centaines :

Code : Tout sélectionner

;[:digit:]{13,14};[:digit:]{1,2,3}
A+
Vous ne pouvez pas consulter les pièces jointes insérées à ce message.
En principe, toujours à jour des dernières versions dites stables
AOO
LibreOffice
Debian 10 et 11
JMD56
NOOuvel adepte
NOOuvel adepte
Messages : 12
Inscription : 26 juil. 2019 16:26

Re: Transformation d'un fichier TXT

Message par JMD56 »

Bonjour
Merci à tous.
Quelqu'un m'a donné du code Powershell pour le faire.
Je le poste ici au cas où quelqu'un chercherait une solution pour un problème comme le mien.

Code Powershell
$xml = [xml](Get-Content -Path "inventaire.xml")
$xml.inventaire.ligne |
ForEach-Object {($_.codelu.ToString() -replace "[\r\n]", "") + ";" + ($_.qte.ToString() -replace "[\r\n]", "")} |
Set-Content -Path "resultat.txt" -Force

Encore merci à tous.
Cordialement
Jean-Marc
Apache OpenOffice 4.1.1
AOO411m6(Build:9775) - Rev. 1617669
2014-08-13 09:06:54 (Mi, 13 Aug 2014)
Avatar de l’utilisateur
Dude
IdOOle de la suite
IdOOle de la suite
Messages : 25184
Inscription : 03 mars 2006 07:45
Localisation : 127.0.0.1

Re: [Résolu] Transformation d'un fichier TXT

Message par Dude »

JMD56 a écrit :Quelqu'un m'a donné du code Powershell pour le faire.
Pourquoi utiliser quelque chose qui ne fonctionne que sous Windows ? :shock:
Ta réponse montre que tu n'as pas daigné étudier la piste du filtre XML.