AppleScript et fichier TXT-XML |
Bienvenue invité ( Connexion | Inscription )
AppleScript et fichier TXT-XML |
2 Apr 2014, 15:44
Message
#1
|
|
Nouveau Membre Groupe : Membres Messages : 3 Inscrit : 24 Dec 2006 Membre no 76 376 |
Bonjour à tous,
Voila je me lance depuis peu dans le programation AS dans le but d'ameliorer quelques taches. J'ai un fichier texte formater comme un xml qui se présente comme ça : <?xml version="1.0" encoding="UTF-8"?> L'idée est donc de pouvoir récupérer des informations de ce document pour ensuite les utiliser sur un autre programme. Je voudrais par exemple récupérer les informations Container, format, dimension... et quelques autres Aujourd'hui je commence et j'en suis là mais aucun résultat et la je tourne en rond : set XMLfile to "/Users/SYLIC/Desktop/rapport/Rapport simple.xml" Merci de vos aides |
|
|
2 Apr 2014, 16:40
Message
#2
|
|
Macbidouilleur d'argent ! Groupe : Membres Messages : 757 Inscrit : 9 Aug 2006 Lieu : Ici, pourquoi ? Membre no 65 624 |
Salut ! Tu peux commencer avec ceci (j'ai copié ton exemple sur le Bureau et l'ai enregistré sous "test xml.xml") :
Code tell application "System Events"
set f to XML file "~/Desktop/test xml.xml" set root to XML element 1 of f set la_table to every XML element of every XML element of root -- tu auras comme résultat deux niveaux d'éléments XML, à toi de voir lesquels tuveux récupérer set _container to value of XML element 2 of XML element 2 of root -- pour, par exemple, récupérer la valeur de Container (comme container est un terme réservé, je l'ai précédé d'un underscore, tu peux le faire systématiquement, ou mettre my_container, ou the_container, ou MyContainer, ou TheContainer… ou tout autre chose :-) end tell -------------------- Jean-Marie Schwartz
[MacPro Quad-Core Intel Xeon 2,8 GHz • OS 10.10.5 • QuarkXPress 9.5.4.1 et 2017 • Adobe CS5 et CS6 • Linotype FontExplorerX Pro] « A l'école, c'est logique, l'écologie il faudrait l'enseigner : réapprendre la grammaire de l'eau, de l'air ou de la lumière… » (CharlElie Couture, « Les Ours blancs », in Fort Rêveur) |
|
|
2 Apr 2014, 16:59
Message
#3
|
|
Nouveau Membre Groupe : Membres Messages : 3 Inscrit : 24 Dec 2006 Membre no 76 376 |
Merci beaucoup pour cette avancée rapide.
Si je comprends donc la chose la valeur XML element X permet d'aller une ligne précise. Donc la nous sommes dans la partie <Generale>, mais pour passer à la suivante ? Il n'est pas possible d'aller chercher une valeur par rapport au nom ? par exemple je veux avoir la valeur de l'élement <item name="- Dimensions : ">1920*1080</item> Je suis un boulet. Oups j'ai été trop vite. J'ai compris. |
|
|
3 Apr 2014, 07:22
Message
#4
|
|
Macbidouilleur de bronze ! Groupe : Membres Messages : 264 Inscrit : 7 Dec 2013 Lieu : Ile de France Membre no 188 169 |
Bonjour,
Effectivement CMJS a raison, l'utilisation du numéro d'item permet d'atteindre tous les éléments. Mais le code risque de devenir illisible. Je te conseille donc de préférer l'utilisation des noms de propriétés plutôt que leur numéro. De plus , l'avantage est que tu n'aura plus à te soucier de l'ordre. Voici un exemple : (j'ai aussi copié ton fichier sur mon bureau) CODE tell application "System Events" to set Mon_Bureau to ((path to desktop folder of user domain) as string) set Mon_xml to Mon_Bureau & "Test xml.xml" tell application "System Events" tell contents of XML file Mon_xml set X_Nom to value of XML element "- Nom : " of XML element "General" of XML element 1 set X_Container to value of XML element "- Container : " of XML element "General" of XML element 1 -- idem pour toutes les autres valeurs, par exemple ci-dessous pour la valeur "Format" du bloc "Audio" set X_Format to value of XML element "- Format : " of XML element "Audio" of XML element 1 end tell end tell Enfin, je te suggère aussi de nommer tes propriétés différemment que "-" <espace> valeur <espace< ":" <espace>. Par exemple "- Nom : " peut tout simplement être "Nom". c'est plus court, plus simple, et le risque de faute est d'autant diminué. Cordialement -------------------- iiMac 24 M1 16Go/1To 13.5.1
iMac 27 i5 3,1GHz 8Go/1To 10.11.6 / 10.6.8 iMac 20 C.Duo 2,6Ghz 8Go/350Go 10.6.8 / 10.11 Mini C.Duo 2,0Ghz 2Go/500Go 10.6.8 |
|
|
3 Apr 2014, 08:05
Message
#5
|
|
Macbidouilleur d'Or ! Groupe : Membres Messages : 2 964 Inscrit : 3 Nov 2005 Membre no 49 239 |
Avant même de te lancer dans ces apple scripts il faudrait nous dire comment ce programme va utiliser ces données. Un fichier de texte ? un fichier XML ? des paramètres ?
|
|
|
3 Apr 2014, 12:20
Message
#6
|
|
Macbidouilleur de bronze ! Groupe : Membres Messages : 264 Inscrit : 7 Dec 2013 Lieu : Ile de France Membre no 188 169 |
Visiblement, le besoin exprimé par bechbech94 est de lire ces "méta-données" à partir d'un fichier XML pour en faire des variables utilisées dans un script....
-------------------- iiMac 24 M1 16Go/1To 13.5.1
iMac 27 i5 3,1GHz 8Go/1To 10.11.6 / 10.6.8 iMac 20 C.Duo 2,6Ghz 8Go/350Go 10.6.8 / 10.11 Mini C.Duo 2,0Ghz 2Go/500Go 10.6.8 |
|
|
3 Apr 2014, 13:13
Message
#7
|
|
Nouveau Membre Groupe : Membres Messages : 3 Inscrit : 24 Dec 2006 Membre no 76 376 |
Effectivement,
Le projet est à partir d'un élément video, de le passer dans VIDEOSPEC qui me permet alors d'avoir un rapport comme mon exemple. Ensuite je recupere les variables pour pouvoir les utiliser de différentes manières de facon à faire un fichier excel, lancer d'autres process et d'autres choses encore si besoin. Pour le moment, je suis parti sur la base de CMJS, mais je garde le principe de Pbell pour l'amélioration ensuite. La j'arrive bien à exploiter les données et pour le moment j'avance. Un grand merci à tous de contribuer pour les nouveaux |
|
|
3 Apr 2014, 14:05
Message
#8
|
|
Macbidouilleur d'Or ! Groupe : Membres Messages : 2 964 Inscrit : 3 Nov 2005 Membre no 49 239 |
avec un script shell sur ton fichier celà donne ça pour export excel:
Code Nom;PROD_PROJECT.mov Container;MOV QuickTime Taille du fichier;3,586 Go Longueur;3mn 3s Format;Apple ProRes 422 (HD) Fréquence d'image (i/s);max.;--/ moyen;25.000 / min.;--- Profil d'encodage;High Dimensions;1920*1080 Proportion de l'image;16:9 Entrelacement;progressif Format;Uncompressed PCM Débit;1 152 Kbps Résolution;24 bits Fréquence;48.0 KHz Nbre de canaux;mono Sous-titres;pas de sous-titre Album;non défini Artiste;non défini Voici le script qui peut être appelé depuis AppleScript: Code cat ton_fichier_xml | sed "s/<item name=\"//g" | sed "/General>/d" | sed "/Analysis>/d" | sed "/Audio>/d" | sed "/Metadata>/d" | sed "/Video>/d" | sed "/Miscellaneous>/d" | sed "s/- //g" | sed "/<?xml/d" | sed "/Analyzed file/d" | sed "s#</item>##g" | sed "s/\">//g" | sed "s/ : /;/g"
|
|
|
4 Apr 2014, 18:38
Message
#9
|
|
Macbidouilleur d'Or ! Groupe : Membres Messages : 2 486 Inscrit : 29 Aug 2002 Membre no 3 340 |
Il existe des extensions OSAX pour XML : http://www.latenightsw.com/freeware/xml-tools/xml-parsing/ mais après il faut travailler sur l'arbre "DOM" résultant de l'analyse.
Je trouve que le nom de l'attribut "name" mal choisi, parce que le contenu n'est pas un nom, mais une étiquette associée à un champ. En fait, on a une liste de couple (clé, valeur) sauf que la clé, c'est une description au lieu d'être un symbole concis et expressif. Suivant cette logique originale, les éléments intermédiares sont superflus, ils auraient pu être inclus dans "name" "General - Nom :" ou "Video - Format :" , et on aurait une simple liste d'items. C'est juste une remarque, ça ne gêne en rien l'exploitation des données. J-P |
|
|
7 Apr 2014, 16:23
Message
#10
|
|
Adepte de Macbidouille Groupe : Membres Messages : 242 Inscrit : 2 Feb 2009 Membre no 130 546 |
Une autre approche possible :
Tu extrais ce que tu veux avec grep CODE set nom to do shell script "grep -Po '(<item name=\"- Nom : \">)\\K([^<]*)(?=<\\/.+)' ~/Desktop/test.xml" set container to do shell script "grep -Po '(<item name=\"- Container : \">)\\K([^<]*)(?=<\\/.+)' ~/Desktop/test.xml" et ainsi de suite ça fonctionne avec ton fichier test.xml sur le bureau Ce message a été modifié par Carlitospsd - 7 Apr 2014, 16:23. |
|
|
Nous sommes le : 23rd April 2024 - 20:28 |