Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

[AS] Coup de pouce

26 réponses
Avatar
benoit
Bonjour,


J'ai besoin de resortir mon bon AS et je suis un paumé après tant
d'années. J'ai un fichier contenant du texte (des définitions) et je
souhaite générer un fichier par entrée.

exemple :

ACCENT V.Arçon.
ACCROCHE-C¼URS Favoris (Vidocq). -- Allusion aux accroche-coeurs
féminins, petites mèches contournées et plaquées prétentieusement sous
la tempe.
ACCROCHER Mettre au Mont de Piété, c'est-à-dire au clou. Ce dernier
mot explique le verbe. -- « Ah ! les biblots sont accrochés.» -- De
Montépin.
ACCROCHER Consigner un soldat, c'est-à-dire l'accrocher à son
quartier, l'empêcher d'en sortir.

Il y a une tabulation entre le mot (ou groupe de mots) qui servira de
nom de fichier et sa définition. Mais il y a des mots avec plusieurs
définitions et je souhaite avoir un fichier (texte) différent (genre
ACCROCHER 1, ACCROCHER 2...)

Je suis paumé avec le fait que je veux utiliser la tabulation comme
séparateur (au lieu de l'espace) et qu'il faille aussi séparer par
paragraphe. Un coup de pouce ?


D'avance merci


P.S. je suis en train de me (re)concocter un dictionnaire d'argot qui
utilise une dizaine de sources différentes et Spotlight est idéal pour
rechercher des définitions ou synonymes dans une base de fichiers avec
un fichier par mot.

--
"La théorie, c'est quand on sait tout et que rien ne fonctionne. La
pratique, c'est quand tout fonctionne et que personne ne sait pourquoi.
Ici, nous avons réuni théorie et pratique : Rien ne fonctionne... et
personne ne sait pourquoi !" [ Albert Einstein ]

6 réponses

1 2 3
Avatar
benoit
Joseph-B wrote:

Bonjor Benoit

Benoit a écrit,

> Et pourtant... il y en a qui en ont (ça serait trop simple) :
> accouffler (s'-).html

Bonne nouvelle pour toi : même les caractères incompatibles avec les
commandes Shell (guillemets simple ou doubles, apostrophe, parenthèses,
crochets, signe moins, etc.) ne gêneront pas avec ce script :
dans cette mouture j'ai fait en sorte que l'option "quoted form of"
porte sur le nom ENTIER de l'original ou du résultat.
Dans la version précédente ça ne portait que sur le chemin du dossier,
sans inclure le nom du fichier lui-même.

Donc un fichier ayant pour nom
/accouffler (s'-).html/ va bien se convertir en un
/accouffler (s'-).txt/
(je viens de le vérifier)

> Merci pour tout.
Ce fut un plaisir ;-)



Bon, marche pô

error "Erreur dans Finder : Délai dépassé pour un AppleEvent." number
-1712

set AllFiles to name of (every file of (HFSPath as alias) whose kind is
"Document HTML")

Ne sait pas gérer un dossier de 50 000 fichiers. Soit je fais un « set
appelevent timeout to 3600 » (une heure de mémoire), soit je le fais par
morceaux dans des sous-dossiers.

J'essaye la première version en remettant un set appleevent timeout to
je ne sais quoi (60 par exemple) juste après que la liste ait été créée.

À toute à l'heure. Je vais faire les courses pendant ce temps-là ;)

--
"La théorie, c'est quand on sait tout et que rien ne fonctionne. La
pratique, c'est quand tout fonctionne et que personne ne sait pourquoi.
Ici, nous avons réuni théorie et pratique : Rien ne fonctionne... et
personne ne sait pourquoi !" [ Albert Einstein ]
Avatar
josephb
Benoit a écrit,

error "Erreur dans Finder : Délai dépassé pour un AppleEvent." number
-1712



En dépit du message d'erreur, je ne suis pas du tout sûr que le pb se
situe au niveau d'AppleScript.
Avec une telle quantité de fichiers à transformer et écrire par la
commande Shel, il est bien possible que la queue d'attente devienne
ingérable par accumulation des retards de traitement en dépit du "delay
0.3".
C'est là le sens que je vois à la saturation de l'Applevent.
AppleScript ne sert ici que comme medium de la commande Shell.

Je ne sais pas écrire le script directement en shell et l'effecteur dans
le Terminal. Il faudrait demander à un gourou d'Unix.
Peut-être sur un forum de lunixiens bienveillants (si, si ça existe).
mais je continue à penser que 50 000 fichiers html coinceront.

À toute à l'heure. Je vais faire les courses pendant ce temps-là ;)



Et moi désherber des allées ;-)
--
J. B.
Avatar
benoit
Benoit wrote:

Joseph-B wrote:

> Bonjor Benoit
>
> Benoit a écrit,
>
> > Et pourtant... il y en a qui en ont (ça serait trop simple) :
> > accouffler (s'-).html
>
> Bonne nouvelle pour toi : même les caractères incompatibles avec les
> commandes Shell (guillemets simple ou doubles, apostrophe, parenthèses,
> crochets, signe moins, etc.) ne gêneront pas avec ce script :
> dans cette mouture j'ai fait en sorte que l'option "quoted form of"
> porte sur le nom ENTIER de l'original ou du résultat.
> Dans la version précédente ça ne portait que sur le chemin du dossier,
> sans inclure le nom du fichier lui-même.
>
> Donc un fichier ayant pour nom
> /accouffler (s'-).html/ va bien se convertir en un
> /accouffler (s'-).txt/
> (je viens de le vérifier)
>
> > Merci pour tout.
> Ce fut un plaisir ;-)

Bon, marche pô

error "Erreur dans Finder : Délai dépassé pour un AppleEvent." number
-1712

set AllFiles to name of (every file of (HFSPath as alias) whose kind is
"Document HTML")

Ne sait pas gérer un dossier de 50 000 fichiers. Soit je fais un « set
appelevent timeout to 3600 » (une heure de mémoire), soit je le fais par
morceaux dans des sous-dossiers.

J'essaye la première version en remettant un set appleevent timeout to
je ne sais quoi (60 par exemple) juste après que la liste ait été créée.

À toute à l'heure. Je vais faire les courses pendant ce temps-là ;)



Bon, comme j'ai pas trop envie de faire les courses j'ai lancé un truc
qui marche et fortement basé sur ton code :

********************************
set pathToConvert to "/Users/benoit/Desktop/ Ze
book/Argot/www.languefrancaise.net/" --dossier source

set pathToTxt to "/Users/benoit/Desktop/ Ze
book/Argot/www.languefrancaise.net convertis/" --dossier destination

set HFSPath to (POSIX file pathToConvert) as string

tell application "Finder"
with timeout of 3600 seconds
set AllFiles to name of every file of (HFSPath as alias)
end timeout
end tell

if AllFiles = {} then
display alert "Pas de fichier à convertir."
return
end if

repeat with i from 1 to count AllFiles

set htmlName to item i of AllFiles
set txtName to ((text 1 thru -6 of htmlName) & ".txt")
set myHtmlFile to (pathToConvert & htmlName) --nom complet du
fichier htlm à convertir
set myTxtFile to (pathToTxt & txtName) --nom complet du fichier
converti
do shell script ("textutil -convert txt -output " & quoted form of
myTxtFile & " " & quoted form of myHtmlFile)
delay 0.3

end repeat
********************************

Il y en a pour pas loin d'une heure, alors je vais enfin faire les
courses ;)


--
"La théorie, c'est quand on sait tout et que rien ne fonctionne. La
pratique, c'est quand tout fonctionne et que personne ne sait pourquoi.
Ici, nous avons réuni théorie et pratique : Rien ne fonctionne... et
personne ne sait pourquoi !" [ Albert Einstein ]
Avatar
josephb
Benoit a écrit,

Bon, comme j'ai pas trop envie de faire les courses j'ai lancé un truc
qui marche et fortement basé sur ton code :



OK !!

Si non, j'avais pensé à une autre approche : empêcher que les conversions s'enchaînent plus vite que le Finder ne peut
les gérer.
Ça donne le script suivant.
Il vaut mieux qu'au lancement le dossier de réception soit vide.
S'il contient déjà une centaine de fichiers, on va retomber sur le cas de saturation des AppleEvents

∞∞∞∞∞∞∞∞∞∞∞∞∞∞
set pathToConvert to "/Users/macpro/Desktop/testHTML_textUtil/"
set pathToTxt to "/Users/macpro/Desktop/HTML_convertis/"
set HFSPath to (POSIX file pathToConvert) as string
set HFS_txt to ((POSIX file pathToTxt) as string) --chemin hfs du dossier des .txt
tell application "Finder"
set AllFiles to name of (every file of (HFSPath as alias) whose kind is "Document HTML")
if AllFiles = {} then
display alert "Pas de fichier à convertir."
return
end if

repeat with i from 1 to count AllFiles
set htmlName to item i of AllFiles
set txtName to ((text 1 thru -6 of htmlName) & ".txt")
set myHtmlFile to (pathToConvert & htmlName)
set myTxtFile to (pathToTxt & txtName)
do shell script ("textutil -convert txt -output " & quoted form of myTxtFile & " " & quoted form of myHtmlFile)

repeat --donner le temps d'écriture du fichier avant de demander la conversion suivante
if (count files of entire contents of (HFS_txt as alias)) ≥ i then
exit repeat
end if
delay 0.05
end repeat

end repeat
end tell
∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞

C'est vrai que 50000 fichiers, ça va prendre un certain temps ;-)

--
J. B.
Avatar
benoit
Joseph-B wrote:


C'est vrai que 50000 fichiers, ça va prendre un certain temps ;-)



C'est simple, il en fait ± 10 000/heure puisqu'il y a un delay de 0.3

Ce sera fini ce soir.

--
"La théorie, c'est quand on sait tout et que rien ne fonctionne. La
pratique, c'est quand tout fonctionne et que personne ne sait pourquoi.
Ici, nous avons réuni théorie et pratique : Rien ne fonctionne... et
personne ne sait pourquoi !" [ Albert Einstein ]
Avatar
benoit
Benoit wrote:

Joseph-B wrote:

>
> C'est vrai que 50000 fichiers, ça va prendre un certain temps ;-)

C'est simple, il en fait ± 10 000/heure puisqu'il y a un delay de 0.3

Ce sera fini ce soir.



Bon, c'est fini, mais il en manque 14. 49 801 dans le dossier d'origine
et 49 787 dans le final.

Je vais commencer avec ça et je chercherai ceux qui manquent plus tard.
Maintenant je voudrai trouver comment ce foutu Finder propose de temps
en temps de remplacer des fichiers qui ont le même nom ou de garder
l'ancien et le nouveau à l'occasion d'un déplacement de fichiers. Si je
sais faire, alors je mets tout dans un seul dossier et mon dictionnaire
est prêt ;)


--
"La théorie, c'est quand on sait tout et que rien ne fonctionne. La
pratique, c'est quand tout fonctionne et que personne ne sait pourquoi.
Ici, nous avons réuni théorie et pratique : Rien ne fonctionne... et
personne ne sait pourquoi !" [ Albert Einstein ]
1 2 3