Lecture sur un fichier xsd
Résolu/Fermé
evita8
Messages postés
32
Date d'inscription
jeudi 27 mars 2008
Statut
Membre
Dernière intervention
26 mai 2008
-
29 mars 2008 à 14:56
evita8 Messages postés 32 Date d'inscription jeudi 27 mars 2008 Statut Membre Dernière intervention 26 mai 2008 - 31 mars 2008 à 00:10
evita8 Messages postés 32 Date d'inscription jeudi 27 mars 2008 Statut Membre Dernière intervention 26 mai 2008 - 31 mars 2008 à 00:10
A voir également:
- Lecture sur un fichier xsd
- Fichier rar - Guide
- Comment ouvrir un fichier epub ? - Guide
- Comment réduire la taille d'un fichier - Guide
- Fichier host - Guide
- Ouvrir un fichier .bin - Guide
3 réponses
jipicy
Messages postés
40842
Date d'inscription
jeudi 28 août 2003
Statut
Modérateur
Dernière intervention
10 août 2020
4 897
29 mars 2008 à 18:08
29 mars 2008 à 18:08
Pour ce qui concerne SED, je te renvoie vers la FAQ : SED - The Stream EDitor - Part I
Avant d'insérer la commande dans un script, vérifie quelle marche bien déjà en ligne de commande...
Avant d'insérer la commande dans un script, vérifie quelle marche bien déjà en ligne de commande...
sed -n ' "-n" demande d'affichage que sur demande avec la commande "p" /<xsd:complexType/ le motif à rechercher { Regroupement de commande à appliquer si le motif est trouvé n Demande l'ajout de la ligne suivante dans l'espace de travail en remplacement de la ligne courante ; Séparateur de commande n; idem que précédemment s/.../.../ Commande de substitution .*="\([^ "]*\).* Expression régulière à diviser en 3 parties .*=" Grace à la gourmandise des expressions régulières, on récupère tout ce qui se trouve avant le dernier mot sur la ligne précédé d'un signe égale et suivi d'un guillemet \([^ "]*\) Sous-expression. Cette partie est encadrée par des parenthèses (elles même protégées par des anti-slashs) pour pouvoir être réutilisée dasn la partie de remplacement. Elle matche donc tout ce qui suivait le signe égale et le guillemet précédent, jusqu'au prochain guillemet qui délimitera sa portée et ne devra pas être pris .* Le reste de la ligne \1 Le \1 (référence arrière) fait donc référence à la sous-expression matchée précédemment p La commande d'affichage. On affiche alors la référence à "\1" ;q Et on demande de quitter immédiatement le script sans chercher d'autres lignes (commande "q" (quit)) }' Fin du groupement de commandes;-))
jipicy
Messages postés
40842
Date d'inscription
jeudi 28 août 2003
Statut
Modérateur
Dernière intervention
10 août 2020
4 897
29 mars 2008 à 15:26
29 mars 2008 à 15:26
Salut,
Avant de te donner une solution, 2 ou 3 petites choses...
Déjà pour récupérer le numéro de ligne, un simple :
Ensuite, ta vérification du code retour ne sert à rien dans la mesure ou tu fais un "echo" avant et par conséquent, que la variable soit pleine ou vide, le "echo" se fera quand même et c'est le code retour de la commande "echo" qui sera testé et retournera toujours "vrai" !
Ceci dit, voilà une solution à ton problème :
Avant de te donner une solution, 2 ou 3 petites choses...
Déjà pour récupérer le numéro de ligne, un simple :
grep -n " *<xsd:complexType name=\"Arbre\">" fichier.xsdsuffit amplement.
Ensuite, ta vérification du code retour ne sert à rien dans la mesure ou tu fais un "echo" avant et par conséquent, que la variable soit pleine ou vide, le "echo" se fera quand même et c'est le code retour de la commande "echo" qui sera testé et retournera toujours "vrai" !
Ceci dit, voilà une solution à ton problème :
sed -n '/<xsd:complexType name="Arbre">/{n;n;s/.*="\([^ "]*\).*/\1/p}' fichier.xsd Branche;-))
evita8
Messages postés
32
Date d'inscription
jeudi 27 mars 2008
Statut
Membre
Dernière intervention
26 mai 2008
29 mars 2008 à 16:33
29 mars 2008 à 16:33
Merci pour ta réponse !
En fait je me suis mal exprimé... désolé..
Je ne suis pas censé connaître le nom du sous élément (Branche) ; c'est pour cela que je voulais récupérer toute la ligne pour ensuite pouvoir prendre le nom
En fait je me suis mal exprimé... désolé..
Je ne suis pas censé connaître le nom du sous élément (Branche) ; c'est pour cela que je voulais récupérer toute la ligne pour ensuite pouvoir prendre le nom
jipicy
Messages postés
40842
Date d'inscription
jeudi 28 août 2003
Statut
Modérateur
Dernière intervention
10 août 2020
4 897
>
evita8
Messages postés
32
Date d'inscription
jeudi 27 mars 2008
Statut
Membre
Dernière intervention
26 mai 2008
29 mars 2008 à 16:56
29 mars 2008 à 16:56
sed -n '/<xsd:complexType/{n;n;s/.*="\([^ "]*\).*/\1/p;q}';-))
evita8
Messages postés
32
Date d'inscription
jeudi 27 mars 2008
Statut
Membre
Dernière intervention
26 mai 2008
>
jipicy
Messages postés
40842
Date d'inscription
jeudi 28 août 2003
Statut
Modérateur
Dernière intervention
10 août 2020
29 mars 2008 à 17:41
29 mars 2008 à 17:41
Merci pour ta réponse.
Excuse ma bêtise mais je ne comprends vraiment pas ce que fait cette ligne !!
Ce que je crois avoir compris :
'/<xsd:complexType/{n;n;s/.*="\([^ "]*\).*/\1/p;q}' ->la requête
/<xsd:complexType/ -> 1° expression regulière
{n;n;s -> je ne vois pas...
/.*="\([^ "]*\).*/ -> 2° expression régulière
\([^ "]*\) -> portion d'expression régulière
{n;n;s/.*="\([^ "]*\).*/\1/p;q}\1/p;q} -> la commande
p envoie le résultat sur la sortie standard et que fais q ?
Et j'ai une erreur lors du lancement du script :
+ sed -n '/<xsd:complexType/{n;n;s/.*="\([^ "]*\).*/\1/p;q}' fichier.xsd
sed: 1: "/<xsd:complexType/{n;n; ...": extra characters at the end of q command
I need help !!
Excuse ma bêtise mais je ne comprends vraiment pas ce que fait cette ligne !!
Ce que je crois avoir compris :
'/<xsd:complexType/{n;n;s/.*="\([^ "]*\).*/\1/p;q}' ->la requête
/<xsd:complexType/ -> 1° expression regulière
{n;n;s -> je ne vois pas...
/.*="\([^ "]*\).*/ -> 2° expression régulière
\([^ "]*\) -> portion d'expression régulière
{n;n;s/.*="\([^ "]*\).*/\1/p;q}\1/p;q} -> la commande
p envoie le résultat sur la sortie standard et que fais q ?
Et j'ai une erreur lors du lancement du script :
+ sed -n '/<xsd:complexType/{n;n;s/.*="\([^ "]*\).*/\1/p;q}' fichier.xsd
sed: 1: "/<xsd:complexType/{n;n; ...": extra characters at the end of q command
I need help !!
jipicy
Messages postés
40842
Date d'inscription
jeudi 28 août 2003
Statut
Modérateur
Dernière intervention
10 août 2020
4 897
30 mars 2008 à 23:46
30 mars 2008 à 23:46
sed -n '/<xsd:complexType name="Feuille1">/,/<\/xsd:complexType>/{//d;s/[^ ]* //;s/ /\n/g;s/\/>$//;p}'ou
sed -n ' /<xsd:complexType name="Feuille1">/,/<\/xsd:complexType>/{ //d s/[^ ]*// s/ [^=]*=//g s/""/\n/g s/\/>$// s/^"\|"$//g p }' fichier
Le 1er renvoie :
name="nom" type="xsd:string" use="required" name="numero" type="xsd:int" use="required"
Le second :
nom xsd:string required numero xsd:int required;-))
evita8
Messages postés
32
Date d'inscription
jeudi 27 mars 2008
Statut
Membre
Dernière intervention
26 mai 2008
31 mars 2008 à 00:10
31 mars 2008 à 00:10
Mille merci ! ça marche !
29 mars 2008 à 18:57
J'avais un message d'erreur tout à l'heure à cause du ";" manquant après la commande q
30 mars 2008 à 00:41
J'ai maintenant un autre soucis :
Je souhaite parcourir mon fichier entre la balise <xsd:complexType name="Branche"> et sa balise fermante, dans le but de réccupérer la ligne
<xsd:attribute name="contenance" type="xsd:int" use="required"/>
Ma ligne de commande :
sed -n '/<xsd:complexType name="Branche">/,/<\/xsd:complexType>/"<xsd:attribute/p"' fichier.xsd
Ou peut être le problème ?
30 mars 2008 à 09:14
30 mars 2008 à 15:40
Merci pour cette ligne de commande !
Un petit hic : elle ne fonctionne chez moi que si je mets un ";" après la commande "p"
Est ce normal ? Il me semble que la dernière commande avant le "}" n'est pas suivie du ";"
[adresse[,adresse]]{commande1; commande2; commande3}
Autre chose,
J'ai mis le premier motifs dans une variable :
debut="<xsd:complexType name="Branche">"
Quelle est la bonne syntaxe ?
sed -n '"$debut",/<\/xsd:complexType>/{/<xsd:attribute/p;}' fichier.xsd
Merci !
30 mars 2008 à 15:45
Est ce normal ?
Ça dépend peut être de ta version de "sed"... :-\
Pour les variables, voir :
SED - The Stream EDitor - Part II - Le remplacement de variables
;-))