[R] Comparaison fichier texte

Aide et conseils concernant AutoIt et ses outils.
Règles du forum
.
Répondre
Avatar du membre
BioSs
Niveau 1
Niveau 1
Messages : 7
Enregistré le : ven. 21 mai 2010 23:41
Status : Hors ligne

[R] Comparaison fichier texte

#1

Message par BioSs »

Bonjour,
Je travail actuellement sur un script permettant de récupérer des informations sur deux sites différents et de les comparer entre elles...
Ne sachant pas très bien magner AutoIT, j'ai utilisé l'ouverture de notepad puis le collage directement dans le fichier texte.
Or, je bute vraiment pour la suite... La comparaison des deux fichiers est assez compliquée et malheureusement, la fonction rechercher n'a pas fait mon bonheur...
Si vous pourriez m'éclairer un peu, ce serai sympa de votre part.

D'avance, merci.
BioSs.
Modifié en dernier par BioSs le lun. 24 mai 2010 15:40, modifié 1 fois.
Avatar du membre
matwachich
Membre émérite
Membre émérite
Messages : 986
Enregistré le : lun. 19 oct. 2009 04:04
Localisation : Algérie
Status : Hors ligne

Re: [..] Comparaison fichier texte

#2

Message par matwachich »

Bah, ya plusieurs scénarios!
- Tu veut comparer le contenu des fichiers

Code : Tout sélectionner

$read1 = fileread("ficheir1.txt")
$read2 = fileread("fichier2.txt")

if $read1 = $read2 then
Msgbox(0,"","Fichiers identiques")
else
Msgbox(0,"","Fichiers differents")
endif
Ou alors tous simplement la taille des fichiers:

Code : Tout sélectionner

$taille1 = filegetsize("fichier1")
$taille2 = filegetsize("fichier2")

if $taille1 = $taille2 then
Msgbox(0,"","Fichiers identiques")
else
Msgbox(0,"","Fichiers differents")
endif
Ca depend de ce que tu veut faire, donne nous plus de détails!
Sortons VW du coté obscure! - La curiosité est un vilain défaut! Cliquez ici
Avatar du membre
Tlem
Site Admin
Site Admin
Messages : 11824
Enregistré le : ven. 20 juil. 2007 21:00
Localisation : Bordeaux
Status : Hors ligne

Re: [..] Comparaison fichier texte

#3

Message par Tlem »

Le plus simple serait de nous dire ce que vous avez au départ et ce que vous voulez à l'arrivée.
Thierry

Rechercher sur le forum ----- Les règles du forum
Le "ça ne marche pas" est une conséquence commune découlant de beaucoup trop de raisons potentielles ...

Une idée ne peut pas appartenir à quelqu'un. (Albert Jacquard) tiré du documentaire "Copié n'est pas volé".
SagePourpre
Niveau 7
Niveau 7
Messages : 442
Enregistré le : dim. 06 juil. 2008 09:11
Status : Hors ligne

Re: [..] Comparaison fichier texte

#4

Message par SagePourpre »

Pour parvenir à ton résultat, la méthode qui me vient à l'esprit serait d'utiliser

Code : Tout sélectionner

#include <Inet.au3>
$source = _INetGetSource('http://www.SiteàRécupérer.com')
 
Pour trouver des informations spécifiques, deux solutions.
De loin la plus aisée serait d'utiliser

Code : Tout sélectionner

StringMid


Beaucoup plus compliquée mais pas mal mieux

Code : Tout sélectionner

StringRegExp

En utilisant cette méthode, tu seras en mesure de récupérer les informations voulues sur
chacun des sites pour ensuite les comparer.
Le Sage Pourpre, pour qui la vie est tellement
plus belle vue du haut de son Pouf = )
Avatar du membre
BioSs
Niveau 1
Niveau 1
Messages : 7
Enregistré le : ven. 21 mai 2010 23:41
Status : Hors ligne

Re: [..] Comparaison fichier texte

#5

Message par BioSs »

Tout d'abord merci pour vos réponses et à l'intérêt que vous portez sur ce projet.

En fait, je récupère via copier-coller une phrase dans une page web et ensuite la place dans un bloc note.
Puis je fais la même chose avec une seconde page web que je place dans un second bloc note.

Le problème, c'est que ces phrases n'ont rien d'identique. Car le premier fichier contiendra une phrase du genre "Test possible" ou "Test impossible"
et le second des valeurs du genre : "Affaiblissement U:20 D:40 S:42"

Le fait est que lorsque le Test est possible, alors je lui assigne une valeur (34 par exemple) et je le compare au "D:40"...

Je ne sais pas si vous m'avez correctement compris. Mais je pourrais à mon tour vous éclairez sur le but de mon projet... (Même si c'est très long à expliquer ^^)
SagePourpre
Niveau 7
Niveau 7
Messages : 442
Enregistré le : dim. 06 juil. 2008 09:11
Status : Hors ligne

Re: [..] Comparaison fichier texte

#6

Message par SagePourpre »

Voici un exemple simple de comparaison réalisée à l'aide de deux lignes récupérées...

Naturellement, il te reste à l'adapter à ton script mais c'est une bonne ligne directrice

Code : Tout sélectionner

#include <Array.au3>
Local $site1phrase = 'Test possible' = '' ;Stocke "Test possible" ou "Test impossible" ici à l'aide de ta méthode

    Local $u1,$d1,$s1
Switch $site1phrase
    Case 'Test possible' ; on assigne des valeurs aux éléments à comparer selon si le premier site renvoie test possible ou impossible
        $u1 = '34'
        $d1 = '34'
        $s1 = '34'
    Case 'Test impossible'
        $u1 = ''
        $d1 = ''
        $s1 = ''
EndSwitch



Local $site2phrase = "Affaiblissement U:20 D:40 S:42" ; ex de phrase récupérée par ton 2eme site :
$site2phrase = StringSplit($site2phrase, ' :', 0)
;_ArrayDisplay($site2phrase)  ; Enlever commentaire pour voir tableau généré
Local _
        $u2 = $site2phrase[3], _
        $d2 = $site2phrase[5], _
        $s2 = $site2phrase[7]


$result = Compare($u1,$u2)
MsgBox(0,'',$result)


Func Compare($v1,$v2)
    If $v1 = $v2 Then
        Return 1  ; Retourne 1 si la première valeur comparée est égale à la deuxième
    Else
        Return 0 ; Retourne 0 si la première valeur comparée n'est égale à la deuxième
    EndIf
EndFunc
 
StringRegExp est une excellente méthode pour trouver n'importe quel bout de texte dans n'importe quoi
et est plus susceptible de résister à un léger changement dans le code mais beaucoup plus complexe à maîtriser.
J'évite donc de m'en servir dans cet exemple.
Le Sage Pourpre, pour qui la vie est tellement
plus belle vue du haut de son Pouf = )
Avatar du membre
BioSs
Niveau 1
Niveau 1
Messages : 7
Enregistré le : ven. 21 mai 2010 23:41
Status : Hors ligne

Re: [..] Comparaison fichier texte

#7

Message par BioSs »

Merci pour ta réponse !
J'ai essayer ta méthode mais sans réél réussite...
Déjà que j'suis pas très bon en C ! Alors en AutoIT...
Enfin bref !

Serais-ce plus simple si je mets toutes mes informations dans 1 seul fichier texte ?
Par exemple :

Fichier1.txt

Code : Tout sélectionner

REPONSE REFLET : POSSIBLE

038XXXX046 
Ad IP: 10.1XX.2XX.1XX 
Atténuation en dB  
U: 12  D: 29  Seuil: 34  
Marge en dB  
U: 17  D: 8  Seuil: 8  
Synchro (kbits/s)  
U: 950  D: 8665  
Stabilité: OK 
Seuil CRC  
U: 360  D: 360  
Valeur CRC  
U: 0  D: 0  
Client Vpi/Vci: 8 / 35  
Dslam: DSXXXX03 
Accueil 
Retour 
 
Et que depuis ce fichier je recherche une valeur qui correspond soit à "REPONSE REFLET : POSSIBLE" soit à "REPONSE REFLET : IMPOSSIBLE". Ensuite j'affecte une valeur à cette réponse.
Et je compare cette valeur à D: "29" avec une condition.

C'est encore assez confus dans ma tête donc j'essai de me faire un p'tit schèma...
SagePourpre
Niveau 7
Niveau 7
Messages : 442
Enregistré le : dim. 06 juil. 2008 09:11
Status : Hors ligne

Re: [..] Comparaison fichier texte

#8

Message par SagePourpre »

Voici un exemple parfaitement fonctionnel avec l'exemple de fichier texte
que tu as fourni.

Code : Tout sélectionner

#include <Array.au3>
#include <File.au3>
Global _
        $arr, $NomduFichier = 'fichier.txt'


Local $f = _FileReadToArray($NomduFichier, $arr)
_ArrayDisplay($arr, 'Lignes Fichier Texte')


$PossibleOuImpossible = StringRegExp($arr[1], 'REPONSE REFLET : (.*)', 1)
$PossibleOuImpossible = $PossibleOuImpossible[0]

MsgBox(0, '', $PossibleOuImpossible)




For $i = 2 To $arr[0]
    Local $regexp = StringRegExp($arr[$i], 'U: (\w*)  D: (\w*)  (?:Seuil\: )?(\w*)?', 1)
    If @error Then ContinueLoop ; Si la ligne ne contient pas les infos qui nous intéressent, on passe directement à la prochaine ligne
    _ArrayDisplay($regexp)

    Local _
            $u = $regexp[0], _
            $d = $regexp[1], _
            $seuil = $regexp[2]


    Switch $PossibleOuImpossible
        Case 'POSSIBLE'
            If Compare($u, '360') = 1 Then
            MsgBox(0,'','Reflet : ' & $PossibleOuImpossible & @CRLF & 'U est égal à 360' & @CRLF & '(ligne du fichier texte) : ' & $i)

            EndIf

        Case 'IMPOSSIBLE'
    EndSwitch


Next


Func Compare($v1, $v2)
    If $v1 = $v2 Then Return 1
    Return 0

EndFunc   ;==>Compare
 
Si tu veux en apprendre plus sur le fonctionnement de StringRegExp, tu peux regarder l'aide
et faire tes propres tests avec Regex Coach ( http://www.weitz.de/regex-coach/ )
Le Sage Pourpre, pour qui la vie est tellement
plus belle vue du haut de son Pouf = )
Avatar du membre
BioSs
Niveau 1
Niveau 1
Messages : 7
Enregistré le : ven. 21 mai 2010 23:41
Status : Hors ligne

Re: [..] Comparaison fichier texte

#9

Message par BioSs »

Je te remercie..
Je comprends un peu mieux le système et j'ai fait quelque chose de plus "écolier" ^^

Ca fonctionne pas trop trop mal...

Code : Tout sélectionner

#include <Array.au3>
#Include <File.au3>
Local $site1phrase = FileReadLine ( "fichier1.txt" , 1 ) ;Stocke "Test possible" ou "Test impossible" ici à l'aide de ta méthode
    Local $AffTheoriqueMax
Switch $site1phrase
    Case 'REPONSE REFLET : POSSIBLE' ; on assigne des valeurs aux éléments à comparer selon si le premier site renvoie test possible ou impossible
        $AffTheoriqueMax = '34'
    Case 'REPONSE REFLET : IMPOSSIBLE'
        $AffTheoriqueMax = ''
EndSwitch



Local $site2phrase = FileReadLine ( "fichier1.txt" , 7 ) ; ex de phrase récupérée par ton 2eme site :
$AffReel = StringSplit($site2phrase, ' :', 0)
;_ArrayDisplay($site2phrase)  ; Enlever commentaire pour voir tableau généré
Local _
        $u2 = $AffReel[3], _
        $d2 = $AffReel[7], _
        $s2 = $AffReel[11]
$result = Compare($AffTheoriqueMax,$d2)
If($result==0) Then
    MsgBox(0,'',"L'offre est correct. Aucun changement n'est à prevoir !")
Else 
        MsgBox(0,'',$AffTheoriqueMax)
        MsgBox(0,'',$d2)
        MsgBox(0,'','Le client est trop éloignée du central. Il faut effectuer un repli technique !')
EndIf

Func Compare($v1,$v2)
    If $v1 < $v2 Then
        Return 1  ; Retourne 1 si la valeur théorique est plus petite que la réel (donc offre OK).
    Else
        Return 0 ; Retourne 0 si la valeur réél est plus petite que la théorique (donc offre NOK).
    EndIf
EndFunc
 
SagePourpre
Niveau 7
Niveau 7
Messages : 442
Enregistré le : dim. 06 juil. 2008 09:11
Status : Hors ligne

Re: [..] Comparaison fichier texte

#10

Message par SagePourpre »

Pas de quoi.

Dans ton script écolier par contre, ça ne fonctionnera uniquement que si l'information
est toujours à la ligne 7. Si tel est le cas alors, il n'y a pas de soucis.

Si ton problème est résolu, n'oublie pas de changer la balise de titre de ton premier message
[..] pour [R]

Merci.
Le Sage Pourpre, pour qui la vie est tellement
plus belle vue du haut de son Pouf = )
Avatar du membre
BioSs
Niveau 1
Niveau 1
Messages : 7
Enregistré le : ven. 21 mai 2010 23:41
Status : Hors ligne

Re: [..] Comparaison fichier texte

#11

Message par BioSs »

Oui, effectivement, c'est le cas...
Merci !
Répondre