[R] Recherche occurence
Règles du forum
- Merci de consulter la section "Règles du forum" et plus particulièrement "Règles et Mentions Légales du site autoitscript.fr" avant d'écrire un message.
[R] Recherche occurence
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
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.
- zeshrek
- Niveau 10

- Messages : 984
- Enregistré le : mer. 17 nov. 2010 09:31
- Localisation : Sur ma chaise
- Status : Hors ligne
Re: [..] Recherche occurence
En partant du principe que tes deux exemples correspondent bien a fichier1.txt et fichier2.txt :
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
► Afficher le texte
Si vis pacem para bellum
Re: [..] Recherche occurence
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>).
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>).
- zeshrek
- Niveau 10

- Messages : 984
- Enregistré le : mer. 17 nov. 2010 09:31
- Localisation : Sur ma chaise
- Status : Hors ligne
Re: [..] Recherche occurence
je suppose que tu as bien les 2 fichiers liste1.txt et liste2.txt ?
non parceque sinon....
non parceque sinon....
Si vis pacem para bellum
Re: [..] Recherche occurence
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?
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
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?
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?
- zeshrek
- Niveau 10

- Messages : 984
- Enregistré le : mer. 17 nov. 2010 09:31
- Localisation : Sur ma chaise
- Status : Hors ligne
Re: [..] Recherche occurence
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
Re: [..] Recherche occurence
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
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
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?
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?
- zeshrek
- Niveau 10

- Messages : 984
- Enregistré le : mer. 17 nov. 2010 09:31
- Localisation : Sur ma chaise
- Status : Hors ligne
Re: [..] Recherche occurence
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
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
- jchd
- 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
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.
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é.
Re: [..] Recherche occurence
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.
Je vais voir avec stdoutread, merci pour ton aide!
Edit: Merci jchd, je vais tester StringStripWS.
- zeshrek
- Niveau 10

- Messages : 984
- Enregistré le : mer. 17 nov. 2010 09:31
- Localisation : Sur ma chaise
- Status : Hors ligne
Re: [..] Recherche occurence
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)
NextSi vis pacem para bellum
Re: [..] Recherche occurence
Super sa fonctionne niquel, merci pour ton aide zeshrek!
- jchd
- 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
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é.
Re: [..] Recherche occurence
Ok merci pour la précision, mais aucun espace dans les noms d'objets donc pas de souci.
Merci!
Merci!

