Bonjour et merci par avance pour vos lumières,

Je suis en train de terminer une petite application et j'ai un petit souci pour demander à mon script de lire (read) un fichier en lui fournissant son chemin.

Je résume :

etape 1

J'extrais un chemin d'un fichier XML :
"file:///Users/samysamy/Desktop/DossierTemporaire/a%CC%80_A%CC%80_A%CC%82_%C3%A6_%C3%86_e%CC%81_E%CC%81_e%CC%80_E%CC%80_e%CC%82_E%CC%82_e%CC%88_E%CC%88_i%CC%82_I%CC%82_I%CC%80_I%CC%88_%C5%93_o%CC%82_O%CC%82_O%CC%80_u%CC%80_U%CC%80_c%CC%A7_C%CC%A7_%3F_!_%E2%82%AC_$_&.mov"

etape 2

Je passe ce chemin à la moulinette d'une petite routine replace_chars pour en récupérer les bons caractères et une autre pour supprimer les 8 premiers caractères (i.e "file:///)
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
 
repeat with k from 1 to (count of ListChar)
	set thePath to replace_chars(thePath, item k of ListChar, item k of ListCharEqui)
end repeat
	set thePathTerminal to thePath
	set thePath to (text 9 thru (length of thePath) in thePath)
J'obtiens le string : Users/samysamy/Desktop/DossierTemporaire/à_À_Â_æ_Æ_é_É_è_È_ê_Ê_ë_Ë_î_Î_Ì_Ï_œ_ô_Ô_Ò_ù_Ù_ç_Ç_?_!_€_$_&.mov

Il servira à l'étape 4

etape 3

Je fabrique deux chemins qui serviront au Terminal et au programme un peu plus tard.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
 
set LCheminTXTTerminal to SingleGuil & "desktop/Silence" & theDate & ".txt" & SingleGuil
set LCheminTXTFinder to (":Desktop:Silence" & theDate & ".txt") as string
Note : theDate est une string fabrique avant à partir de la date et l'heure actuelle

etape 4

Je fabrique un ligne de commande qui sera livrée juste après au Terminal
Code : Sélectionner tout - Visualiser dans une fenêtre à part
set LigneCommande to " ffmpeg -i " & SingleGuil & thePathTerminal & SingleGuil & " -af silencedetect=n=" & R_dBMin & "dB:d=" & R_DurMin & " -f s16le -y /dev/null 2>&1 | tee " & LCheminTXTTerminal
etape 5

J'execute une petite routine pour lancer la commande dans le Terminal
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
 
tell application "Terminal"
	do script LigneCommande 
end tell
Et cela fonctionne car j'obtiens bien un petit fichier .txt placé sur le bureau. Il est nourri comme je le voudrais (par le contenu de la fenêtre du Terminal grâce à la commande "tee").
La commande a demandé au Terminal d'analyser un fichier audio/video et de repérer les parties du fichier dont le volume est inférieur à la valeur R_dBMin entrée par l'utilisateur du programme et qui dure plus de R_DurMin seconde. Tout cela est donc ensuite écrit dans le fichier .txt en question...

JUSQU'ICI TOUT VA BIEN

etape 6

Comme je ne sais pas trop faire autrement et que je veux attendre que le Terminal ait fini sa tâche puis nourri ce fichier .txt, je lance une boucle qui voudrait, toutes les secondes, compter le nombre de lignes du fichier .txt. J'en profite à chaque test pour récupérer ces lignes dans une variable LMes_LignesTXT que je traiterais plus tard.
Lorsque le nombre de lignes ne croît plus, la routine se termine et devrait donc livrer ce texte LMes_LignesTXT.
Note: le plus souvent le Terminal met moins de 2 ou 3 secondes pour accomplir sa tâche. Même sur de très longs fichiers vidéo/audio
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
 
repeat while TAcheEnCours
	delay 1
	set LsourceTXT to  LCheminTXTFinder as file
	set LMes_LignesTXT to paragraphs of (read LsourceTXT)
	if (count of LMes_LignesTXT) > n then
		set n to (count of LMes_LignesTXT)
	else
		set TAcheEnCours to false
		tell application "Terminal"
			quit
		end tell
		exit repeat
	end if
end repeat
set TAcheEnCours to true
return LMes_LignesTXT
MAIS MAIS MAIS
Automator annonce une erreur. Il n'y arrive pas avec cette partie
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
 
set LsourceTXT to  LCheminTXTFinder as file
set LMes_LignesTXT to paragraphs of (read LsourceTXT)
Et je pense qu'il y a soit un problème pour convertir cette string en chemin de fichier (en "file") soit que commencer le chemin par desktop n'est pas suffisant pour lui et qu'il lui faudrait peut être "DisqueDeDépart:Utilisateur" avant...
Donc je me demande comment faire pour que ce chemin puisse être lu et converti en ... LMes_LignesTXT exploitables ensuite !!!

Questions subsidiaires

Ce programme est un peu tordu ..

Question 1 :

Je suis certain qu'au lieu de lancer le Terminal, je pourrais utiliser un Do Shell Script avec la même commande... mais il semble que
Code : Sélectionner tout - Visualiser dans une fenêtre à part
do shell script LigneCommande
au lieu de
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
 
tell application "Terminal"
	do script LigneCommande 
end tell
Ne fonctionne pas !
Il doit falloir écrire la commande autrement.

Question 2 :

Au lieu d'écrire un fichier texte pour ensuite en récupérer le contenu, je suis certain que je pourrais remplacer la commande "tee" du Terminal par un truc du genre "transfert le contenu de la fenêtre du terminal dans une variable que je peux récupérer dans le programme...
C'est sauf que je ne sais pas faire vu que je n'y connais rien en commande du Terminale !!!

Merci pour votre éventuelle aide pour le nul que je suis... et qui malheureusement n'a pas d'autre connaissance que l'AppleScript (et encore, comme on peut le voir ici...)

Voici un lien vers ce que l'application fait :
https://vimeo.com/415340397/f28424553d