IPB

Bienvenue invité ( Connexion | Inscription )

 
Reply to this topicStart new topic
> AppleScript et fichier TXT-XML
Options
bechbech94
posté 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"?>
<Analysis>
<item name="Analyzed file">1</item>
<General>
<item name="- Nom : ">PROD_PROJECT.mov</item>
<item name="- Container : ">MOV - QuickTime</item>
<item name="- Taille du fichier : ">3,586 Go</item>
<item name="- Longueur : ">3mn 3s</item>
</General>
<Video>
<item name="- Format : ">Apple ProRes 422 (HD)</item>
<item name="- Fréquence d'image (i/s) : ">max. : --- / moyen : 25.000 / min. : ---</item>
<item name="- Profil d'encodage : ">High</item>
<item name="- Dimensions : ">1920*1080</item>
<item name="- Proportion de l'image : ">16:9</item>
<item name="- Entrelacement : ">progressif</item>
</Video>
<Audio>
<item name="- Format : ">Uncompressed PCM</item>
<item name="- Débit : ">1 152 Kbps</item>
<item name="- Résolution : ">24 bits</item>
<item name="- Fréquence : ">48.0 KHz</item>
<item name="- Nbre de canaux : ">mono</item>
</Audio>
<Miscellaneous>
<item name="- Sous-titres : ">pas de sous-titre</item>
<Metadata>
<item name="- Album : ">non défini</item>
<item name="- Artiste : ">non défini</item>
</Metadata>
</Miscellaneous>
</Analysis>



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"
tell application "System Events"
tell XML element 1 of contents of XML file XMLfile
set ContainerVar to (value of (XML elements whose name is "Analyzed file")) as text
end tell
end tell
ContainerVar


Merci de vos aides
Go to the top of the page
 
+Quote Post
CMJS
posté 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)
Go to the top of the page
 
+Quote Post
bechbech94
posté 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.
Go to the top of the page
 
+Quote Post
PBell
posté 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
Go to the top of the page
 
+Quote Post
noop
posté 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 ?
Go to the top of the page
 
+Quote Post
PBell
posté 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
Go to the top of the page
 
+Quote Post
bechbech94
posté 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
Go to the top of the page
 
+Quote Post
noop
posté 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"
Go to the top of the page
 
+Quote Post
Jaypee
posté 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

Go to the top of the page
 
+Quote Post
Carlitospsd
posté 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.
Go to the top of the page
 
+Quote Post

Reply to this topicStart new topic
1 utilisateur(s) sur ce sujet (1 invité(s) et 0 utilisateur(s) anonyme(s))
0 membre(s) :

 



Nous sommes le : 23rd April 2024 - 20:28