# applescript  - recherche de fichier



## Pearldiver (15 Septembre 2010)

Bonjour,
j'aimerais faire un petit script:
j'ai un fichier A (xls ou txt) qui contient dans la 1ère colonne des noms de fichiers (par ex. 245.tif, 12.tif etc..)
D'un autre côté j'ai un dossier B qui contient des fichiers .tif
je voudrais contrôler si les fichiers tif indiqués dans le A sont bien dans le dossier B
si oui, alors pas de message (ou un message ok)
si non, un message ou fichier qui m'indique les fichiers manquants
est-ce qu'il est possible de faire ça avec apple script ?

Mon exemple n'est peut-être pas très clair, mais en gros je voudrais juste savoir si avec applescript on peut faire une recherche dans un dossier à partir d'une liste.
Et si oui, avec quelques conseils/astuces?

Merci
Flo


----------



## Anonyme (16 Septembre 2010)

Bonjour,

C'est possible avec un fichier texte enregistré au format "*Unicode (UTF-8)*"

Voici le script

```
set x to choose file with prompt "Sélectionnez un fichier .txt"
set dossier to choose folder

set manquant to ""
set myList to paragraphs of (read x as «class utf8»)

tell application "Finder" to tell folder dossier
	repeat with i in myList
		if not (exists item i) then set manquant to manquant & (contents of i) & return
	end repeat
end tell
if manquant is not "" then
	set x to "Fichiers manquant dans le dossier " & dossier & return & return & manquant
	tell application "TextEdit"
		make new document at end of documents with properties {text:x}
		activate
	end tell
else
	activate
	display dialog "Les fichiers sont tous présents" giving up after 4
end if
```

*Note du modo :* Pearldiver, quand on cherche sur MacGe de l'aide pour programmer, on ne poste pas dans "Applications", il y a le forum "Développement sur Mac" pour ça ! On déménage.


----------



## Pearldiver (16 Septembre 2010)

C'est exactement ce que je voulais!
Merci beaucoup pour votre aide !!

Flo

(et désolée d'avoir posté le message au mauvais endroit)

---------- Nouveau message ajouté à 11h46 ---------- Le message précédent a été envoyé à 11h20 ----------

je vais quand même compliquer un peu les choses, car je dois faire cela pour plusieurs fichiers et je voudrais qu'il me donne également le nom du fichier txt dans lequel ces tif sont manquants
on peut faire ça de 2 façons
1ère:
j'ai par exemple 3 fichiers txt (chacun des noms.tif dans la première colonne)
j'exécute le script pour chacun des fichiers
ensuite il faudrait rassembler les 3 résultats

2ème (que je préfèrerais)
j'ai un seul fichier txt (qui rassemble les 3) mais avec 2 colonnes :
la 1ère les noms.tif , la 2ème le nom du txt
donc par exemple à partir de :
12.tif   fichier 01.txt
13.tif   fichier 01.txt
14.tif   fichier 02.txt
15.tif   fichier 03.txt

si par exemple le 14.tif n'existe pas, je voudrais obtenir le message 
fichiers manquants :
14.tif  fichier 02.txt

(tout les .tif se trouvent dans le même dossier)

cela vous paraît faisable?

Merci d'avance
Flo


----------



## Anonyme (16 Septembre 2010)

Bonjour,



Pearldiver a dit:


> 2ème (que je préfèrerais)
> j'ai un seul fichier txt (qui rassemble les 3) mais avec 2 colonnes :
> la 1ère les noms.tif , la 2ème le nom du txt



Oui, c'est faisable sans problème.
Mais, le nom du fichier *.tif* ne doit pas contenir le caractère qui sépare les colonnes.

Voici le script, je présume que le séparateur de colonnes est un espace, sinon modifie la première ligne dans le script.

```
set separ to " "
set manquant to ""

set x to choose file with prompt "Sélectionnez un fichier .txt"
set dossier to choose folder
set myList to my listeNoms(get paragraphs of (read x as «class utf8»), separ)


tell application "Finder" to tell folder dossier
	repeat with i in myList
		set nom to item 1 of i
		if not (exists item nom) then set manquant to manquant & nom & separ & item 2 of i & return
	end repeat
end tell

if manquant is not "" then
	set x to "Fichiers manquants dans le dossier \"" & dossier & "\"" & return & return & manquant
	tell application "TextEdit"
		make new document at end of documents with properties {text:x}
		activate
	end tell
else
	activate
	display dialog "Les fichiers sont tous présents" giving up after 4
end if

on listeNoms(t, s)
	set oldTid to text item delimiters
	set text item delimiters to s
	repeat with i in t
		tell i to set contents to {text item 1, (text items 2 thru -1) as string}
	end repeat
	set text item delimiters to oldTid
	return t
end listeNoms
```


----------



## Pearldiver (16 Septembre 2010)

merci! j'essaierai ça demain
Il ne me reste plus qu'à trouver comment créer mon fichier txt unique à partir des divers txt (après tri, suppression de doublon etc..) mais c'est une autre histoire


----------



## Pearldiver (20 Septembre 2010)

ça marche (j'ai juste changé l'espace par ; et fait un fichier csv au lieu d'un txt (dont le séparateur était la tabulation - et changé le "fichiers manquants dans le dossier..", par ".. dans le fichier.." )
j'ai encore quelques petites questions:

1) un petit détail qui ne doit pas être bien compliqué (et pas indispensable):
le x est un alias
je voudrais le récupérer en texte pour pouvoir ne sélectionner et afficher dans mon textedit que le nom du fichier et pas tout l'alias
c'est à dire au lieu d'avoir "les fichiers manquants dans le fichier : bureau:dossier:01.txt"
d'avoir simplement "les fichiers manquants dans le fichier : 01.txt"
j'ai bien réussi à le définir en texte, mais le "get last text item of.." ne marche pas, il me dit que ça ne fonctionne pas avec un alias

2) j'ai créé des processus excel avec automator 
comment intégrer ces processus dans mon programme applescript?

3) c'est peut-être plus un question excel:
dans excel, comment créer un processus automator (ou directement en applescript) pour faire un filtre élaboré : mettre une colonne dans l'ordre croissant en supprimant les doublons?

merci d'avance pour vos précieuses réponses!
flo


----------



## Anonyme (21 Septembre 2010)

Bonjour,



Pearldiver a dit:


> 1) mais le "get last text item of.." ne marche pas, il me dit que ça ne fonctionne pas avec un alias


Voici une solution :

```
if manquant is not "" then
	tell application "Finder" to set nom to name of x
	set x to "Fichiers manquants dans le fichier \"" & nom & "\"" & return & return & manquant
```






Pearldiver a dit:


> 2) j'ai créé des processus excel avec automator
> comment intégrer ces processus dans mon programme applescript?


Pour executer un workflow dans un script AppleScript : voici un exemple 
	
	



```
do shell script "/usr/bin/automator ~/Library/Workflows/Applications/Finder/CD\\ terminal.workflow"
```

Ou l'inverse, tu mets ton script dans l'action "*Executer un script AppleScript*" de ton workflow *Automator*

```
on run {input, parameters}
	--ici c'est ton script 
end run
```
 ignore les variables *{input, parameters}*


--


Pearldiver a dit:


> 3) c'est peut-être plus un question excel:
> dans excel, comment créer un processus automator (ou directement en applescript) pour faire un filtre élaboré : mettre une colonne dans l'ordre croissant en supprimant les doublons?


Comme ceci, il trie la première colonne ( les rangées suivent l'ordre)  et supprime la rangée au complet si doublon dans la  première colonne.
Sinon, pour  trier la première colonne et que les autres cellules ne bougent pas et que la rangée complète ne se supprime pas, utilise les lignes en commentaires à la place 


```
tell application "Microsoft Excel"
	sort (used range of active sheet) key1 column 1 order1 sort ascending
	--sort (column 1 of active sheet) key1 column 1 order1 sort ascending
	set tIndex to my cherchedoublons(get value of column 1 of used range of active sheet)
	if tIndex is not {} then
		set tc to count tIndex
		repeat with i from tc to 1 by -1
			delete row (item i of tIndex)
			--delete cell (item i of tIndex) of column 1
		end repeat
	end if
end tell


on cherchedoublons(l)
	script ob
		property l1 : l
		property unique : {}
	end script
	set t_index to {}
	set the_count to (count ob's l1) - 1
	considering case
		repeat with i from 1 to the_count
			set t to (item i of ob's l1) as string
			if t = (item (i + 1) of ob's l1) as string then
				set end of t_index to (i + 1)
			end if
		end repeat
	end considering
	return t_index
end cherchedoublons
```


----------



## Pearldiver (21 Septembre 2010)

Merci Mac_Jac
pour le 1) ok
pour le 2) ça marche pas, je dois faire une mauvaise manip, j'ai ce message d'erreur :
Erreur d'applescript
erreur dans microsoft Excel : sh : line 1 : Macintosh: command not found
pour le 3) ça marche, mais c'est très long, mes fichiers txt font en général entre 30 et 20 000 lignes

je posais mes questions au compte-goutte car je voulais chercher un peu par moi-même, mais après cette initiation, c'est peut-être plus simple si je pose le problème complet :

voici ce que j'essaie de faire:
 j'ai un dossier A dans lequel il y a des fichiers txt (entre 1 et 20 fichiers environ, ex 01-543.txt, 02-5798.txt .. etx)
dans ces fichiers txt (tabulations), il y a des noms de fichiers tif dans la colonne 119
je veux pouvoir contrôler si les fichiers tif sont existants dans mon dossier B
et en cas de manquants, avoir un fichier (si possible un seul fichier qui regroupe tout) TextEdit comme vous aviez fait qui me dise:
fichiers manquants dans le fichier 01:
5113.tif
5452.tif

fichiers manquants dans le fichier 02:
265.tif

etc..
voilà

je pensais ouvrir un fichier txt dans excel (ex 02-541.txt), copier la colonne 119 dans un nouveau fichier, faire le tri croissant, supprimer les doublons, enregistrer le fichier sous le nom 02, et faire la recherche dans le dossier B (comme le script que vous m'avez indiqué), et faire cela pour tout les fichiers txt du dossier A

j'espère ne pas abuser de votre aide

Flo


----------



## Anonyme (23 Septembre 2010)

Bonjour,

J'avais envoyé un message, il y a environ *3h30* et il a été supprimé, probablement à cause de la migration des serveurs de MacGeneration.



Pearldiver a dit:


> pour le 2) ça marche pas, je dois faire une mauvaise manip, j'ai ce message d'erreur :
> Erreur d'applescript
> erreur dans microsoft Excel : sh : line 1 : Macintosh: command not found


Il ne faut pas utiliser la commande do shell script dans un bloc *tell application "Microsoft Excel"*.
Sinon il faut mettre un "tell me" avant.

```
tell me to do shell script "/usr/bin/automator ~/Library/Workflows/Applications/Finder/CD\\ terminal.workflow"
```




Pearldiver a dit:


> pour le 3) ça marche, mais c'est très long, mes fichiers txt font en général entre 30 et 20 000 lignes
> 
> je posais mes questions au compte-goutte car je voulais chercher un peu par moi-même, mais après cette initiation, c'est peut-être plus simple si je pose le problème complet :


Il est préférable d'utiliser les commandes *shell* pour une plus grande rapidité quand il faut traiter des milliers de fichiers et des milliers de lignes de texte.

Les problèmes possibles sont les fins de lignes et l'encodage des fichiers texte.

Tant que les noms contiennent des caractères *ASCII* de base, l'encodage ne causera pas de problème.

Les fin de ligne pour un fichier texte (_séparée par tabulation_) enregistrées par "*Microsoft Excel 2004*" est une fin de ligne Mac, ça  ne devrait pas avoir changé dans  "Excel 2008", donc j'ai spécifié la fin de ligne dans *awk* comme ceci. *RS=\"\\r\"*

Voici le script :

```
-- le dossier qui contient les fichiers texte
set dossier_txt to quoted form of POSIX path of (choose folder with prompt "sélectionnez le dossier des fichiers .txt")
-- le dossier qui contient les fichiers tif
set dossier to quoted form of POSIX path of (choose folder with prompt "sélectionnez le dossier des fichiers .tif")

set t_awk to quoted form of "/usr/bin/printf \"\\nFichiers manquants dans le fichier \\\"\"\"${0##*/}\\\"\\n\" >>fichiers_manquants.txt
/usr/bin/awk -F\"\\t\" '$119 !=\"\" { print $119 }' RS=\"\\r\" \"$0\" | /usr/bin/sort -uf  | while read line;do
   if [ ! -e \"$line\" ];then /bin/echo \"$line\" >>fichiers_manquants.txt;fi
done"

do shell script "cd " & dossier & ";/bin/rm -f fichiers_manquants.txt;
/usr/bin/find " & dossier_txt & " -maxdepth 1  -name '*.txt' -print0 | /usr/bin/xargs -0 -n1 sh -c " & t_awk

-- ** ouverture du fichier dans TextEdit
do shell script "cd " & dossier & ";if [ -e fichiers_manquants.txt ];then /usr/bin/open -b com.apple.textedit fichiers_manquants.txt;fi"
```

*1-* Le script recherche les fichiers "*.txt*" dans le dossier (il est préférable que les fichiers texte dans ce dossier soit tous des fichiers Excel, sinon on peut filtrer le nom du fichier avec un dénominateur commun) .
À chaque fichier trouvé, il écrit une ligne dans le fichier texte "*fichiers_manquants.txt*"  --> Fichiers manquants dans le fichier "*xyz.txt*"

*2-* Après il récupère les données dans la colonne *119* ( les cellules vides sont ignorées), il trie les noms et supprime les doublons.

*3-* Pour chaque nom, il vérifie l'existence du fichier *tif*, sil n'existe pas, il ajoute le nom du fichier *tif* dans le  fichier texte "fichiers_manquants.txt".

*4-* Après, il affichera le résultat dans "*TextEdit*"


----------



## Pearldiver (23 Septembre 2010)

Merci, ça devient un peu compliqué pour moi, mais je vais essayer de plancher sur tout ça (pas évident car je n'ai pas de mac à la maison, et au travail pas beaucoup de temps à y consacrer)


----------



## Anonyme (24 Septembre 2010)

Bonjour,

Voici un script qui est *1000 fois plus rapide*, testé avec 110000 noms, *2 secondes* pour afficher le résultat dans TextEdit sur un PPC dual 1.8 GHz.

Le script compare deux fichiers textes (la liste des *TIF* et  la liste des *noms* (colonne 119)) au lieu de vérifier l'existence du fichier TIF à chaque fois dans le dossier.

```
-- le dossier qui contient les fichiers texte
set dossier_txt to quoted form of POSIX path of (choose folder with prompt "sélectionnez le dossier des fichiers .txt")
-- le dossier qui contient les fichiers tif
set dossier to quoted form of POSIX path of (choose folder with prompt "sélectionnez le dossier des fichiers .tif")

-- ** création du fichier texte contenant la liste des fichiers TIF, supprime le fichier  "fichiers_manquants.txt"
do shell script "cd " & dossier & ";/usr/bin/find .  -maxdepth 1 -name '*.jpg' | /usr/bin/sed 's/.\\///' > la_liste_des_TIF.txt
/bin/rm -f fichiers_manquants.txt"

-- ** commande pour créer un fichier texte contenant la liste des noms (colonne 119 du fichier texte Excel) 
-- pour chaque fichier texte trouvée, compare la liste des fichiers tiff avec la liste des noms (colonne 119)
-- ajoute (es noms qui n'existent pas dans le dossier)  dans le fichier "fichiers_manquants.tx"
set t_awk to quoted form of "/usr/bin/printf \"\\nFichiers manquants dans le fichier \\\"\"\"${0##*/}\\\"\\n\" >>fichiers_manquants.txt
/usr/bin/awk -F\"\\t\" '$119 !=\"\" { print $119 }' RS=\"\\r\" \"$0\" | /usr/bin/sort -uf  > LA_Liste_colonne_119.txt && /usr/bin/diff -a --changed-group-format=\"%>\" --unchanged-line-format=\"\" la_liste_des_TIF.txt LA_Liste_colonne_119.txt>>fichiers_manquants.txt;/bin/echo \"\" "

-- execute la commande
do shell script "cd " & dossier & ";/usr/bin/find " & dossier_txt & " -maxdepth 1 -name '*.txt' -print0 | /usr/bin/xargs -0 -n1 sh -c " & t_awk

-- ** ouverture du fichier dans TextEdit
do shell script "cd " & dossier & ";if [ -e fichiers_manquants.txt ];then /usr/bin/open -b com.apple.textedit fichiers_manquants.txt;fi"
```

Aussi je voudrais te dire en cas que tu aies peur d'exécuter le script, ces scripts ne modifient pas les fichiers texte *Excel*, le tri et la suppression des doublons se font en mémoire.


----------



## Pearldiver (24 Septembre 2010)

Bonjour,

Merci infiniment! Je n'ai pas encore testé le 2ème script plus rapide, mais le premier marche déjà à merveille et va très vite (quelques secondes), je suis épatée!
J'ai juste dû changer une petite chose, car je n'avais pas précisé que les fichiers .txt avaient des terminaisons diverses du type .tx1 .tx2 .txA etc..
j'ai juste changé le
-name '*.txt'
par :
-name '*.tx*'
et ça fonctionne

le dossier dans lequel se trouve les tif étant toujours au même endroit sur une serveur et même nom de dossier, je pense changer le (choose folder with prompt "sélectionner le dossier des fichiers .tif") en mettant directement l'alias

j'ai aussi remarqué que le fichier fichiers_manquants.txt se retrouve dans le dossier des .tif
C'est un détail, mais serait-il possible qu'il se retrouve plutôt dans le dossier des fichiers .txt ? (il faudra alors peut-être changer la terminaison du fichiers_manquants.txt pour éviter qu'il soit traité comme les autres .tx*)

je testerai le 2ème script lundi

j'ai bien envie d'aller un peu plus loin: en fait dans l'idéal j'ai une 2ème colonne à contrôler (colonne 74) dans ces mêmes fichiers .tx* 
La grande différence est que le dossier dans lequel il faut faire la recherche dépend de la terminaison:
dossier A1 pour .tx1  .tx3  .tx9
dossier A2 pour .tx2  .tx4  .txA
dossier A3 pour .tx5  .tx8
dossier A4 pour .tx6
dossier A5 pour .tx7 .txB
dossier A6 pour .txC .txD

et donc dans l'idéal avoir par exemple comme fichier final fichiers_manquants :
fichiers manquants dans le fichier 01.tx3
574.tif
975.tif
AA648
BS685

fichiers manquants dans le fichier 02.tx3
846.tif
CG9854

fichiers manquants dans le fichier 03.txA
FR548

Qu'en penses-tu?

(Encore un grand merci pour ton aide!)

Flo


----------



## Anonyme (25 Septembre 2010)

Bonjour,

Correction à faire dans mon dernier script  mettre *tif* au lieu de *jpg* dans le premier do shell script, j'avais testé sur des fichiers JPEG




Pearldiver a dit:


> je pense changer le (choose folder with prompt "sélectionner le dossier des fichiers .tif") en mettant directement l'alias


Oui, c'est mieux, le choose folder  c'était temporaire puisque je ne connais pas le chemin de vos dossiers.





Pearldiver a dit:


> j'ai aussi remarqué que le fichier fichiers_manquants.txt se retrouve dans le dossier des .tif
> C'est un détail, mais serait-il possible qu'il se retrouve plutôt dans le dossier des fichiers .txt ? (il faudra alors peut-être changer la terminaison du fichiers_manquants.txt pour éviter qu'il soit traité comme les autres .tx*)


OK, il suffit de ne pas mettre d'extension, supprime *.txt* à tous les *fichiers_manquants.txt*

Pour l'avoir dans le dossier des fichiers .txt, remplace le dernier do shell script

```
do shell script "if [ -e " & dossier & "fichiers_manquants ];then
/bin/mv -f " & dossier & "fichiers_manquants  " & dossier_txt & "fichiers_manquants && /usr/bin/open -b com.apple.textedit " & dossier_txt & "fichiers_manquants;
 fi"
```
 




Pearldiver a dit:


> j'ai une 2ème colonne à contrôler (colonne 74) dans ces mêmes fichiers .tx*
> La grande différence est que le dossier dans lequel il faut faire la recherche dépend de la terminaison:
> dossier A1 pour .tx1  .tx3  .tx9
> dossier A2 pour .tx2  .tx4  .txA
> ...


Le script doit rechercher dans un autre dossier (selon l'extension du fichier texte) , mais, est-ce que c'est le  nom du fichier *tif* ou le nom contenu dans la colonne 78, que le script doit recherché dans le dossier *A*x ?
Si c'est  le nom ( contenu dans la colonne 78), est-ce que c'est un nom complet ? --> EX *AA648*

Détails à connaître pour  le script :
Est-ce que les dossiers (*A1 à A6*) sont à la racine du même dossier ou à divers emplacements ?
Est-ce que  (*A1, A6*) sont leurs vrais noms ?


----------



## Pearldiver (26 Septembre 2010)

oui j'avais vu pour les jpg/tif merci.



Mac_Jac a dit:


> Le script doit rechercher dans un autre dossier (selon l'extension du fichier texte) , mais, est-ce que c'est le nom du fichier *tif* ou le nom contenu dans la colonne 78, que le script doit recherché dans le dossier *A*x ?
> Si c'est le nom ( contenu dans la colonne 78), est-ce que c'est un nom complet ? --> EX *AA648 *


(colonne 74, pas 78)
oui c'est bien le nom complet contenu dans la colonne 74 qu'il doit rechercher : AA648



Mac_Jac a dit:


> Détails à connaître pour le script :
> Est-ce que les dossiers (*A1 à A6*) sont à la racine du même dossier ou à divers emplacements ?
> Est-ce que (*A1, A6*) sont leurs vrais noms ?


Oui ces dossiers (qui concernent la colonne 74) se trouvent dans le même dossier racine (le dossier des tif qui concerne la colonne 119 se trouve lui dans un autre dossier racine)
et non ce ne sont pas les noms exacts, ils sont du style:
Horizontale
Format A5
etc..

par exemple pour un fichier 01.tx1
il faut contrôler si les noms de fichiers de la colonne 119 sont bien dans le dossier des tif
et si les noms de fichiers de la colonne 74 sont bien dans le dossier A1

Merci


----------



## Anonyme (26 Septembre 2010)

Bonjour,



Pearldiver a dit:


> par exemple pour un fichier 01.tx1
> il faut contrôler si les noms de fichiers de la colonne 119 sont bien dans le dossier des tif
> et si les noms de fichiers de la colonne 74 sont bien dans le dossier A1


OK, c'est faisable.

Mais, je vais ne faire la modification que pour un seul script.
Donc, je te laisse tester mes deux derniers scripts, tu me diras lequel  des deux  vous voulez utiliser.


----------



## Pearldiver (26 Septembre 2010)

ok merci beaucoup!


----------



## Pearldiver (27 Septembre 2010)

Bonjour,

les 2 scripts fonctionnent, mais le 1er est plus rapide
(1 ou 2 seconde pour le premier - une vingtaine de secondes pour le 2ème)
peut-être parce que le dossier des tif contient environ 20 000 fichiers

je préfère donc qu'on utilise le 1er 

petit détail (pas indispensable mais pratique): est-ce possible que le nom du fichier final fichiers_manquants contienne la date du jour sous la forme yyyymmdd ?
par exemple pour aujourd'hui:
fichiers_manquants_20100927

Merci!
flo


----------



## Anonyme (27 Septembre 2010)

Bonjour,



Pearldiver a dit:


> petit détail (pas indispensable mais pratique): est-ce possible que le nom du fichier final fichiers_manquants contienne la date du jour sous la forme yyyymmdd ?
> par exemple pour aujourd'hui:
> fichiers_manquants_20100927


OK, c'est fait.

Voici le script :

```
set dossier to quoted form of POSIX path of (alias "Disque1:Users:jack:Desktop:dossier sans titre 5:") -- le dossier qui contient les fichiers tif
set parent_desAutreDossiers to POSIX path of (alias "AutresDocuments:abcd:") -- le dossier parent des dossiers A1 à A6
set Noms_autreDossiers to {"A1", "A2", "A3", "A4", "A5", "A6"} -- les 6 noms des dossiers

-- le dernier caractère du fichier texte, 6 éléments dans la liste, 13 caractères au total 
set terminaisonList to {"139", "24A", "58", "6", "7B", "CD"} --l'index d'un élément dans cette liste correspond à un nom de dossier dans la liste Noms_autreDossiers

-- le dossier qui contient les fichiers texte
set dossier_txt to quoted form of POSIX path of (choose folder with prompt "sélectionnez le dossier des fichiers .txt")

-- ** récupere la liste des fichiers .tx? --> ? pour un seul caractere après .tx, au lieu de * (possibilité de plusieurs caracteres)
set textFiles to do shell script "/usr/bin/find " & dossier_txt & " -maxdepth 1 -name '*.tx?' -print"
if textFiles is not "" then
	set tc to (count terminaisonList)
	set laDate to do shell script "/bin/date \"+%Y%m%d\"" --  la date du jour
	set missing_File to dossier_txt & "fichiers_manquants_" & laDate --  le chemin du fichier "fichiers_manquants+date" dans le dossier des fichiers texte Excel
	do shell script "/bin/echo \"\" >" & missing_File -- création du fichier ou efface le contenu du fichier existant (si plusieurs execution dans la meme journée)
	
	repeat with i in (get paragraphs of textFiles) -- boucle avec la liste des fichiers texte Excel
		set this_textFile to contents of i
		set lastChar to last character of this_textFile
		set t_folder to ""
		considering case -- la casse est importante, "c" n'égale pas "C"
			repeat with J from 1 to tc -- boucle pour mettre dans la variable  t_folder, le chemin du dossier selon la terminaison du fichier texte
				if lastChar is in (get item J of terminaisonList) then
					set t_folder to quoted form of (parent_desAutreDossiers & (item J of Noms_autreDossiers) & "/")
					exit repeat
				end if
			end repeat
		end considering
		
		--  récupère les noms (col.. 119), ajoute (les noms qui n'existent pas dans le dossier)  dans le fichier "fichiers_manquants"
		do shell script "tFile=" & (quoted form of this_textFile) & "
/usr/bin/printf \"\\nFichiers manquants dans le fichier \\\"\"\"${tFile##*/}\\\"\\n\" >>" & missing_File & "
/usr/bin/awk -F\"\\t\" '$119 !=\"\" { print $119 }' RS=\"\\r\" \"$tFile\" | /usr/bin/sort -uf | while read line;do
   if [ ! -e " & dossier & "\"$line\" ];then /bin/echo \"$line\" >>" & missing_File & ";fi
done"
		
		if t_folder is not "" then -- la terminaison du fichier texte était dans la liste
			--récupère les noms (col.. 74), ajoute (les noms qui n'existent pas dans le dossier)  dans le fichier "fichiers_manquants"
			-- vérification de l'existence du dossier avant
			do shell script "if [ -d " & t_folder & " ];then
/usr/bin/awk -F\"\\t\" '$74 !=\"\" { print $74 }' RS=\"\\r\" " & (quoted form of this_textFile) & " | /usr/bin/sort -uf | while read line;do
   if [ ! -e " & t_folder & "\"$line\" ];then /bin/echo \"$line\" >>" & missing_File & ";fi
done;fi "
		end if
	end repeat
	
	do shell script " /usr/bin/open -b com.apple.textedit " & missing_File -- ** ouverture du fichier dans TextEdit
end if
```
*1-* Modifie les chemins dans les deux premières lignes, c'est  important de garder alias pour que le script ne s'exécute pas, si le dossier n'existe pas ou le disque n'est pas monté.
alias donnera une erreur.

*2-* Modifie les noms dans la troisième ligne.

*3-* Dans la quatrième ligne, vous pouvez ajouter d'autres caractères si plus tard vous avez d'autres fichiers texte avec une terminaison différente.


----------



## Pearldiver (27 Septembre 2010)

Merci Mac_Jac!
je teste ça demain et te tient au courant

si je comprends bien: l'ordre des données (dossiers et terminaisons) dans les "set" (ligne 3 et 4) est important, c'est lui qui détérmine l'association d'une terminaison et d'un dossier: la 1ère terminaison de la liste (139) correspond au au 1er dossier de la liste (A1), c'est ça?


----------



## Anonyme (27 Septembre 2010)

Pearldiver a dit:


> Merci Mac_Jac!
> si je comprends bien: l'ordre des données (dossiers et terminaisons) dans les "set" (ligne 3 et 4) est important, c'est lui qui détérmine l'association d'une terminaison et d'un dossier: la 1ère terminaison de la liste (139) correspond au au 1er dossier de la liste (A1), c'est ça?


Oui,  exactement.

Autres exemples plus précis.:
 si le dernier caractère dans le nom du fichier texte est *1* ou *3* ou *9*, ce sera le dossier "*A1*"
Parce que "*139*" est le premier élément dans sa liste et que  "*A1*" est le premier élément dans la liste  des noms de dossier

si le dernier caractère dans le nom du fichier texte est *7* ou *B*, ce sera le dossier "*A5*"
Parce que "*7B*" est le cinquième élément dans sa liste et que  "*A5*" est le cinquième élément dans la liste des noms de dossier


----------



## Pearldiver (28 Septembre 2010)

Bravo Mac_Jac !!!
ça fonctionne parfaitement, c'est exactement ce que je voulais!
un ENORME merci pour tout !!


----------



## ZIED ETTRI (28 Avril 2018)

Mac_Jac a dit:


> Bonjour,
> 
> C'est possible avec un fichier texte enregistré au format "*Unicode (UTF-8)*"
> 
> ...


MERCI MAIS COMMENT LE FAIRE SACHANT QUE LES NON RECHERCHE SONT FICHIER JPEG  ET LA BASE DES NON FICHIER EXCELL


----------

