IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

AppleScript Discussion :

Modifier le contenu d'un fichier textedit


Sujet :

AppleScript

  1. #21
    Membre à l'essai
    Homme Profil pro
    Enseignant
    Inscrit en
    Août 2014
    Messages
    50
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2014
    Messages : 50
    Points : 15
    Points
    15
    Par défaut Un petit écueil
    Bonjour,

    j'ai écrit plusieurs petit AppleScript avec l'aide de PBELL il y a qq temps déjà.
    Le principe est à chaque fois de lire ligne par ligne un paragraphe. on créer un nouveau document en ayant d'abord mis toutes les lignes du document original dans Mes_lignes .... Chaque ligne est lu puis une ligne s'en inspirant est écrite dans le nouveau document ("write (Ligne & return) to file Fichier starting at eof". Et on lit la suivante dans l'originale (Mes_lignes) etc...
    Donc le nouveau document s'écrit ligne par ligne.
    Cette fois j'ai un petit souci car pour modifier une ligne, j'ai besoin d'une donné qui se trouve dans la ligne juste en dessous.
    J'ai imaginé qu'on pouvait transposer la commande qui consiste a attribuer le texte d'un partie de ligne à une variable
    >>>set MONTEXTE to (text ((offset of CECI in Ligne)-3) thru (text of (offset of CELA in Ligne)+5) of Ligne)
    à un ligne dans un paragraphe (Mes-Lignes) mais cela ne fonctionne pas.
    Du genre >>> set LIGNESUIVANTE to (text (offset of Ligne) in Mes_Ligne) + 1) masi j'ai m'impression que ce n'est pas la bonne idée peut-être ...

    donc l'idée serait de pouvoir
    1.lire le contenu de la ligne suivante.
    2. y débusquer un bout de texte (ça je sais faire grâce à toi)
    3. récrire la Ligne (pas la suivante où on a été chercher le petit bout de texte hein !) avec entre autre le petit bout de texte qu'on a trouvé (ça aussi a priori je sais faire.

    Par ailleurs si cela peut aider, je sais que cette fameuse ligne suivante commence toujours par "<video offset" ...

    J'imagine que cette question est très simple pour vous. Votre aide m'aiderait à franchir ce petit écueil...
    En vous remerciant encore par avance si vous pouvez me donner ce petit coup de pouce.

    Martin Gosset

  2. #22
    Membre éprouvé

    Homme Profil pro
    Directeur de projet
    Inscrit en
    Septembre 2010
    Messages
    603
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Directeur de projet
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Septembre 2010
    Messages : 603
    Points : 1 240
    Points
    1 240
    Par défaut
    Bonsoir,
    Lorsque tu lis le fichier text ce doit être avec un read file dans une variable text.
    Tu peux ensuite faire une boucle sur chaque paragraphe.
    Pour cette boucle, tu peux la faire avec le paragraphe I.

    dans l'itération sur le paragraphe I, rien ne t'empêche de lire le paragraphe (I+1) , à condition , bien sûr, qu'il existe !

    Cordialement

  3. #23
    Membre à l'essai
    Homme Profil pro
    Enseignant
    Inscrit en
    Août 2014
    Messages
    50
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2014
    Messages : 50
    Points : 15
    Points
    15
    Par défaut
    Merci Philippe,

    c'est exactement ce que le fait de simplement formuler davantage cette question m'a doucement fait comprendre.
    Oui effectivement je comprends que le script que tu m'avais envoyé il y a bien longtemps était en fait en deux temps. Un partie lecture d'un fichier, une autre d'écriture dans un autre. Tout simplement. Donc on peut lire, consigner des choses au fur et à mesure et les donner ensuite à manger au moment de l'écriture.
    Comme quoi on peut faire les chose bêtement sans trop les comprendre.

    Merci à toi Philippe.
    Grâce à toi, je peux facilement modifier des XML de Final Cut Pro X quand le besoin s'en fait sentir
    Bonne continuation
    Martin

  4. #24
    Membre à l'essai
    Homme Profil pro
    Enseignant
    Inscrit en
    Août 2014
    Messages
    50
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2014
    Messages : 50
    Points : 15
    Points
    15
    Par défaut Petite demande
    Bonjour Philippe,
    Il y a bien longtemps

    Je me mets document à Swift mais c'est pas fastoche...
    J'ai posté une petite demande sur le forum dédié à Swift mais j'ai l'impression qu'il n'est pas très fréquenté.

    https://www.developpez.net/forums/d1...le-transposer/

    J'essaie de trouver un point d'entrée dans ce langage... et je peine ;(

    Si vous aviez des pistes, des lien vers lequels me diriger pour lire des programmes simples.... comme vous me l'aviez permis avec Apple Script.... J'ai l'impression que de lire un petit programme m'aide davantage que de lire la doc d'Apple...

    Merci à vous si vous aviez une piste...
    Martin

  5. #25
    Membre éprouvé

    Homme Profil pro
    Directeur de projet
    Inscrit en
    Septembre 2010
    Messages
    603
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Directeur de projet
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Septembre 2010
    Messages : 603
    Points : 1 240
    Points
    1 240
    Par défaut
    Désolé Martin de ne pourvoir t'aider, mais je ne me suis pas mis à Swift...
    Compte tenu du succès apparent de ce language, je suis sûr que tu dois pouvoir trouver des forums très actifs à ce sujet.

    Cordialement

  6. #26
    Membre à l'essai
    Homme Profil pro
    Enseignant
    Inscrit en
    Août 2014
    Messages
    50
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2014
    Messages : 50
    Points : 15
    Points
    15
    Par défaut
    Merci Philippe pour votre réponse,
    Ce n'est pas bien grave. Je vais finir par trouver un point d'entrée dans la maison Swift... tirer la bonne ficelle pour ensuite tout dérouler.

    Bien à vous et encore merci pour vos précédentes aides.
    Bel été.
    Martin

  7. #27
    Membre à l'essai
    Homme Profil pro
    Enseignant
    Inscrit en
    Août 2014
    Messages
    50
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2014
    Messages : 50
    Points : 15
    Points
    15
    Par défaut Autre petite demande
    Bonjour,

    j'ai un petit souci pour lire un fichier de sous-titrage en .srt

    lorsque j'ouvrais un .fcpxml pour le lire j'utilisais:

    set Bibule to paragraphs of (read LeFichier)

    et ça fonctionnait

    Lorsque je fais la même chose avec un fichier .srt, il m'indique un message me disant qu'on ne peut pas le convertir en "type file"
    Il semble donc qu'il ne parvienne pas à le lire ("read"...)
    Il est vrai que lorsque je fais un clic-droit sur un .fcpxml, le Finder me propose "TextEdit" parmi toutes les applications proposées. Ce n'est pas le cas pour un fichier .srt.
    Pourtant je peux drag-dropper un fichier .srt sur l'icône de l'application TexEdit et il s'ouvre sans souci.

    Pour contourner le problème, j'ai tenté d'abord de renommer le fichier "monfichier.srt" en "monfichier.txt" mais là encore, il ne veut pas "read" ce fichier. Mais surement que de renommer un fichier ne le rend pas plus lisible ?

    J'ai essayé des déclinaisons de type (read LeFichier as unicode "utf-8") (je ne suis plus bien certain du terme mais j'avais trouvé ça lors de mes recherche et l'écriture était bonne)...

    Bref, je ne parviens pas à faire fonctionner "set Bibule to paragraphs of (read LeFichier)"

    Si Philippe tu avais une idée, je te serais fort fort fort reconnaissant...
    Je continue à chercher sur le net.
    Merci merci
    Martin
    PS: je vais poster cela comme nouveau topic aussi...

  8. #28
    Membre éprouvé

    Homme Profil pro
    Directeur de projet
    Inscrit en
    Septembre 2010
    Messages
    603
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Directeur de projet
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Septembre 2010
    Messages : 603
    Points : 1 240
    Points
    1 240
    Par défaut
    Bonsoir Martin,
    Je pense que le problème vient de ta variable LeFichier.
    En effet, la fonction "read" demande un fichier comme paramètre et non pas une string.

    Par exemple le script ci-dessous donne une erreur "impossible de convertir en type file" car F est une string et pas un alias vers un fichier:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    set Fstring to "Users:imac27:Desktop:Expert.srt"
    set Liste to paragraphs of (read Fstring)
    Par contre le script ci-dessous fonctionne parfaitement:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    set Fstring to "Users:imac27:Desktop:Expert.srt"
    set Liste to paragraphs of (read file Fstring)
    La différence est le mot "file" qui convertie la string F en alias vers un fichier.

    Enfin, dans le cas ci-dessous, la variable F est directement un alias donc le mot "file" n'est pas nécessaire:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    set F to choose file "Sélectionner un fichier srt"
    set Liste to paragraphs of (read F)
    Cordialement

  9. #29
    Membre à l'essai
    Homme Profil pro
    Enseignant
    Inscrit en
    Août 2014
    Messages
    50
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2014
    Messages : 50
    Points : 15
    Points
    15
    Par défaut Merci Philippe
    Merci Philippe, je comprends mieux du coup.
    Par contre en suivant une logique qui 'avait semblé proche de ce tu proposais (il y a longtemps !!), j'avais besoin d'appeler un dossier contenant plusieurs fichier .srt
    Donc je commence par :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     on run
    set source to choose file of type {fcpxml} with prompt " sélectionner le fichier .fcpxml à croiser avec les .srt"
    set sourceFolder to choose folder with prompt " sélectionner le dossier contenant les fichier .srt"
    Prog_Principal (source,sourceFolder)
    end run
    ensuite au début du Programme

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     set Mes_lignes to paragraphs of (read source)
    tell application "Finder"
    set Mes_Srt to every file of the sourceFolder
    end tell
    (j'ai ajouté un tell application "Finder" car ça ne marche pas sinon)

    plus tard dans le programme et lorsque je commence à avoir besoin de lire un .srt.
    J'ai d'abord besoin d'extraire le nom du .srt pour le comparer à un plan qui a (presque) le même nom dans le .fcpxml. donc je commence a extraire une partie du nom du sit pour pouvoir le comparer à celui de ce plan. Ici les srt on des noms de type "20170925-NOMDONNE.srt" tandis que les plans ont des noms de type "NOMDONNE". Donc il me faut extraire "NOMDONNE" du nom du .srt...)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    repeat with Le_Srt in Mes_Srt
    set Name_Srt to name of Le_Srt
    set Nom_Du_Srt to (text((offset of "-" in Name_Srt) +1) thru ((length of Name_Srt) - 4) of Name_Srt)
    et là ça coince parce qu'il n'arrive pas à lire le nom du fichier Le_Srt (pourtant un moment ça marchait !!!). Donc quand ça marchait, je pouvait comparer avec le nom du plan trouvé dans le .fcpxml (variable "P_NamClip" dans le code en dessous)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    if Nom_Du_Srt = P_NameClip then
    set Mes_LignesSrt to paragraphs of (read file Le_Srt)
    J'ai donc ajouté comme tu le dis le "file" dans (read file Le_Srt) mais ça ne fonctionne pas ... ( j'ai débrayer le if et la ligne ( set Name_Srt to name of Le_Srt) qui par ailleurs coince...
    automator me dit
    " Il est impossible de rendre "class docf" "201105525-AAAO4325.srt" of "class cfol" "NOM DU DOSSIER" of "class cofl" "NOMDUDISQUEDUR" of application "Finder" dans le type attendu"
    Mais je suis en effet aussi perdu lorsqu'il s'agit ou pas d'appeler le "FINDER"... bon ;(

    Daprès ce que tu évoque et qui est très parlant, il doit être question de définition au départ puis le long du programme... un string ou une file !!! Et mes lignes doivent tout mélanger... ;(

    bon, je continue à tester...

  10. #30
    Membre à l'essai
    Homme Profil pro
    Enseignant
    Inscrit en
    Août 2014
    Messages
    50
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2014
    Messages : 50
    Points : 15
    Points
    15
    Par défaut
    j'ai modifié un peu ma réponse : je ne "change" pas le nom du .srt, je l'extrais !!!

    Citation Envoyé par MartinOsset Voir le message
    Merci Philippe, je comprends mieux du coup.
    Par contre en suivant une logique qui 'avait semblé proche de ce tu proposais (il y a longtemps !!), j'avais besoin d'appeler un dossier contenant plusieurs fichier .srt
    Donc je commence par :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     on run
    set source to choose file of type {fcpxml} with prompt " sélectionner le fichier .fcpxml à croiser avec les .srt"
    set sourceFolder to choose folder with prompt " sélectionner le dossier contenant les fichier .srt"
    Prog_Principal (source,sourceFolder)
    end run
    ensuite au début du Programme

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     set Mes_lignes to paragraphs of (read source)
    tell application "Finder"
    set Mes_Srt to every file of the sourceFolder
    end tell
    (j'ai ajouté un tell application "Finder" car ça ne marche pas sinon)

    plus tard dans le programme et lorsque je commence à avoir besoin de lire un .srt.
    J'ai d'abord besoin d'extraire le nom du .srt pour le comparer à un plan qui a (presque) le même nom dans le .fcpxml. donc je commence a extraire une partie du nom du sit pour pouvoir le comparer à celui de ce plan. Ici les srt on des noms de type "20170925-NOMDONNE.srt" tandis que les plans ont des noms de type "NOMDONNE". Donc il me faut extraire "NOMDONNE" du nom du .srt...)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    repeat with Le_Srt in Mes_Srt
    set Name_Srt to name of Le_Srt
    set Nom_Du_Srt to (text((offset of "-" in Name_Srt) +1) thru ((length of Name_Srt) - 4) of Name_Srt)
    et là ça coince parce qu'il n'arrive pas à lire le nom du fichier Le_Srt (pourtant un moment ça marchait !!!). Donc quand ça marchait, je pouvait comparer avec le nom du plan trouvé dans le .fcpxml (variable "P_NamClip" dans le code en dessous)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    if Nom_Du_Srt = P_NameClip then
    set Mes_LignesSrt to paragraphs of (read file Le_Srt)
    J'ai donc ajouté comme tu le dis le "file" dans (read file Le_Srt) mais ça ne fonctionne pas ... ( j'ai débrayer le if et la ligne ( set Name_Srt to name of Le_Srt) qui par ailleurs coince...
    automator me dit
    " Il est impossible de rendre "class docf" "201105525-AAAO4325.srt" of "class cfol" "NOM DU DOSSIER" of "class cofl" "NOMDUDISQUEDUR" of application "Finder" dans le type attendu"
    Mais je suis en effet aussi perdu lorsqu'il s'agit ou pas d'appeler le "FINDER"... bon ;(

    Daprès ce que tu évoque et qui est très parlant, il doit être question de définition au départ puis le long du programme... un string ou une file !!! Et mes lignes doivent tout mélanger... ;(

    bon, je continue à tester...

  11. #31
    Membre éprouvé

    Homme Profil pro
    Directeur de projet
    Inscrit en
    Septembre 2010
    Messages
    603
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Directeur de projet
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Septembre 2010
    Messages : 603
    Points : 1 240
    Points
    1 240
    Par défaut
    Bonjour,
    Je pense que tu fais effectivement une confusion entre des fichiers, des string représentant les chemins vers ses fichiers et leur noms.

    Bien qu'Applescript ne nécessite pas de déclaration de variable typée, il faut garder à l'esprit qu'en fait le compilateur le fait pour nous. Donc une variable peut être un texte ("string" ou "text"), un nombre ("real" ou "integer"), un boolean (true/false), une liste, {a,b,c}, un fichier (on dit aussi alias car en fait c'est un pointeur vers le fichier),...etc.

    Dans le cas ou l'ambiguïté existe, il faut choisir avec soin le nom de ses variables pour qu'elles ne laissent pas de doute lorsque tu écris ton programme. Par exemple :
    - Chemin_Fichier peut représenter une string contenant "Users:totoesktop:12345-MESDONNEES.srt"
    - Fichier peut représenter l'alias vers le fichier 12345-MESDONNEES.srt
    - Nom_Fichier sera une string contenant "12345-MESDONNES.srt"
    Je vois que tu as grandement progressé sur ce point !

    Ma seconde remarque concerne l'utilisation des blocs tell avec l'application "Finder".
    Applescript est un language défini en partie par lui-même, mais surtout pas les applications. Par exemple "name of Fichier" est inconnu d'Applescript, mais c'est une instruction du Finder. Donc pour fonctionner il doit être dans un bloc tell application "Finder".
    Dans le doute, ouvre l'éditeur de script, et dans la fenêtre bibliothèque, ouvre Finder pour avoir la liste des termes propres au Finder. (idem pour toutes autres applications).


    Dans ton script, pour extraite le nom, tu dois utiliser le "name of Fichier", dans un bloc tell Finder et surtout avec Fichier étant un alias.
    J'ajoute que un bloc tell appliqué à une seule instruction peut être simplifié avec :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    tell application "Finder" to set Name_Srt to name of Le_Srt
    (ce qui évite le "end tell")

    Cordialement

  12. #32
    Membre à l'essai
    Homme Profil pro
    Enseignant
    Inscrit en
    Août 2014
    Messages
    50
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2014
    Messages : 50
    Points : 15
    Points
    15
    Par défaut
    Merci beaucoup Philippe,

    Je dois bouger aujourd'hui et demain je reprendrai tout ce qui concerne la déclaration de ces srt...

    (grâce à toi, j'ai effectivement pu écrire tout un tas de petites applications pour les utilisateurs de FCP X : http://martingosset.com/boomerang-app/)
    Ton aide en aide plus d'un !!!
    Merci encore Philippe

    Martin

  13. #33
    Membre à l'essai
    Homme Profil pro
    Enseignant
    Inscrit en
    Août 2014
    Messages
    50
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2014
    Messages : 50
    Points : 15
    Points
    15
    Par défaut encodage texte
    Bonjour Philippe,

    J'ai fini par parvenir à passer l'étape précédente.
    Mais j'ai un petit souci d'encodage. Avec les autre application, je me contentais d'extraire des ligne d'un.fcpxml et de les réécrire, parfois autrement. Cette fois, c'est un peu nouveau.
    EN effet je fabrique d'abord des ligne de toute pièce (comme dans cet exemple):

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    set Ligne1 to CROCHET & "param name=" & Guil & "Build In" & Guil & " key=" & Guil & "9999" & T_BACKSLASH & "10000" & T_BACKSLASH & "2" & T_BACKSLASH & "101" & Guil & " value=" & Guil & "0" & Guil & T_BACKSLASH & CROCHET_INV
    	set Ligne2 to CROCHET & "param name=" & Guil & "Build Out" & Guil & " key=" & Guil & "9999" & T_BACKSLASH & "10000" & T_BACKSLASH & "2" & T_BACKSLASH & "102" & Guil & " value=" & Guil & "0" & Guil & T_BACKSLASH & CROCHET_INV
    	set Ligne3 to CROCHET & "param name=" & Guil & "Position" & Guil & " key=" & Guil & "9999" & T_BACKSLASH & "10087" & T_BACKSLASH & "1002961723" & T_BACKSLASH & "1" & T_BACKSLASH & "100" & T_BACKSLASH & "101" & Guil & " value=" & Guil & "-33.4727 -233.465" & Guil & T_BACKSLASH & CROCHET_INV
    	set Ligne4 to CROCHET & "param name=" & Guil & "Point d" & (ASCII character 39) & "ancrage" & Guil & " key=" & Guil & "9999" & T_BACKSLASH & "10087" & T_BACKSLASH & "1002961723" & T_BACKSLASH & "1" & T_BACKSLASH & "100" & T_BACKSLASH & "107" & Guil & " value=" & Guil & "854.469 108.555" & Guil & T_BACKSLASH & CROCHET_INV
    	set Ligne5 to CROCHET & "param name=" & Guil & "M" & (ASCII character 130) & "thode de pr" & (ASCII character 130) & "sentation" & Guil & " key=" & Guil & "9999" & T_BACKSLASH & "10087" & T_BACKSLASH & "1002961723" & T_BACKSLASH & "2" & T_BACKSLASH & "314" & Guil & " value=" & Guil & "1 (Paragraphe)" & Guil & T_BACKSLASH & CROCHET_INV
    	set Ligne6 to CROCHET & "param name=" & Guil & "Marge de gauche" & Guil & " key=" & Guil & "9999" & T_BACKSLASH & "10087" & T_BACKSLASH & "1002961723" & T_BACKSLASH & "2" & T_BACKSLASH & "323" & Guil & " value=" & Guil & "271.776" & Guil & T_BACKSLASH & CROCHET_INV
    	set Ligne7 to CROCHET & "param name=" & Guil & "Marge de droite" & Guil & " key=" & Guil & "9999" & T_BACKSLASH & "10087" & T_BACKSLASH & "1002961723" & T_BACKSLASH & "2" & T_BACKSLASH & "324" & Guil & " value=" & Guil & "1504.11" & Guil & T_BACKSLASH & CROCHET_INV
    	set Ligne8 to CROCHET & "param name=" & Guil & "Marge sup" & (ASCII character 130) & "rieure" & Guil & " key=" & Guil & "9999" & T_BACKSLASH & "10087" & T_BACKSLASH & "1002961723" & T_BACKSLASH & "2" & T_BACKSLASH & "325" & Guil & " value=" & Guil & "298.818" & Guil & T_BACKSLASH & CROCHET_INV
    	set Ligne9 to CROCHET & "param name=" & Guil & "Marge inf" & (ASCII character 130) & "rieure" & Guil & " key=" & Guil & "9999" & T_BACKSLASH & "10087" & T_BACKSLASH & "1002961723" & T_BACKSLASH & "2" & T_BACKSLASH & "326" & Guil & " value=" & Guil & "-124.769" & Guil & T_BACKSLASH & CROCHET_INV
    	set Ligne10 to CROCHET & "param name=" & Guil & "Alignement" & Guil & " key=" & Guil & "9999" & T_BACKSLASH & "10087" & T_BACKSLASH & "1002961723" & T_BACKSLASH & "2" & T_BACKSLASH & "354" & T_BACKSLASH & "10104" & T_BACKSLASH & "401" & Guil & " value=" & Guil & "1 " & (ASCII character 40) & "Au centre" & (ASCII character 41) & Guil & T_BACKSLASH & CROCHET_INV
    	set Ligne11 to CROCHET & "param name=" & Guil & "Interligne" & Guil & " key=" & Guil & "9999" & T_BACKSLASH & "10087" & T_BACKSLASH & "1002961723" & T_BACKSLASH & "2" & T_BACKSLASH & "354" & T_BACKSLASH & "10104" & T_BACKSLASH & "404" & Guil & " value=" & Guil & "-2.5" & Guil & T_BACKSLASH & CROCHET_INV
    	set Ligne12 to CROCHET & "param name=" & Guil & "Alignement" & Guil & " key=" & Guil & "9999" & T_BACKSLASH & "10087" & T_BACKSLASH & "1002961723" & T_BACKSLASH & "2" & T_BACKSLASH & "373" & Guil & " value=" & Guil & "0 " & (ASCII character 40) & "À gauche" & (ASCII character 41) & " 2 " & (ASCII character 40) & "En bas" & (ASCII character 41) & Guil & T_BACKSLASH & CROCHET_INV
    	set Ligne21 to CROCHET & "text-style font=" & Guil & "Arial" & Guil & " fontSize=" & Guil & "42" & Guil & " fontFace=" & Guil & "Regular" & Guil & " fontColor=" & Guil & "1 0.999974 0.999991 1" & Guil & " strokeColor=" & Guil & "0.0192974 0.00791807 4.52481e-05 1" & Guil & " strokeWidth=" & Guil & "2" & Guil & " alignment=" & Guil & "center" & Guil & " lineSpacing=" & Guil & "-2.5" & Guil & T_BACKSLASH & CROCHET_INV
    	set Ligne22 to CROCHET & "text-style font=" & Guil & "Arial" & Guil & " fontSize=" & Guil & "48" & Guil & " fontFace=" & Guil & "Regular" & Guil & " fontColor=" & Guil & "1 0.999974 0.999991 1" & Guil & " lineSpacing=" & Guil & "4" & Guil & T_BACKSLASH & CROCHET_INV
    Lorsque j'ouvre le .fccpxml obtenu, TextEdit me dit qu'il a un problème d'encodage en UTF 8... et ne l'ouvre pas...
    Ce que je comprends, c'est qu'il y a des caractères qu'il faudrait convertir dans cet encodage. Ce que comme tu vois j'ai déjà tenté de faire. Mais peut-être m'y prends-je mal ou peut-être en ai-je oublié. Je pense notamment aux espaces...
    Mais peut-être encore y a-t-il une façon de lui dire quechaque bout de texte entre guillement doit être encodé en UTF-8. En cherchant, j'ai trouvé un petit bout de code ( as «class utf8») qui pourrait être une piste... mais j'ai vu qu'on pouvait l'ajouter en "read" et en write. Et j'avoue que je ne comprends pas bien ce qu'il faudrait faire ici...
    Je me dis que l'idée générale serait comme lui dire "lit ce texte (as "c'est du chinois")" puis "écris ce même texte (as "en finlandais")"... quelque chose comme ça... ?

    Après plusieurs test, je comprends aussi que les bouts de lignes extraites des .srt et écrites ensuite, posent ce même genre de problème.
    Pourtant à la lecture dans TextEdit, il n'y pas de carractère bizarres. C'est ce genre de contenu:

    1
    00:00:03,766 --> 00:00:11,733
    La dernière fois, il y a un journaliste de l'hebdomadaire Yancheng qui a écrit sur nous.

    2
    00:00:12,500 --> 00:00:18,033
    Le journal a publié.

    3
    00:00:18,333 --> 00:00:24,000
    Ensuite, il a été sévèrement critiqué, comment se faisait-il que le journaliste soit entré sans les prévenir?

    4
    00:00:24,133 --> 00:00:29,700
    Maintenant il n'y a plus à avoir peur, ils ont ouvert l'île. Vous pouvez entrer quand vous voulez. On vit dans le temple, de ce côté.


    -----------
    J'ai été voir quel était le format texte (encodage) des .srt et il semble qu'il puisse être en utf8 ou dans un autre format (window qqch). Il faudrait donc le savoir (et donc trouver une commande pour connaitre son format. Mais ne serait-ce pas la commande "container of" ?) et pouvoir extraire le texte en indiquant qu'il faut le lire dans ce format (en chinois) puis l'encoder en utf-8 (en finlandais)... brr et je sens que ça va être bien compliqué....

    Bon Philippe, comme tu le vois une question suit l'autre. Je comprendrais que tu n'aies pas le courage d'y apporter de réponse. C'est du temps !!! (je sais ce que c'est de répondre à des néophytes. C'est parfois très fatigant parce qu'on a l'impression de tout devoir reprendre au début )
    Je vais continuer mes recherches.

    Martin

  14. #34
    Membre éprouvé

    Homme Profil pro
    Directeur de projet
    Inscrit en
    Septembre 2010
    Messages
    603
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Directeur de projet
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Septembre 2010
    Messages : 603
    Points : 1 240
    Points
    1 240
    Par défaut
    Bonsoir Martin,
    Je ne comprends pas ce que tu souhaites faire avec les ligne1, ligne2,...
    Donc il m'est difficile de t'aider sur cette partie sans comprendre plus.

    Sur le fichier str, je te confirme que c'est un fichier de type texte en UTF8. Si tu ne précise pas UTF8, par défaut, je crois que Applescript utilise de l'Unicode: cela va te donner des caractères erronés sur les lettres avec des accents.

    Hormis ce format, les fichiers "str" que j'ai lu ne contiennent aucun caractères spéciaux.
    - les passages à la ligne suivante sont un "retour chariot" classique (ascii number = 13)
    - les espaces sont des espaces standard (ascii 32)

    Le format de set que tu indiques en exemple est correct.
    Il faut bien sûr que les séquences de sous-titres soient dans l'ordre de diffusion, donc avec des valeurs de compteur croissantes, et qui ne se chevauchent pas: le compteur de la fin du x doit être inférieure au compteur de début du (x+1).

    Pour terminer, voici un exemple de lecture en utf8 :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    set F to choose fileset X to characters of (read F as «class utf8»)
    Cordialement

  15. #35
    Membre à l'essai
    Homme Profil pro
    Enseignant
    Inscrit en
    Août 2014
    Messages
    50
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2014
    Messages : 50
    Points : 15
    Points
    15
    Par défaut
    Mmm...
    Le problème est assez simple en fait, maintenant que j'ai contourné des choses.
    J'ai une ligne à écrire de type <text-style ref= "ts12"> le texte d'une des ligne du srt </text-style>
    le texte en rouge étant celui que je tire du srt donc et le noir celui que je tire du fcpxml.
    Dans l'absolu, je l'ai déjà fait à plusieurs reprises et avec un "display alert" je m'assure que j'ai bien réussi à capturer le texte voulu dans le srt. La petite alerte qui apparait alors me le montre parfaitement sans problème de caractère d'ailleurs.
    Une fois l'application lancée et le nouveau .fcpxml obtenu, je l'ouvre dans TextEdit mais il ne veut pas à cause d'un problème de utf-8
    Je parviens sans problème à l'ouvrir avec Atom qui me montre effectivement que tout est là. MAIS, au lieu d'y avoir autant de lignes qu'il est sensé y avoir (je fais des write (la_ligne & return) to file Destination at eof), Atom ne m'affiche qu'une seul ligne. C'est un peu comme s'il avait perdu les séparateur en route...

    Je vais chercher

    Merci Philippe pour tes réponses.

    Martin

  16. #36
    Membre éprouvé

    Homme Profil pro
    Directeur de projet
    Inscrit en
    Septembre 2010
    Messages
    603
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Directeur de projet
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Septembre 2010
    Messages : 603
    Points : 1 240
    Points
    1 240
    Par défaut
    Si le srt est bien un utf8, j'ai regardé sur le site Apple le format fcpxml.
    Il s'agit apparement d'un fichier texte Unicode, formaté de telle façon que c'est un fichier html.

    La balise de début est de type : <fcpxml version="1.6">
    Puis des balises classiques de type : <xxxx> et pour terminer </xxxx>

    Ceci étant, je crois avoir compris :
    1) tu ouvres un srt, tu lis toutes les lignes et tu en extrais une liste de textes
    2) tu ouvres un fcpxml et tu remplaces le contenu de certaines balises par l'un des textes du srt

    2 remarques:
    - le display alert est bien, mais l'instruction "log" est mieux car tu gardes dans l'Editeur de script, la liste des log qui te permettent de suivre ton programme (demander à afficher les messages dans l'éditeur avant de lancer le script).
    - un "write (la_ligne & return) to file destination" devrait suffire. Je me méfie du eof !

    Bon courage pour la suite !
    Cordialement

  17. #37
    Membre à l'essai
    Homme Profil pro
    Enseignant
    Inscrit en
    Août 2014
    Messages
    50
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2014
    Messages : 50
    Points : 15
    Points
    15
    Par défaut
    Merci beaucoup Phillipe !
    "
    Ceci étant, je crois avoir compris :
    1) tu ouvres un srt, tu lis toutes les lignes et tu en extrais une liste de textes
    2) tu ouvres un fcpxml et tu remplaces le contenu de certaines balises par l'un des textes du srt
    "
    C'est exactement cela !!

    ton aide m'a aidé à terminer cette petite app. Et j'ai encore beaucoup appris...
    Je dois encore comprendre comment sont rééllement gaulés ces document (fcpxml et srt). Au fond, je me demande si ce ne sont pas tout simplement des sortes de "listes" avec des séparateurs. Ce serait ça en fait le formatage, juste le séparateur utilisé. Tandis que l'encodage serait le système de codage des charactères... et j'ai l'impression que Apple Script est capable de les reconnaitre et les convertir tout seul !?
    Bref, merci encore à toi.
    PS: si tu es intéressé par mes documents, dis le moi. Je te les enverrai. Ils comportent maintenant 1000 planches !!!
    martingsset.com

  18. #38
    Membre éprouvé

    Homme Profil pro
    Directeur de projet
    Inscrit en
    Septembre 2010
    Messages
    603
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Directeur de projet
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Septembre 2010
    Messages : 603
    Points : 1 240
    Points
    1 240
    Par défaut
    Bonjour,
    Le.srt est vraiment un fichier texte standard, en UTF8, avez des "return" (ASCII 13) en fin de chaque ligne. Le format est très simple, constitué de plusieurs groupes de 4 lignes chacun:
    ligne 1 = un nombre entier en séquence de 1 à n
    ligne 2 = Les compteurs début/fin séparés par " --> ". Un compteur est heure(en entier):minute(en entier):seconde (en décimale avec 3 chiffres après la virgule)
    exemple: hh:mm:ss,xxx --> hh:mm:ss,xxx
    ligne 3 = une ligne de texte
    ligne 4 = ligne vide (seulement return)

    Donc il peut être lu et écrit simplement.

    Le fcpxml ressemble à un xml standard (je ne l'ai pas étudié à fond !).
    Par chance, l'application "System Events" dispose des instructions de lecture/ecriture d'un fichier xml, du moment que l'on connait ses balises.
    Voici un exemple de script qui lit un fichier xml.
    Ce xml contient une balise "<General>" et, dans cette balise, il y a 2 sous-balises "- nom", "- Container" dont on lit les valeurs.
    Puis une balise "Audio" qui contient une sous balise "-Format".
    L'avantage est que l'on peut lire seulement que ce qui nous intéresse.
    En effet, la balise "Audio" peut contenir bien d'autres sous-balises ou toute autres structures, je veux ici seulement lire la valeur de la balise "- Format" sans me préoccuper des autres !
    C'est System Events qui va se charger de chercher cette valeur parmi le reste des données xml.
    Bien sur cela doit être adapté pour tes formats xml de Final Cut Pro.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    set Mon_xml to "Users:iac27:Desktop: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
            set X_Format to value of XML element "- Format : " of XML element "Audio" of XML element 1
        end tell
    end tell
    Cordialement

  19. #39
    Membre à l'essai
    Homme Profil pro
    Enseignant
    Inscrit en
    Août 2014
    Messages
    50
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2014
    Messages : 50
    Points : 15
    Points
    15
    Par défaut
    J'ai encore appris quelque chose Philippe !

    J'ai découvert les Apple Event il y a très peu de temps. Du coup, cela ouvre des perspectives en effet. Du moins lorsqu'il s'agit de seulement modifier des XML. Dans mon cas, il faudra que je creuse davantage car j'ajoute des lignes créées de toutes pièces pour l'ossature (les balises) mais effectivement nourris de "valeurs" puisée dans un autre XML et dans les .srt....
    Bon beh c'est très prometteur en tout cas.
    Merci merci Philippe. Tout ça est bien chouette de ta part.

    Martin

    PS: je vais réétudier le code que tu m'avais suggéré pour créer des préférences utilisateur aussi !!! il y a loooongtemps

  20. #40
    Membre à l'essai
    Homme Profil pro
    Enseignant
    Inscrit en
    Août 2014
    Messages
    50
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2014
    Messages : 50
    Points : 15
    Points
    15
    Par défaut Déclarer et utiliser les listes
    Bonjour,

    Je continue à écrire des petites app en AppleScript. L'une d'elle me pose problème depuis 3 mois que j'ai tenté de la complexifier un peu.
    A mon avis, cela vient de la façon dont je déclare et nourris ma liste principale.

    Au fil du programme l'application nourrit donc une liste (appelons-la LA_LISTE):
    LA_LISTE = {item1,item2, item3, etc...} donc cette liste peut avoir un nombre d'item qui n'est pas fixé au départ.
    Mais chaque item est par contre forcément structuré ainsi :
    item N = {item N1, item N2, item N3, item N4}
    où :
    item N1 est un string non vide (exemple "jean-pierre")
    les 3 autres items sont eux mêmes des listes de strings:
    item N2 est une liste de string : {itemN21, item N22, itemN23,...}
    item N3 est une liste de string : {itemN31, item N32, itemN33,...}
    item N4 est une liste de string : {itemN41, item N42, itemN43,...}


    Donc la liste pourra ressembler à cela :
    LA_LISTE = { {Item11,{item111,item112,item113}, {item121,item122,item123}, {item131,item132,item133}}, {Item21,{item211,item212,item213}, {item221,item222,item223}, {item231,item232,item233}}, {Item31,{item311,item312,item313}, {item321,item322,item323}, {item331,item332,item333}}, ect }


    Je crois que j'ai un problème pour déclarer cette liste ...
    Faut il que je la déclare ainsi : LA_LISTE = { {"",{""},{""},{""}} }

    Ensuite lorsque je rencontre tel string, il faut que j'ouvre un nouvel item avec ce même format : {"",{""},{""},{""}}

    J'imagine alors qu'il faut que j'écrive LA_LISTE = LA_LISTE & {"tel string",{""},{""},{""}}


    Je crois que cela induit des soucis ensuite. Par exemple si aucune info destinée à l'item 3 n'a encore été trouvé (l'item 3 est donc vide à ce stade) mais que la première info trouvé soit destiné à nourri l'item 4, il me semble que l'app va me dire qu'elle ne peut pas trouve l'item 4 . Comme si déclarer un item vide ne le faisait pas vraiment exister... quelque chose comme ça.

    Si je savais comment bien déclarer la liste au départ, je crois que je n'aurais pas de souci ensuite... Je crois que je ne sais pas comment déclarer (formater) une liste dont les éléments sont vides, en attendant d'être remplis au fur et à mesure que l'app avance dans sa recherche...

    Merci d'avance pour votre aide

    Martin

    PS: je vais reposter ceci sur un post à part entière car peut-être que ce déterrage-ci va passer inaperçu... merci de votre compréhension.

Discussions similaires

  1. Modifier le contenu d'un fichier PDF en PHP
    Par Ghunter59 dans le forum Langage
    Réponses: 6
    Dernier message: 17/03/2020, 13h27
  2. Modifier le contenu d'un fichier
    Par karim_usthb dans le forum C
    Réponses: 2
    Dernier message: 28/05/2008, 09h42
  3. Modifier le contenu d'un fichier
    Par sconrad dans le forum Langage
    Réponses: 1
    Dernier message: 26/03/2008, 17h00
  4. modifier le contenu d'un fichier
    Par progamer54 dans le forum ANT
    Réponses: 1
    Dernier message: 06/12/2007, 11h31
  5. Modifier le contenu d'un fichier
    Par Core8 dans le forum Entrée/Sortie
    Réponses: 4
    Dernier message: 30/01/2007, 15h21

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo