Créer un fichier xml à partir d'un csv
Fermé
Tofdu31
-
Modifié le 2 févr. 2021 à 12:06
mamiemando Messages postés 33346 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 8 novembre 2024 - 2 févr. 2021 à 12:11
mamiemando Messages postés 33346 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 8 novembre 2024 - 2 févr. 2021 à 12:11
A voir également:
- Créer un fichier xml à partir d'excel
- Creer un groupe whatsapp a partir d'un autre groupe - Guide
- Créer un compte gmail - Guide
- Créer un compte google - Guide
- Fichier rar - Guide
- Créer liste déroulante excel - Guide
7 réponses
zipe31
Messages postés
36402
Date d'inscription
dimanche 7 novembre 2010
Statut
Contributeur
Dernière intervention
27 janvier 2021
6 417
28 nov. 2020 à 08:12
28 nov. 2020 à 08:12
Salut,
On ne va pas réinventer la roue à chaque fois.
La réponse t'as déjà été donnée par Flodelarab dans ce fil de discussion sur Developpez.
On ne va pas réinventer la roue à chaque fois.
La réponse t'as déjà été donnée par Flodelarab dans ce fil de discussion sur Developpez.
OK mais ça marche en aucun cas, du coup je réinvente pas la roue...
J'ai trouvé ceci, on pourrait faire quelques choses non avec ça ?
J'ai trouvé ceci, on pourrait faire quelques choses non avec ça ?
for /F "tokens=*" %%A in (myfile.txt) do [process] %%A
zipe31
Messages postés
36402
Date d'inscription
dimanche 7 novembre 2010
Statut
Contributeur
Dernière intervention
27 janvier 2021
6 417
28 nov. 2020 à 10:41
28 nov. 2020 à 10:41
Ça c'est un batch Windows. Aucun intérêt ici.
zipe31
Messages postés
36402
Date d'inscription
dimanche 7 novembre 2010
Statut
Contributeur
Dernière intervention
27 janvier 2021
6 417
28 nov. 2020 à 11:20
28 nov. 2020 à 11:20
OK mais ça marche en aucun casAh bon ?
Je reprends texto tout ce qu'a fait Flodelarab :
Le contenu du fichier d'entrée :
$ cat permissions.csv
android.permission.INTERNET
android.permission.WRITE_EXTERNAL_STORAGE
android.permission.ACCESS_NETWORK_STATE
android.permission.BLUETOOTH
android.permission.BLUETOOTH_ADMIN
android.permission.ACCESS_WIFI_STATE
android.permission.READ_PHONE_STATE
La déclaration de la variable contenant le texte de la ligne à insérer :
$ var=pouet
$ echo "${var}"
pouet
La commande sed appliquée au fichier d'entrée et son résultat sur la sortie standard (l'écran) :
$ sed -e '1iMa première ligne avec '"$var" -e 's@^@{"name":"@' -e '$!s@$@","value":"1"},@' -e '$s@$@","value":"1"}]}]@' permissions.csv
Ma première ligne avec pouet
{"name":"android.permission.INTERNET","value":"1"},
{"name":"android.permission.WRITE_EXTERNAL_STORAGE","value":"1"},
{"name":"android.permission.ACCESS_NETWORK_STATE","value":"1"},
{"name":"android.permission.BLUETOOTH","value":"1"},
{"name":"android.permission.BLUETOOTH_ADMIN","value":"1"},
{"name":"android.permission.ACCESS_WIFI_STATE","value":"1"},
{"name":"android.permission.READ_PHONE_STATE","value":"1"}]}]
Il est où le problème ?
Re,
Je comprends, en fait suis aussi sous Windaube, du coup pas évident pour faire l'adaptation.
Bon déja, j'ai effectué la vérif et la validation des points suivants :
ça c'est ok
Ensuite j'ai validé aussi la partie :
%sed% -e "1iMa première ligne avec "%var% permissions.csv
Voici ce que j'ai à l'écran :
Du coup là aussi on est bon.
Par contre la suite là ça marche pas :
Déja, sous Windaube, je sais que les tildes doivent étre remplacé par les guillements :
Du coup, on va découper pour faire déja un premier test. Toutefois, j'arrive pas a faire fonctionner juste une interprétation comme :
J'ai l'erreur :
Je comprends, en fait suis aussi sous Windaube, du coup pas évident pour faire l'adaptation.
Bon déja, j'ai effectué la vérif et la validation des points suivants :
set var=pouet
echo %var%
ça c'est ok
Ensuite j'ai validé aussi la partie :
%sed% -e "1iMa première ligne avec "%var% permissions.csv
Voici ce que j'ai à l'écran :
Ma première ligne avec pouet
android.permission.INTERNET
android.permission.WRITE_EXTERNAL_STORAGE
android.permission.ACCESS_NETWORK_STATE
android.permission.BLUETOOTH
android.permission.BLUETOOTH_ADMIN
android.permission.ACCESS_WIFI_STATE
android.permission.READ_PHONE_STATE
Du coup là aussi on est bon.
Par contre la suite là ça marche pas :
%sed% -e "1iMa première ligne avec "%var% -e 's@^@{"name":"@' -e '$!s@$@","value":"1"},@' -e '$s@$@","value":"1"}]}]@' permissions.csv
Déja, sous Windaube, je sais que les tildes doivent étre remplacé par les guillements :
- e "s@^@{"name":"@' -e '$!s@$@","value":"1"},@" -e '$s@$@","value":"1"}]}]@"
Du coup, on va découper pour faire déja un premier test. Toutefois, j'arrive pas a faire fonctionner juste une interprétation comme :
-e "s@^@{"name":"@' -e '$!s@$@","value":"1"}"
%sed% -e "1iMa première ligne avec "%var% -e "s@^@{"name":"@' -e '$!s@$@","value":"1"}" permissions.csv
J'ai l'erreur :
sed.exe: -e expression n°2, caractère 11: option inconnue pour `s'
zipe31
Messages postés
36402
Date d'inscription
dimanche 7 novembre 2010
Statut
Contributeur
Dernière intervention
27 janvier 2021
6 417
28 nov. 2020 à 12:09
28 nov. 2020 à 12:09
en fait suis aussi sous WindaubeInstalle un vrai système Gnu/Linux (VM) et après on causera.
Tout ce qui n'est pas natif est source de complication.
Pour l'erreur sed, c'est sans doute que tu encadres la syntaxe avec des quotes de début et de fin différentes ;-(
Arfff, si tu savais... c'est une contrainte boulot... Bien sur, suis totalement Linux chez moi.
Mais parfois faut s'adapter.
Du coup, dans l'obligation de continuer ainsi.
Mais parfois faut s'adapter.
Du coup, dans l'obligation de continuer ainsi.
zipe31
Messages postés
36402
Date d'inscription
dimanche 7 novembre 2010
Statut
Contributeur
Dernière intervention
27 janvier 2021
6 417
28 nov. 2020 à 13:41
28 nov. 2020 à 13:41
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
Windows 10.
J'ai déjà plein de script .bat fonctionnel. Et je ne peux vraiment pas outre passer Windows 10. Je sais on pourrait ouvrir le débat, suis totalement d'accord que l'acceptation de Linux dans l'environnement pro et tout de même une sage décision. Mais bon, pas évident de convaincre des DSI qui veulent faire vivre un monde des années 2000 et plus qui n'existe plus.
J'ai déjà plein de script .bat fonctionnel. Et je ne peux vraiment pas outre passer Windows 10. Je sais on pourrait ouvrir le débat, suis totalement d'accord que l'acceptation de Linux dans l'environnement pro et tout de même une sage décision. Mais bon, pas évident de convaincre des DSI qui veulent faire vivre un monde des années 2000 et plus qui n'existe plus.
zipe31
Messages postés
36402
Date d'inscription
dimanche 7 novembre 2010
Statut
Contributeur
Dernière intervention
27 janvier 2021
6 417
28 nov. 2020 à 13:49
28 nov. 2020 à 13:49
Tu fais ce que tu veux, mais entre Cygwin et WSL je crois qu'il n'y a pas photo ;-\
J'entends totalement que tu aies pléthore de scripts batch qui marchent, mais à faire ce que tu fais, ça reste du tricotage et rien de pro ;-(
Si tu as cygwin d'installer, tu devrais pouvoir te faire installer WSL sans que ça rechigne de trop ;-)
J'entends totalement que tu aies pléthore de scripts batch qui marchent, mais à faire ce que tu fais, ça reste du tricotage et rien de pro ;-(
Si tu as cygwin d'installer, tu devrais pouvoir te faire installer WSL sans que ça rechigne de trop ;-)
Tofdu31
>
zipe31
Messages postés
36402
Date d'inscription
dimanche 7 novembre 2010
Statut
Contributeur
Dernière intervention
27 janvier 2021
28 nov. 2020 à 13:55
28 nov. 2020 à 13:55
Mouai...
Merci pour avoir essayé dans tous les cas.
Merci pour avoir essayé dans tous les cas.
zipe31
Messages postés
36402
Date d'inscription
dimanche 7 novembre 2010
Statut
Contributeur
Dernière intervention
27 janvier 2021
6 417
>
Tofdu31
28 nov. 2020 à 14:03
28 nov. 2020 à 14:03
De rien, mais faut nous comprendre aussi. On te file des solutions qui marchent chez nous et tu reviens nous dire que ça marche pas chez toi.
Ce n'est quand même pas à nous d'installer une VM avec Windows dans laquelle on va installer Cygwin, pour pouvoir trouver les bonnes syntaxes.
C'est cru ce que je vais te dire, mais ce n'est pas à des bénévoles de trouver des solutions qui marchent pour des boîtes qui ne veulent pas faire l'effort de faciliter la vie de leurs employés !
Ce n'est quand même pas à nous d'installer une VM avec Windows dans laquelle on va installer Cygwin, pour pouvoir trouver les bonnes syntaxes.
C'est cru ce que je vais te dire, mais ce n'est pas à des bénévoles de trouver des solutions qui marchent pour des boîtes qui ne veulent pas faire l'effort de faciliter la vie de leurs employés !
Je comprends, d'ailleurs si tu reprends mes messages, ici comme chez developpez.com, j'apporte les explications de conversions et le résultat final fonctionnel pour que les internautes comprennent différence Windows Linux et y trouve de l'information qui apportera des solutions.
Je laisse des écrits vraiment détaillés qui, à mon gout, répond à l'investissement de bénévoles dont j'ai toujours à la fois respecté mais aussi soutenue.
Moi aussi suis bénévole dans l'informatique sur les Fablab et c'est énormément de temps consacrée aussi pour apporter du soutien. Donc ce que tu fais, je peux que le mesurer, le reconnaitre mais aussi remercier.
Tof
Je laisse des écrits vraiment détaillés qui, à mon gout, répond à l'investissement de bénévoles dont j'ai toujours à la fois respecté mais aussi soutenue.
Moi aussi suis bénévole dans l'informatique sur les Fablab et c'est énormément de temps consacrée aussi pour apporter du soutien. Donc ce que tu fais, je peux que le mesurer, le reconnaitre mais aussi remercier.
Tof
zipe31
Messages postés
36402
Date d'inscription
dimanche 7 novembre 2010
Statut
Contributeur
Dernière intervention
27 janvier 2021
6 417
28 nov. 2020 à 14:13
28 nov. 2020 à 14:13
Oui oui j'ai vu tout ça, c'est tout à ton honneur et je t'en remercie aussi.
Mais je reste sur l'idée que de vouloir mélanger scripts batch/bash ça reste de la tambouille indigeste et que tu ferais mieux de te lancer dans l'apprentissage de langage comme Perl ou Python, qui eux sont portables, faciles à apprendre d'après mes lectures, et intègrent nativement la plupart des outils que tu te sers dans tes scripts.
Mais je reste sur l'idée que de vouloir mélanger scripts batch/bash ça reste de la tambouille indigeste et que tu ferais mieux de te lancer dans l'apprentissage de langage comme Perl ou Python, qui eux sont portables, faciles à apprendre d'après mes lectures, et intègrent nativement la plupart des outils que tu te sers dans tes scripts.
zipe31
Messages postés
36402
Date d'inscription
dimanche 7 novembre 2010
Statut
Contributeur
Dernière intervention
27 janvier 2021
6 417
29 nov. 2020 à 10:15
29 nov. 2020 à 10:15
Okazou… je pose ça là : La puissance des outils Gnu/Linux sous Windows ;-)
Tofdu31
>
zipe31
Messages postés
36402
Date d'inscription
dimanche 7 novembre 2010
Statut
Contributeur
Dernière intervention
27 janvier 2021
Modifié le 29 nov. 2020 à 11:20
Modifié le 29 nov. 2020 à 11:20
A génial, merci à toi,
Alors de mon coté, j'ai grave avancé.
Pour commencer, je mets en place mes variables :
Rem mise en place des variables pour creation fichier xml
Dans mon .bat, je vérifie que mes variables sont correctes :
Là tout est bon.
Enfin, j'ai testé sans variable ma ligne de commande avec un mot TOTO et TATA
Le résultat attendu est bon avec TOTO et TATA
Alors le souci, dés que je place ma variable %before_permission% là ça va plus. j'ai une erreur :
La commande :
Erreur:
Par contre si je replace la première variable utilisé, là ça pose pas de probléme...
Incroyable...
Si tu as une idée. Je vais de ce pas lire le lien pour trouver de l'info.
Tof
Alors de mon coté, j'ai grave avancé.
Pour commencer, je mets en place mes variables :
Rem mise en place des variables pour creation fichier xml
set applicationID=ICI LA LIGNE A RAJOUTER AU DEBUT
set ligne_first=[{\"packageName\":\"%applicationID%\",\"permissions\":[
set before_permission={"name":"
set val_after_permission=\",\"value\":\"1\"},
set val_end_of_last_line=]}]
Dans mon .bat, je vérifie que mes variables sont correctes :
echo %ligne_first%
echo %before_permission%
echo %val_end_of_last_line%
Là tout est bon.
Enfin, j'ai testé sans variable ma ligne de commande avec un mot TOTO et TATA
%sed% -e "1i%ligne_first%" -e "s/.*/TOTO&/" -e "s/$/TATA,/" fichier_donnee.csv >> Final.xml
Le résultat attendu est bon avec TOTO et TATA
ICI LA LIGNE A RAJOUTER AU DEBUT
TOTOandroid.permission.INTERNETTATA
TOTOandroid.permission.WRITE_EXTERNAL_STORAGETATA
TOTOandroid.permission.ACCESS_NETWORK_STATETATA
TOTOandroid.permission.BLUETOOTHTATA
TOTOandroid.permission.BLUETOOTH_ADMINTATA
TOTOandroid.permission.ACCESS_WIFI_STATETATA
TOTOandroid.permission.READ_PHONE_STATETATA
Alors le souci, dés que je place ma variable %before_permission% là ça va plus. j'ai une erreur :
La commande :
%sed% -e "1i%ligne_first%" -e "s/.*/%before_permission%&/" -e "s/$/TATA,/" fichier_donnee.csv >> Final.xml
Erreur:
sed.exe: -e expression n°2, caractère 11: commande `s' inachevée
Par contre si je replace la première variable utilisé, là ça pose pas de probléme...
%sed% -e "1i%ligne_first%" -e "s/.*/%ligne_first%&/" -e "s/$/TATA,/" fichier_donnee.csv >> Final.xml
Incroyable...
Si tu as une idée. Je vais de ce pas lire le lien pour trouver de l'info.
Tof
Tofdu31
>
zipe31
Messages postés
36402
Date d'inscription
dimanche 7 novembre 2010
Statut
Contributeur
Dernière intervention
27 janvier 2021
29 nov. 2020 à 11:23
29 nov. 2020 à 11:23
Je pense que je vais partir sur ceci :
https://www.it-connect.fr/lister-le-contenu-dun-fichier-texte-en-batch/
https://www.it-connect.fr/lister-le-contenu-dun-fichier-texte-en-batch/
zipe31
Messages postés
36402
Date d'inscription
dimanche 7 novembre 2010
Statut
Contributeur
Dernière intervention
27 janvier 2021
6 417
>
Tofdu31
29 nov. 2020 à 11:27
29 nov. 2020 à 11:27
À te lancer dans les scripts batch, autant voir à ce moment là du côté de Power Shell, qui a l'air beaucoup plus complet et performant…
Bonsoir,
Lorsque vous connaissez le format du csv fichier et la structure dont vous avez besoin dans le xml fichier, il est assez simple de créer un script capable de gérer la conversion.
Prenez le fichier simple.csv:
Jack,35,United States
Jill,22,United Kingdom
Vous pouvez créer le xml fichier suivant :
<?xml version="1.0"?>
<Customers>
<Customer>
<Name>Jack</Name>
<Age>35</Age>
<Country>United States</Country>
</Customer>
<Customer>
<Name>Jill</Name>
<Age>22</Age>
<Country>United Kingdom</Country>
</Customer>
</Customers>
Avec le script suivant:
Même si vous n'avez jamais codé auparavant, je pense que cela devrait être facile à utiliser et à modifier. Le fichier est lu ligne par ligne dans la whileboucle.
IFSest le spécificateur de champ interne. Le IFS=$','déclare que la valeur du séparateur de champ est une virgule. Ceci est standard pour un fichier CSV, mais il peut être modifié selon les besoins pour correspondre au format de fichier d'entrée.
L' -rargument de la readcommande lui indique de traiter toutes les barres obliques inverses dans votre fichier comme faisant partie de vos données plutôt que comme un échappement pour un caractère spécial suivant.
L' -a arryargument place chaque colonne de votre fichier dans un tableau (nommé arry). Les colonnes de cet exemple sont le nom, l'âge, le pays. En d'autres termes, les valeurs entre les virgules. Ainsi, chaque colonne de la ligne est stockée dans un tableau.
Ensuite, le texte nécessaire pour xmlest simplement enroulé autour des valeurs et la xmlligne est ajoutée au fichier de sortie avec echo.
Mais plus simple :
Sur le site Web de la communauté sur la conversion, il existe un lien vers un outil en ligne de commande appelé csv2xml .
Une solution assez conviviale (c'est-à-dire facile à utiliser pour moi) au défi de conversion CSV en XML consiste à utiliser un bel éditeur XML multiplateforme qui intègre cette fonctionnalité. (Je l'ai utilisé à la fois sous Ubuntu et Mac OSX 10.10.5; il a également un exécutable Windows.)
Lorsque vous connaissez le format du csv fichier et la structure dont vous avez besoin dans le xml fichier, il est assez simple de créer un script capable de gérer la conversion.
Prenez le fichier simple.csv:
Jack,35,United States
Jill,22,United Kingdom
Vous pouvez créer le xml fichier suivant :
<?xml version="1.0"?>
<Customers>
<Customer>
<Name>Jack</Name>
<Age>35</Age>
<Country>United States</Country>
</Customer>
<Customer>
<Name>Jill</Name>
<Age>22</Age>
<Country>United Kingdom</Country>
</Customer>
</Customers>
Avec le script suivant:
#!/bin/bash file_in="simple.csv" file_out="simple.xml" echo '<?xml version="1.0"?>' > $file_out echo '<Customers>' >> $file_out while IFS=$',' read -r -a arry do echo ' <Customer>' >> $file_out echo ' <Name>'${arry[0]}'</Name>' >> $file_out echo ' <Age>'${arry[1]}'</Age>' >> $file_out echo ' <Country>'${arry[2]}'</Country>' >> $file_out echo ' </Customer>' >> $file_out done < $file_in echo '</Customers>' >> $file_out
Même si vous n'avez jamais codé auparavant, je pense que cela devrait être facile à utiliser et à modifier. Le fichier est lu ligne par ligne dans la whileboucle.
IFSest le spécificateur de champ interne. Le IFS=$','déclare que la valeur du séparateur de champ est une virgule. Ceci est standard pour un fichier CSV, mais il peut être modifié selon les besoins pour correspondre au format de fichier d'entrée.
L' -rargument de la readcommande lui indique de traiter toutes les barres obliques inverses dans votre fichier comme faisant partie de vos données plutôt que comme un échappement pour un caractère spécial suivant.
L' -a arryargument place chaque colonne de votre fichier dans un tableau (nommé arry). Les colonnes de cet exemple sont le nom, l'âge, le pays. En d'autres termes, les valeurs entre les virgules. Ainsi, chaque colonne de la ligne est stockée dans un tableau.
Ensuite, le texte nécessaire pour xmlest simplement enroulé autour des valeurs et la xmlligne est ajoutée au fichier de sortie avec echo.
Mais plus simple :
Sur le site Web de la communauté sur la conversion, il existe un lien vers un outil en ligne de commande appelé csv2xml .
Une solution assez conviviale (c'est-à-dire facile à utiliser pour moi) au défi de conversion CSV en XML consiste à utiliser un bel éditeur XML multiplateforme qui intègre cette fonctionnalité. (Je l'ai utilisé à la fois sous Ubuntu et Mac OSX 10.10.5; il a également un exécutable Windows.)