[R] Recherche occurence

Aide et conseils concernant AutoIt et ses outils.
Règles du forum
.
Répondre
neg
Niveau 2
Niveau 2
Messages : 19
Enregistré le : mar. 03 mai 2011 09:55
Status : Hors ligne

[R] Recherche occurence

#1

Message 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
Modifié en dernier par neg le mar. 31 mai 2011 14:04, modifié 1 fois.
Avatar du membre
zeshrek
Niveau 10
Niveau 10
Messages : 984
Enregistré le : mer. 17 nov. 2010 09:31
Localisation : Sur ma chaise
Status : Hors ligne

Re: [..] Recherche occurence

#2

Message 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
Si vis pacem para bellum
neg
Niveau 2
Niveau 2
Messages : 19
Enregistré le : mar. 03 mai 2011 09:55
Status : Hors ligne

Re: [..] Recherche occurence

#3

Message 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>).
Avatar du membre
zeshrek
Niveau 10
Niveau 10
Messages : 984
Enregistré le : mer. 17 nov. 2010 09:31
Localisation : Sur ma chaise
Status : Hors ligne

Re: [..] Recherche occurence

#4

Message par zeshrek »

je suppose que tu as bien les 2 fichiers liste1.txt et liste2.txt ?
non parceque sinon....
Si vis pacem para bellum
neg
Niveau 2
Niveau 2
Messages : 19
Enregistré le : mar. 03 mai 2011 09:55
Status : Hors ligne

Re: [..] Recherche occurence

#5

Message 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?
neg
Niveau 2
Niveau 2
Messages : 19
Enregistré le : mar. 03 mai 2011 09:55
Status : Hors ligne

Re: [..] Recherche occurence

#6

Message 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?
Avatar du membre
zeshrek
Niveau 10
Niveau 10
Messages : 984
Enregistré le : mer. 17 nov. 2010 09:31
Localisation : Sur ma chaise
Status : Hors ligne

Re: [..] Recherche occurence

#7

Message par zeshrek »

Rajoute deux _arraydisplay apres les _FileReadToArray histoire de voir ce qui est lu et si le pb vient bien de tes fichiers...
Si vis pacem para bellum
neg
Niveau 2
Niveau 2
Messages : 19
Enregistré le : mar. 03 mai 2011 09:55
Status : Hors ligne

Re: [..] Recherche occurence

#8

Message 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
neg
Niveau 2
Niveau 2
Messages : 19
Enregistré le : mar. 03 mai 2011 09:55
Status : Hors ligne

Re: [..] Recherche occurence

#9

Message 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?
Avatar du membre
zeshrek
Niveau 10
Niveau 10
Messages : 984
Enregistré le : mer. 17 nov. 2010 09:31
Localisation : Sur ma chaise
Status : Hors ligne

Re: [..] Recherche occurence

#10

Message 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
Si vis pacem para bellum
Avatar du membre
jchd
AutoIt MVPs (MVP)
AutoIt MVPs (MVP)
Messages : 2284
Enregistré le : lun. 30 mars 2009 22:57
Localisation : Sud-Ouest de la France (43.622788,-1.260864)
Status : Hors ligne

Re: [..] Recherche occurence

#11

Message 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.
La cryptographie d'aujourd'hui c'est le taquin plus l'électricité.
neg
Niveau 2
Niveau 2
Messages : 19
Enregistré le : mar. 03 mai 2011 09:55
Status : Hors ligne

Re: [..] Recherche occurence

#12

Message 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.
Avatar du membre
zeshrek
Niveau 10
Niveau 10
Messages : 984
Enregistré le : mer. 17 nov. 2010 09:31
Localisation : Sur ma chaise
Status : Hors ligne

Re: [..] Recherche occurence

#13

Message 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
Si vis pacem para bellum
neg
Niveau 2
Niveau 2
Messages : 19
Enregistré le : mar. 03 mai 2011 09:55
Status : Hors ligne

Re: [..] Recherche occurence

#14

Message par neg »

Super sa fonctionne niquel, merci pour ton aide zeshrek!
Avatar du membre
jchd
AutoIt MVPs (MVP)
AutoIt MVPs (MVP)
Messages : 2284
Enregistré le : lun. 30 mars 2009 22:57
Localisation : Sud-Ouest de la France (43.622788,-1.260864)
Status : Hors ligne

Re: [..] Recherche occurence

#15

Message par jchd »

S'il y a des noms de fichier incluant des espaces, ils seront rendus méconnaissables avec StringReplace ...
La cryptographie d'aujourd'hui c'est le taquin plus l'électricité.
neg
Niveau 2
Niveau 2
Messages : 19
Enregistré le : mar. 03 mai 2011 09:55
Status : Hors ligne

Re: [..] Recherche occurence

#16

Message par neg »

Ok merci pour la précision, mais aucun espace dans les noms d'objets donc pas de souci.

Merci!
Répondre