Page 1 sur 1

[R] Recherche occurence

Posté : lun. 30 mai 2011 15:40
par neg
Bonjour,

pour l'écriture d'un script qui doit me permette d'afficher une liste d'objets non utilisées, je doit écrire une fonction qui va comparer deux fichier,
-> Un fichier contenant la liste des objets utilisées
-> Et un fichier contenant la liste complète des objets

Exemple:

fichier1:
objet1
objet2
objet3
objet5
objet7

fichier2:
objet1
objet2
objet3
objet4
objet5
objet6
objet7
objet8

Le résultat doit m'afficher:
non utilisés:
objet4
objet6
objet8

Je cherche donc à lire ligne par ligne le fichier, et pour chacune des lignes vérifier si l'objet est dans le fichier2, et si non, l'afficher.
Je n'ai pas de problème pour lire le fichier ligne par ligne mais par contre je sèche complètement pour le reste, pourriez-vous m'indiquer une solution ou des exemples du même type?

Merci d'avance pour votre aide,

neg

Re: [..] Recherche occurence

Posté : lun. 30 mai 2011 16:43
par zeshrek
En partant du principe que tes deux exemples correspondent bien a fichier1.txt et fichier2.txt :
► Afficher le texte
Je ne suis pas passé par du ligne par lignes, c'est netement plus rapide (a programmer en tout cas) en passant par deux tableau

Re: [..] Recherche occurence

Posté : lun. 30 mai 2011 16:56
par neg
Merci zeshrek,

par contre j'ai une erreur quand j'intègre ton code dans mon script:

For $i = 1 To $liste1[0]
For $i = 1 To $liste1^ ERROR

Je n'ai jamais utilisé de tableau (débutant autoit) donc j'ai peut-être oublié quelque chose? (j'ai bien ajouté les include #include <File.au3>, #include <Array.au3>).

Re: [..] Recherche occurence

Posté : mar. 31 mai 2011 00:38
par zeshrek
je suppose que tu as bien les 2 fichiers liste1.txt et liste2.txt ?
non parceque sinon....

Re: [..] Recherche occurence

Posté : mar. 31 mai 2011 08:30
par neg
Oui j'ai bien les deux fichiers!

Edit: corrigé en passant les fichiers en variable, j'ai du faire une bourde dans le nom de mes fichiers, merci!

Par contre le tableau m'affiche la liste complète des objets, et non ceux qui ne sont pas utilisés?

Re: [..] Recherche occurence

Posté : mar. 31 mai 2011 09:13
par neg
En fait pour liste1.txt (liste des objets utilisés) je récupère la sortie d'une commande dos ( commande > liste1.txt),
Pour liste2.txt j'entre manuellement la liste complète dans une editbox, et cette liste est écrite dans liste2.txt via un bouton "save".

Les deux fichiers sont bien de ce genre la:

liste1.txt:
objet1
objet2
objet3
objet5
objet7

liste2.txt:
objet1
objet2
objet3
objet4
objet5
objet6
objet7
objet8

J'ai testé avec des fichiers écrits à la main et sa marche, donc je pense que l'un de mes deux fichiers n'est pas écrit correctement, mais je ne vois pas de différence, ni de caractère de retour chariot qui pourrait causer le problème?

Re: [..] Recherche occurence

Posté : mar. 31 mai 2011 09:34
par zeshrek
Rajoute deux _arraydisplay apres les _FileReadToArray histoire de voir ce qui est lu et si le pb vient bien de tes fichiers...

Re: [..] Recherche occurence

Posté : mar. 31 mai 2011 10:00
par neg
Voila ce qui est lu:

Liste1:
[0]|6
[1]|Objet9
[2]|Objet10
[3]|Objet1
[4]|Objet2
[5]|Objet3
[6]|Objet4

Liste2:
[0]|10
[1]|Objet1
[2]|Objet2
[3]|Objet3
[4]|Objet4
[5]|Objet5
[6]|Objet6
[7]|Objet7
[8]|Objet8
[9]|Objet9
[10]|Objet10


Et dans le

_ArrayDisplay($liste2) final:
Liste2:
[0]|Objet1
[1]|Objet2
[2]|Objet3
[3]|Objet4
[4]|Objet5
[5]|Objet6
[6]|Objet7
[7]|Objet8
[8]|Objet9
[9]|Objet10

Re: [..] Recherche occurence

Posté : mar. 31 mai 2011 10:11
par neg
J'ai testé avec des fichiers fait à la main, le problème viens du fichier liste1.txt qui contient la sortie de la commande dos (sa marche si je remplace liste1.txt par un liste1.txt écrit à la main).

Ma commande est de ce type:
RunWait("""c:\Program Files\......"" -option=""c:\Program Files\....."" -option1=" & $option1 & " -option2=" & $option2 &" -option3=yes ""select objet from Objets where type='1'"" > C:\liste1.txt")

Mais je ne vois pas de différence entre le fichier fait avec cette commande et le fichier fait à la main?

Re: [..] Recherche occurence

Posté : mar. 31 mai 2011 11:09
par zeshrek
Si ca marche quand tu fais le fichier a la main, c'est que la facon dont le fichier est généré automatiquement n'est pas bonne.
Il n'y a pas des espaces qui se baladent ?

Sinon plutot que de rediriger vers une sortie fichier, tu peux l'intercepter par stdoutread. Ensuite pour créer le tableau tu n'as plus qu'a faire un stringsplit en utilisant le séparateur @crlf
En plus question temps ca devrait etre plus rapide, puisque tu gagnes la phase d'écriture du fichier, puis celle de la relecture

Re: [..] Recherche occurence

Posté : mar. 31 mai 2011 11:12
par jchd
Sans un petit dump hex on en est réduit à des suppositions à grands coups de boule de crystal...

Peut-être un ou des espaces à la fin des noms de fichier ?
Utilise un StringStripWS avec l'option 3 pour t'en affranchir si c'est le cas.

Re: [..] Recherche occurence

Posté : mar. 31 mai 2011 11:19
par neg
Oui il y a effectivement des espaces après chaque objet, je viens de voir sa en sélectionnant tous le texte, du coup je cherche comment supprimer tous les espaces du fichier.

Je vais voir avec stdoutread, merci pour ton aide!

Edit: Merci jchd, je vais tester StringStripWS.

Re: [..] Recherche occurence

Posté : mar. 31 mai 2011 11:24
par zeshrek
pour supprimer les espaces, la boucle devient :

Code : Tout sélectionner

For $i = 1 To $liste1[0]
    $trouve = _ArraySearch($liste2, StringReplace($liste1[$i]," ",""))
    If $trouve <> -1 Then _ArrayDelete($liste2, $trouve)

Next

Re: [..] Recherche occurence

Posté : mar. 31 mai 2011 12:23
par neg
Super sa fonctionne niquel, merci pour ton aide zeshrek!

Re: [..] Recherche occurence

Posté : mar. 31 mai 2011 13:50
par jchd
S'il y a des noms de fichier incluant des espaces, ils seront rendus méconnaissables avec StringReplace ...

Re: [..] Recherche occurence

Posté : mar. 31 mai 2011 14:04
par neg
Ok merci pour la précision, mais aucun espace dans les noms d'objets donc pas de souci.

Merci!