Contenu | Rechercher | Menus

Annonce

Ubuntu-fr vend de superbes t-shirts et de belles clés USB 32Go
Rendez-vous sur la boutique En Vente Libre

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#26 Le 19/03/2019, à 11:02

BenjiBoy

Re : [RESOLU] Récupération valeur variable JS avec bash [+ mise en forme]

Hello tous,

bon suis en train de faire mon programme de récupération et mise en forme des données.
J'ai opté pour un lftp pour la récupération sur la bestiole.
Ensuite avec les fichiers xml je veux récupérer les valeurs des variables mais je me heurte à deux problèmes :

- Les valeurs des variables peuvent être négative ou positive
- Les valeurs des variables peuvent contenir différents nombre de caractère.

Exemples

Chaîne jour 1
Voltage : 26,123V
Current : 4,123 A

Chaîne jour 2
Voltage : 26.51 V
Current : -0.967 A

Je ne sais que récupérer un nombre de caractère ou un champ dans une ligne mais pas comment récupérer seulement une partie du champ, comrpise entre deux caractère
Voilà un échantillon du xml :

<SystemDate value="18/02/19"/>
<SystemTime value="00:41:10"/>
   <Data Num="24" Address="" Name="Battery 1 voltage" Unit="mV" Value="26765" Status="Ok"/>
   <Data Num="12" Address="" Name="Battery 1 current" Unit="mA" Value="-105" Status="Ok"/>
   <Data Num="5" Address="" Name="Battery 1 temperature" Unit="°C" Value="149" Status="Ok"/>

Comment à partir de cela (au dessus,) j'obtiendrai cela :

18/02/19, 00:41:10, 26765, -105, 149

a+

Hors ligne

#27 Le 19/03/2019, à 12:37

Watael

Re : [RESOLU] Récupération valeur variable JS avec bash [+ mise en forme]

salut,

le XML se traite avec XSLT.
soit en ligne de commande avec xmlstarlet, soit avec un "script" xslt et xsltproc, ou xalan, ou...


eval, c'est mal.

Hors ligne

#28 Le 19/03/2019, à 13:35

BenjiBoy

Re : [RESOLU] Récupération valeur variable JS avec bash [+ mise en forme]

Ah oui en effet, j'avais essayé xmllint mais je n'arrive pas à l'utiliser. xmlstarlet en revanche me permet de récupérer les valeurs que je veux de manière plus ergonomique.
Je bidouille mon programme en conséquence, je reviens vers vous si ça coince.
Et je reviendrai si ça marche aussi, d'ailleurs.

Merci tout plein,
a+

Hors ligne

#29 Le 29/03/2019, à 10:47

BenjiBoy

Re : [RESOLU] Récupération valeur variable JS avec bash [+ mise en forme]

Hello,

bien alors je suis presque au bout de mes peines, mais je bloque sur une utilisation de xmlstarlet.

Sur ce site tout indiqué pour ma problématique, on explique comment récupérer la valeur de l'attribut d'un tag, quand cet attribut a lui-même une certain valeur (regarder l'exemple n°3 sur le site).

Un bout de mon xml :

<?xml version="1.0" encoding="UTF-8"?>
<StationData>
	<Station>
		<Name value="OGDF"/>
		<IP value="192.168.1.10"/>
		<SystemDate value="16/03/19"/>
		<SystemTime value="03:18:35"/>
		<Status value="ECOUTE"/>
	</Station>
	<Digital>		
		<Data Num="0" Address="20510" Name="Scientific equipment 1 power supply" Value="1" Count="0"/>
		<Data Num="1" Address="20511" Name="Scientific equipment 2 power supply" Value="1" Count="0"/>
		<Data Num="2" Address="20512" Name="Scientific equipment 3 power supply" Value="0" Count="0"/>
		[...]
                <Data Num="63" Address="" Name="Bootloader gateway inhibition" Value="1" Count="0"/>
		<Data Num="64" Address="" Name="Bootloader gateway connection status" Value="0" Count="0"/>
		<Data Num="65" Address="20546" Name="NTP Synchro" Value="0" Count="0"/>
		<Data Num="66" Address="" Name="VPN start connexion" Value="0" Count="0"/>
	</Digital>
	<Analog>
		<Data Num="2" Address="" Name="Unassigned1" Unit="" Value="0" Status="Ok"/>
		<Data Num="3" Address="" Name="Unassigned2" Unit="" Value="0" Status="Ok"/>
		<Data Num="4" Address="" Name="Cabinet temperature" Unit="°C" Value="187" Status="Ok"/>
		<Data Num="5" Address="" Name="Battery 1 temperature" Unit="°C" Value="170" Status="Ok"/>
		<Data Num="6" Address="" Name="Battery 2 temperature" Unit="°C" Value="168" Status="Ok"/>
		<Data Num="7" Address="" Name="Battery 3 temperature" Unit="°C" Value="171" Status="Ok"/>
		<Data Num="8" Address="" Name="Battery 4 temperature" Unit="°C" Value="173" Status="Ok"/>
		<Data Num="9" Address="" Name="Battery 5 temperature" Unit="°C" Value="170" Status="Ok"/>
		<Data Num="10" Address="" Name="Caisson temperature" Unit="°C" Value="170" Status="Ok"/>
		<Data Num="11" Address="" Name="Charger chip temperature" Unit="°C" Value="230" Status="Ok"/>
		<Data Num="12" Address="" Name="Battery 1 current" Unit="mA" Value="333" Status="Ok"/>
		<Data Num="13" Address="" Name="Battery 2 current" Unit="mA" Value="-8" Status="Ok"/>
		<Data Num="14" Address="" Name="Battery 3 current" Unit="mA" Value="0" Status="Ok"/>
		<Data Num="15" Address="" Name="Battery 4 current" Unit="mA" Value="0" Status="Ok"/>
		<Data Num="16" Address="" Name="Battery 5 current" Unit="mA" Value="8" Status="Ok"/>
		<Data Num="17" Address="" Name="Charger input current" Unit="mA" Value="13" Status="Ok"/>
		<Data Num="18" Address="" Name="Charger output current" Unit="mA" Value="0" Status="Ok"/>
		<Data Num="19" Address="" Name="Main power supply current" Unit="mA" Value="27" Status="Ok"/>
		<Data Num="20" Address="" Name="SCIENCE power supply current" Unit="mA" Value="99" Status="Ok"/>
		<Data Num="21" Address="" Name="SUPERVISION power supply current" Unit="mA" Value="68" Status="Ok"/>
		<Data Num="22" Address="" Name="MODEM power supply current" Unit="mA" Value="128" Status="Ok"/>
		<Data Num="23" Address="" Name="PLC power supply current" Unit="mA" Value="55" Status="Ok"/>
		<Data Num="24" Address="" Name="Battery 1 voltage" Unit="mV" Value="25938" Status="Ok"/>
		<Data Num="25" Address="" Name="Battery 2 voltage" Unit="mV" Value="4378" Status="Ok"/>
		[...]
                <Data Num="66" Address="20484" Name="battery mode timer" Unit="m" Value="60" Status="Ok"/>
		<Data Num="67" Address="20486" Name="eco mode timer" Unit="m" Value="300" Status="Ok"/>
		<Data Num="68" Address="20485" Name="ecoute mode timer" Unit="m" Value="60" Status="Ok"/>
	</Analog>	
	<Counters>
	</Counters>		
</StationData>

Ma commande :

xmlstarlet sel -T -t -m /StationData/Analog/Data -v "concat(StationData/Analog/Data[@Num="24"]/@Value,',',@Unit)" -n myfile.xml

ce qui me donne :

,
,
,°C
,°C
,°C
,°C
,°C
,°C
,°C
,°C
,mA
,mA
,mA
,mA
,mA
,mA
,mA
,mA
,mA
,mA
,mA
,mA
,mV
,mV
,mV
,mV
,mV
,mV
,mV
,mV
,mV
,%
,
,mV
,
,mV
,min
,mV
,°C
,%
,hPa
,s
,
,
,
,
,
,
,h
,m
,h
,m
,m
,mA
,s
,mV
,m
,
,
,
,
,
,
,
,m
,m
,m

Alors qu'il ne devrait y avoir que la ligne /StationData/Analog/Data/ pourtant le valeur "24" sur son attribut "Num".
Avez-vous une idée de pourquoi ?

a+

Dernière modification par BenjiBoy (Le 03/04/2019, à 08:13)

Hors ligne

#30 Le 29/03/2019, à 13:16

BenjiBoy

Re : [RESOLU] Récupération valeur variable JS avec bash [+ mise en forme]

Yop,

ayé, à force, j'y suis arrivé.
C'était un détail à la con, comme souvent. Jugez :
Avant.

xmlstarlet sel -T -t -m /StationData/Analog/Data -v "concat(StationData/Analog/Data[@Num="24"]/@Value,',',@Unit)" -n myfile.xml

Après

xmlstarlet sel -T -t -m /StationData/Analog/Data[@Num=24] -v "concat(/StationData/Analog/Data[@Num="24"]/@Value,',',@Unit)" -n myfile.xml

Notez d'un part, la précision de la ligne après l'argument "-m" (match) avec l'attribut "Num24", qui lui force une réponse sur une seule ligne (si le match ne donne qu'un résultat), et d'autre part le rajoute d'un slash sur la partie "-v" (Value of)

Je peux ainsi faire une boucle qui applique cette commande à l'ensemble des fichiers d'une journée, puis faire un graphe de l'ensemble avec gnuplot.

Youpi.

Dernière modification par BenjiBoy (Le 29/03/2019, à 13:20)

Hors ligne

#31 Le 29/03/2019, à 15:35

Watael

Re : [RESOLU] Récupération valeur variable JS avec bash [+ mise en forme]

salut,

Sur ce site

quelle est l'adresse de ce site ?


eval, c'est mal.

Hors ligne

#32 Le 03/04/2019, à 08:13

BenjiBoy

Re : [RESOLU] Récupération valeur variable JS avec bash [+ mise en forme]

Oups pardon, j'ai édité mon message pour inclure le lien que j'ai oublié.

Hors ligne