A voir également:
- [Shell] Création de plusieurs fichiers XML
- [Shell] Création de plusieurs fichiers XML ✓ - Forum - Shell
- Création d'un fichier texte en Shell ✓ - Forum - Shell
- Comment ecrire un fichier xml en shell? ✓ - Forum - Shell
- [Shell] Création de Fichiers ✓ - Forum - Shell
- Discord aucune information de style ne semble associée à ce fichier xml. l’arbre du document est affiché ci-dessous. ✓ - Forum - Audio
23 réponses
lami20j
- Messages postés
- 21331
- Date d'inscription
- jeudi 4 novembre 2004
- Statut
- Modérateur, Contributeur sécurité
- Dernière intervention
- 30 octobre 2019
Salut,
lami20j
perl -pi.orig -e 's/^(\w+)\s+(\w+)/<data>$1<\/data><value>$2<\/value$>/' fichier_donnee--
lami20j
Zent
Merci pour ta réponse lami20j, mais j'ai un petit souci...
Quand un des champs contient une date DD/MM/YYYY, j'obtiens :
<data>1</data><value>01</value215/01/2007
le champ de date contenait 01/01/2007
Je ne connais pas du tout perl, donc je n'arrive pas à créer un fichier par ligne lue...
Merci encore!!
Quand un des champs contient une date DD/MM/YYYY, j'obtiens :
<data>1</data><value>01</value215/01/2007
le champ de date contenait 01/01/2007
Je ne connais pas du tout perl, donc je n'arrive pas à créer un fichier par ligne lue...
Merci encore!!
lami20j
- Messages postés
- 21331
- Date d'inscription
- jeudi 4 novembre 2004
- Statut
- Modérateur, Contributeur sécurité
- Dernière intervention
- 30 octobre 2019
alors affiche quelque lignes de ton fichier
en fait il n'a que 2 champs par ligne?
et je te donnerai la bonne commande
en fait il n'a que 2 champs par ligne?
et je te donnerai la bonne commande
lami20j
- Messages postés
- 21331
- Date d'inscription
- jeudi 4 novembre 2004
- Statut
- Modérateur, Contributeur sécurité
- Dernière intervention
- 30 octobre 2019
essaie avec ça
lami20j
perl -pi.orig -e 's/^(\S+)\s+(\S+)/<data>$1<\/data><value>$2<\/value$>/' fichier--
lami20j
Zent
Merci pour ton aide en tout cas.
Effectivement, mon fichier sera amené à avoir plus de colonnes, mais j'imagine que le procédé reste le même.
En entrée :
1 01/01/2007
2 02/01/2007
3 03/01/2007
4 04/01/2007
Et la dernière commande me donne en sortie :
<data>1</data><value>01/01/2007</value215
<data>2</data><value>02/01/2007</value215
<data>3</data><value>03/01/2007</value215
<data>4</data><value>04/01/2007</value215
Merci encore
Effectivement, mon fichier sera amené à avoir plus de colonnes, mais j'imagine que le procédé reste le même.
En entrée :
1 01/01/2007
2 02/01/2007
3 03/01/2007
4 04/01/2007
Et la dernière commande me donne en sortie :
<data>1</data><value>01/01/2007</value215
<data>2</data><value>02/01/2007</value215
<data>3</data><value>03/01/2007</value215
<data>4</data><value>04/01/2007</value215
Merci encore
lami20j
- Messages postés
- 21331
- Date d'inscription
- jeudi 4 novembre 2004
- Statut
- Modérateur, Contributeur sécurité
- Dernière intervention
- 30 octobre 2019
tu pouvais me corriger quand même :-))
j'ai oublié un dollar $ à la fin
lami20j
j'ai oublié un dollar $ à la fin
perl -pi.orig -e 's/^(\S+)\s+(\S+)/<data>$1<\/data><value>$2<\/value>/' fichier--
lami20j
Zent
Ah oui tiens un ptit $ qui traine ^^
C'est super sympa de m'aider les gars.
Je vais encore chercher comment faire pour créer plusieurs fichiers
++
C'est super sympa de m'aider les gars.
Je vais encore chercher comment faire pour créer plusieurs fichiers
++
lami20j
- Messages postés
- 21331
- Date d'inscription
- jeudi 4 novembre 2004
- Statut
- Modérateur, Contributeur sécurité
- Dernière intervention
- 30 octobre 2019
ce n'est pas difficile de créer plusieurs fichiers
il faut seulement dire ce que tu veux faire exactement
à savoir que les commandes que tu as à ta disposition peuvent être exécuter sur plusieurs fichiers
il faut seulement dire ce que tu veux faire exactement
à savoir que les commandes que tu as à ta disposition peuvent être exécuter sur plusieurs fichiers
Zent
En fait en entrée j'ai un seul fichier :
1 01/01/2007
2 02/01/2007
3 03/01/2007
4 04/01/2007
Et je voudrais en sortie :
le fichier test1.xml:
<data>1</data><value>01/01/2007</value>
le fichier test2.xml:
<data>2</data><value>02/01/2007</value>
etc etc jusqu'à la fin du fichier d'entrée.
Merci
1 01/01/2007
2 02/01/2007
3 03/01/2007
4 04/01/2007
Et je voudrais en sortie :
le fichier test1.xml:
<data>1</data><value>01/01/2007</value>
le fichier test2.xml:
<data>2</data><value>02/01/2007</value>
etc etc jusqu'à la fin du fichier d'entrée.
Merci
lami20j
- Messages postés
- 21331
- Date d'inscription
- jeudi 4 novembre 2004
- Statut
- Modérateur, Contributeur sécurité
- Dernière intervention
- 30 octobre 2019
je n'ai pas testé
perl -ne 'open F ">>test${.}.xml";s/^(\S+)\s+(\S+)/<data>$1<\/data><value>$2<\/value>/;print F;close F;' fichier
jipicy
- Messages postés
- 40805
- Date d'inscription
- jeudi 28 août 2003
- Statut
- Modérateur
- Dernière intervention
- 10 août 2020
Testé et approuvé :
while read line; do echo $line | sed -r 's|(.*) (.*)|<data>\1</data><value>\2</value>|' > test${line% *}.xml; done < fichier_entrée;-))
Zent
C'est bizarre moi j'ai une erreur :
A file or directory in the path name does not exist.
sh[2]: test1^I01/01/2007.xml: 0403-005 Cannot create the specified file.
A file or directory in the path name does not exist.
sh[2]: test2^I02/01/2007.xml: 0403-005 Cannot create the specified file.
A file or directory in the path name does not exist.
sh[2]: test3^I03/01/2007.xml: 0403-005 Cannot create the specified file.
:/
A file or directory in the path name does not exist.
sh[2]: test1^I01/01/2007.xml: 0403-005 Cannot create the specified file.
A file or directory in the path name does not exist.
sh[2]: test2^I02/01/2007.xml: 0403-005 Cannot create the specified file.
A file or directory in the path name does not exist.
sh[2]: test3^I03/01/2007.xml: 0403-005 Cannot create the specified file.
:/
jipicy
- Messages postés
- 40805
- Date d'inscription
- jeudi 28 août 2003
- Statut
- Modérateur
- Dernière intervention
- 10 août 2020
jp@MDK:~/tmpfs ssh$ ls plop jp@MDK:~/tmpfs ssh$ while read line; do echo $line |sed -r 's|(.*) (.*)|<data>\1</data><value>\2</value>|' > test${line% *}.xml; done < plop jp@MDK:~/tmpfs ssh$ ls plop test1.xml test2.xml test3.xml test4.xml jp@MDK:~/tmpfs ssh$ cat test* <data>1</data><value>01/01/2007</value> <data>2</data><value>02/01/2007</value> <data>3</data><value>03/01/2007</value> <data>4</data><value>04/01/2007</value> jp@MDK:~/tmpfs ssh$;-))
lami20j
- Messages postés
- 21331
- Date d'inscription
- jeudi 4 novembre 2004
- Statut
- Modérateur, Contributeur sécurité
- Dernière intervention
- 30 octobre 2019
ma version tu l'as testé? :-))
jipicy
- Messages postés
- 40805
- Date d'inscription
- jeudi 28 août 2003
- Statut
- Modérateur
- Dernière intervention
- 10 août 2020
perl -ne 'open F ">>test${.}.xml";s/^(\S+)\s+(\S+)/<data>$1<\/data><value>$2<\/value>/;print F;close F;' plop Missing comma after first argument to open function at -e line 1, near "">>test${.}.xml";" Execution of -e aborted due to compilation errors.;-((
Corrige et je re-testerai ;-))
lami20j
- Messages postés
- 21331
- Date d'inscription
- jeudi 4 novembre 2004
- Statut
- Modérateur, Contributeur sécurité
- Dernière intervention
- 30 octobre 2019
- Messages postés
- 40805
- Date d'inscription
- jeudi 28 août 2003
- Statut
- Modérateur
- Dernière intervention
- 10 août 2020
tu pouvais me corriger
mais bon, avec l'anglais t'es comme je suis avec le français :-))
comma
mais bon, avec l'anglais t'es comme je suis avec le français :-))
comma
perl -ne 'open F, ">>test${.}.xml";s/^(\S+)\s+(\S+)/<data>$1<\/data><value>$2<\/value>/;print F;close F;' plop
Zent
>
jipicy
- Messages postés
- 40805
- Date d'inscription
- jeudi 28 août 2003
- Statut
- Modérateur
- Dernière intervention
- 10 août 2020
Wahou super les mecs ca marche (la version de lami20j)!!!
Merci à tous les deux, ta version doit aussi marcher jicipy mais je n'y suis pas arrivé.
En tout cas, merci encore les gars, vous m'avez enlevé une épine du pied!!!!!!
Merci à tous les deux, ta version doit aussi marcher jicipy mais je n'y suis pas arrivé.
En tout cas, merci encore les gars, vous m'avez enlevé une épine du pied!!!!!!
jipicy
- Messages postés
- 40805
- Date d'inscription
- jeudi 28 août 2003
- Statut
- Modérateur
- Dernière intervention
- 10 août 2020
jp@MDK:~/tmpfs ssh$ perl -ne 'open F, ">>test${.}.xml";s/^(\S+)\s+(\S+)/<data>$1<\/data><value>$2<\/value>/;print F;close F;' plop jp@MDK:~/tmpfs ssh$ ls plop test1.xml test2.xml test3.xml test4.xml test5.xml jp@MDK:~/tmpfs ssh$ cat test* <data>1</data><value>01/01/2007</value> <data>2</data><value>02/01/2007</value> <data>3</data><value>03/01/2007</value> <data>4</data><value>04/01/2007</value> jp@MDK:~/tmpfs ssh$;-))
PS. T'as un accès SSH depuis ton taf ? Si tu veux tu peux te logguer chez moi, je te passes l'@ IP et tes identifiants...
PS2. Je suis nul en anglais, mais bon y'a quand même des trucs que je sais... quand je suis pas dans le coma ;-DD
Zent
Désolé, je reviens...
perl -ne 'open F, ">>test${.}.xml";s/^(\S+)\s+(\S+)/<data>$1<\/data><value>$2<\/value><date>$3<\/date>/;print F;close F;' plop
En résultat j'ai :
<data>01/01/2007</data><value>29/06/2007</value><date></date> 01/12/2009
Pourquoi ça ne marche que jusqu'à 2?? T_T
Merci d'avance
perl -ne 'open F, ">>test${.}.xml";s/^(\S+)\s+(\S+)/<data>$1<\/data><value>$2<\/value><date>$3<\/date>/;print F;close F;' plop
En résultat j'ai :
<data>01/01/2007</data><value>29/06/2007</value><date></date> 01/12/2009
Pourquoi ça ne marche que jusqu'à 2?? T_T
Merci d'avance
lami20j
- Messages postés
- 21331
- Date d'inscription
- jeudi 4 novembre 2004
- Statut
- Modérateur, Contributeur sécurité
- Dernière intervention
- 30 octobre 2019
Salut,
ben oui, c'est normal
tu as ajouté dans la commande un $3 mais on n'a pas capturé le 3ème champ puisqu'on n'avait pas
donc decide toi et dit exactement ce que tu veux
tu peux toujours adapté une commande mais il faut savoir à quoi
si demain t'auras envie de changer quelque chose tu vas tester toujours la même commande ou tu vas la modifié sans savoir ce que tu fait, et ça sera normal que ça ne marchera pas
le mieux c'est de donner le nombre des champs ainsi que les balises
ben oui, c'est normal
tu as ajouté dans la commande un $3 mais on n'a pas capturé le 3ème champ puisqu'on n'avait pas
donc decide toi et dit exactement ce que tu veux
tu peux toujours adapté une commande mais il faut savoir à quoi
si demain t'auras envie de changer quelque chose tu vas tester toujours la même commande ou tu vas la modifié sans savoir ce que tu fait, et ça sera normal que ça ne marchera pas
le mieux c'est de donner le nombre des champs ainsi que les balises
lami20j
- Messages postés
- 21331
- Date d'inscription
- jeudi 4 novembre 2004
- Statut
- Modérateur, Contributeur sécurité
- Dernière intervention
- 30 octobre 2019
avec 17 champs la commande devienne trop longue et plus facile à la maintenir
si jamais t'oublie une seule virgule (comma je l'ai fait moi :-)) tu vas te casser la tête pour trouver l'erreur
un script sera plus adapté à ton cas
donc affiche ici les balises
et comment on doit les inserer dans tes futurs fichiers xml
je vais t'expliquer aussi la commande ou plutôt le script :-))
à toi
si jamais t'oublie une seule virgule (comma je l'ai fait moi :-)) tu vas te casser la tête pour trouver l'erreur
un script sera plus adapté à ton cas
donc affiche ici les balises
et comment on doit les inserer dans tes futurs fichiers xml
je vais t'expliquer aussi la commande ou plutôt le script :-))
à toi
Zent
Hello,
Voici un exemple concret de fichier XML que je voudrais en sortie :
<?xml version="1.0" encoding="UTF-8"?>
<record xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="aaa.xsd">
<id/>
<temp_id/>
<id2>$1</id2>
<ref>$2</ref>
<ref2>$3</ref2>
<name>$4</name>
<code1>$5</code1>
<scode1/>
<code2>$6</code2>
<code3>$7</code3>
<code4>$8</code4>
<inp_user_id/>
<date1>$9</date1>
<id3/>
<date2/>
<date3>$10</date3>
<date4/>
<date5/>
<date6>$11</date6>
<date7/>
<date8>$12</date8>
<amt/>
<amt_dt/>
<code5>$13</code5>
<amt2>$14</amt2>
<code6>$15</code6>
<amt3>$16</amt3>
<code7>$17</code7>
</record>
En entrée on peut avoir :
01/01/2007 29/06/2007 01/12/2009 AAA Name1 address1 name2 address2 EUR 10 BBB CCC DDD type1 text1 instruc1 instruc2
Et plusieurs lignes de ce type dans le fichier d'entrée.
A partir de chacune de ces lignes, créer un fichier XML avec un nom différent (par exemple avec le numéro de la ligne, peu importe) en remplissant le modèle plus haut.
Merci encore de prendre du temps pour m'aider :)
@++
Voici un exemple concret de fichier XML que je voudrais en sortie :
<?xml version="1.0" encoding="UTF-8"?>
<record xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="aaa.xsd">
55
<id/>
<temp_id/>
<id2>$1</id2>
<ref>$2</ref>
<ref2>$3</ref2>
<name>$4</name>
<code1>$5</code1>
<scode1/>
<code2>$6</code2>
<code3>$7</code3>
<code4>$8</code4>
<inp_user_id/>
<date1>$9</date1>
<id3/>
<date2/>
<date3>$10</date3>
<date4/>
<date5/>
<date6>$11</date6>
<date7/>
<date8>$12</date8>
<amt/>
<amt_dt/>
<code5>$13</code5>
<amt2>$14</amt2>
<code6>$15</code6>
<amt3>$16</amt3>
<code7>$17</code7>
</record>
En entrée on peut avoir :
01/01/2007 29/06/2007 01/12/2009 AAA Name1 address1 name2 address2 EUR 10 BBB CCC DDD type1 text1 instruc1 instruc2
Et plusieurs lignes de ce type dans le fichier d'entrée.
A partir de chacune de ces lignes, créer un fichier XML avec un nom différent (par exemple avec le numéro de la ligne, peu importe) en remplissant le modèle plus haut.
Merci encore de prendre du temps pour m'aider :)
@++