[R] Récupérer une valeur dans des fichiers textes

Aide et conseils concernant AutoIt et ses outils.
Règles du forum
.
Avatar du membre
Tlem
Site Admin
Site Admin
Messages : 11798
Enregistré le : ven. 20 juil. 2007 21:00
Localisation : Bordeaux
Status : Hors ligne

Re: [..] Récupérer une valeur dans des fichiers textes

#21

Message par Tlem »

Non, ce n'est pas une erreur de syntaxe, mais je vient de comprendre que vous devez faire un Send particulier en fonction du fichier (comme d'habitude vous n'avez pas donné tous les éléments).

Donc pour traiter ce cas supplémentaire, il faut trouver une solution pour associer la bonne commande Send au bon fichier texte.
D'après ce que j'ai pu voir :
- DCSR4PS1A1D.txt = Send("AG2")
- DCSR4PS1A1M.txt = Send("AF2")

L'idée serait de garder le script sans les conditions IF et de rajouter ce fameux contrôle.
Pour ce faire il faut créer un tableau (ou équivalent) de correspondance entre le nom du fichier et la valeur de la commande Send.
A mon avis la solution la plus simple est le fichier .ini.
Créez un fichier de ce genre :

Code : Tout sélectionner

[File]
DCSR4PS1A1D.txt=AG2
DCSR4PS1A1M.txt=AF2
La suite de vos fichiers et leur correspondance ...
Dans votre code, au lieu de tester le nom du fichier pour attribuer une valeur à une variable, lisez le fichier .ini par la valeur de Search[$i] (qui doit correspondre au nom du fichier), et donc vous retourner la valeur du Send.

Code : Tout sélectionner

$ValSend = IniRead ( "Fichier.ini", "File", Search[$i], "" )
une fois cette valeur obtenue utilisez là dans la suite du code :

Code : Tout sélectionner

Send("^t")
Send($ValSend)
Send("{Enter}")
Send($Val)
Send("{Enter}")
Vous pouvez simplifier les deux codes ci-dessus en ceci :

Code : Tout sélectionner

Send("^t")
Send(IniRead ( "Fichier.ini", "File", Search[$i], "" ))
Send("{Enter}")
Send($Val)
Send("{Enter}")
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é".
ani
Niveau 11
Niveau 11
Messages : 1826
Enregistré le : lun. 23 juil. 2007 12:31
Localisation : Bureau
Status : Hors ligne

Re: [..] Récupérer une valeur dans des fichiers textes

#22

Message par ani »

Pourquoi ne pas utiliser l'objet excel, pour importer le resultat ? (+rapide et surement plus simple)
Evidement je ne peut vous aider, je ne dispose pas excel.
dadrocket
Niveau 2
Niveau 2
Messages : 27
Enregistré le : jeu. 12 juin 2008 22:27
Status : Hors ligne

Re: [..] Récupérer une valeur dans des fichiers textes

#23

Message par dadrocket »

Merci beaucoup !
Çà fonctionne à la perfection !

Cependant, je viens de m'apercevoir que pour 6 fichiers textes, la valeur qu'il faut récupérer ne se situe pas sur la ligne "Marker 5 Value" mais sur la ligne "Marker 5 Freq" située juste en dessous dans le fichier texte.

Comment faire pour intégrer la récupération des valeurs du marqueur 5 de ces fichiers dans le script actuel ?
ani a écrit :Pourquoi ne pas utiliser l'objet excel, pour importer le resultat ? (+rapide et surement plus simple)
Evidement je ne peut vous aider, je ne dispose pas excel.
Pouvez vous en dire plus ?

Voici le script final :
► Afficher le texte
Avatar du membre
Tlem
Site Admin
Site Admin
Messages : 11798
Enregistré le : ven. 20 juil. 2007 21:00
Localisation : Bordeaux
Status : Hors ligne

Re: [..] Récupérer une valeur dans des fichiers textes

#24

Message par Tlem »

Dans le code que vous donnez, vous avez un traitement pour le cas ou si la ligne commence par Marker 5 Value: un certain traitement est fait.
Si vous voulez rajouter un traitement, ajouter son code à la suite du bloc If / EndIf.

Code : Tout sélectionner

If StringLeft($Line, 15) = "Marker 5 Value:" Then
 ...
 ...
 ...
EndIf

If StringLeft($Line, 14) = "Marker 5 Freq:" Then
 ...
 ...
 ...
EndIf
Ou encore, de manière plus 'pro' :

Code : Tout sélectionner

If StringLeft($Line, 15) = "Marker 5 Value:" Then
 ...
 ...
 ...
ElseIf StringLeft($Line, 14) = "Marker 5 Freq:" Then
 ...
 ...
 ...
Else
 ...
EndIf
Cela donne en langage clair :

Code : Tout sélectionner

If ... Then --> Si ... Alors
 ...
 ...
 ...
ElseIf ... Then --> Sinon Si ... Alors
 ...
 ...
 ...
Else --> Sinon
 ...
EndIf --> Fin de la condition Si
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é".
dadrocket
Niveau 2
Niveau 2
Messages : 27
Enregistré le : jeu. 12 juin 2008 22:27
Status : Hors ligne

Re: [..] Récupérer une valeur dans des fichiers textes

#25

Message par dadrocket »

Merci pour ces explications claires.

Le problème est que tous les fichiers sont semblables.
Ils ont tous une ligne Marker 5 Value et une ligne Marker 5 Freq. Il faut donc que le script fasse une "exception" pour les 6 fichiers.

J'ai tenté ca mais sans succès (j'ai fait une exception pour un seul fichier ("And StringLeft($Line, 1) = "UMTS LON S1A1M" Then")) :
► Afficher le texte
Avatar du membre
Tlem
Site Admin
Site Admin
Messages : 11798
Enregistré le : ven. 20 juil. 2007 21:00
Localisation : Bordeaux
Status : Hors ligne

Re: [..] Récupérer une valeur dans des fichiers textes

#26

Message par Tlem »

Le nom du fichier est stocké dans la variable $search[$i], et il est de la forme "UMTSLONS1A1M.txt" et non "UMTS LON S1A1M" donc votre exception And StringLeft($Line, 1) = "UMTS LON S1A1M" ne peut fonctionner. ;)
Remplacez là par les éléments que je viens de vous donner. 8)
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é".
dadrocket
Niveau 2
Niveau 2
Messages : 27
Enregistré le : jeu. 12 juin 2008 22:27
Status : Hors ligne

Re: [..] Récupérer une valeur dans des fichiers textes

#27

Message par dadrocket »

merci encore :)

Je fais une exception uniquement pour un fichier (une fois la bonne technique trouvé, je rajouterai les 5 autres :P ) :
► Afficher le texte
Là je ne vois pas trop ce qui cloche. Il ne ce passe rien, le script se ferme. (J'ai un fichier classique et un fichier ou il faut récupérer la valeur dans la ligne Marker 5 Freq dans mon répertoire de départ).
Avatar du membre
Tlem
Site Admin
Site Admin
Messages : 11798
Enregistré le : ven. 20 juil. 2007 21:00
Localisation : Bordeaux
Status : Hors ligne

Re: [..] Récupérer une valeur dans des fichiers textes

#28

Message par Tlem »

Votre code ne peut fonctionner car vous avez mis :

Code : Tout sélectionner

If StringLeft($Line, 14) = "Marker 5 Freq:" And StringLeft($Line, 1) = "UMTSLONS1A1M.txt"  Then
au lieu de

Code : Tout sélectionner

ElseIf StringLeft($Line, 14) = "Marker 5 Freq:" And StringLeft($Line, 1) = "UMTSLONS1A1M.txt"  Then
Mais de toute façon ça ne fonctionnera pas non plus car vous regardez la valeur StringLeft($Line, 1) (c'est à dire le 1er caractère de $Line) or celui-ci ne pourra jamais être égal à "UMTSLONS1A1M.txt" puisque il fait 1 caractère, mais en plus dans la condition IF vous stipulez que les 14 premiers caractères doivent être égal à "Marker 5 Freq:".
Donc comme vous le voyez il n'y à aucune chance pour que ça fonctionne. :lol:

Bon puisque vous comptez mettre plusieurs conditions en fonction de certains fichiers, je vais introduire dans le code une commande très pratique pour ce genre de chose.
Il s'agit de la commande Select.
Celle ci permet d'effectuer une action en fonction d'une condition.
Elle est utilisée comme ceci :

Code : Tout sélectionner

Select                         ; Début du bloc de sélection.
    Case <expression>          ; 1er traitement de cas
        <instruction(s)>

    Case <expression>          ; 2ième traitement de cas
        <instruction(s)>

    Case Else                  ; Si les cas précédents n'on pas été validés alors traitement.
        <instruction(s)>

EndSelect                      ; Fin du bloc de sélection.
Ce qui nous donne sur votre code :
► Afficher le texteLe nouveau code
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é".
dadrocket
Niveau 2
Niveau 2
Messages : 27
Enregistré le : jeu. 12 juin 2008 22:27
Status : Hors ligne

Re: [..] Récupérer une valeur dans des fichiers textes

#29

Message par dadrocket »

Merci pour toutes ces explications, je me pencherais dessus un peu plus tard ;)

Le script n'a pas l'air de fonctionner, j'ai une erreur :

Code : Tout sélectionner

$search = _FileListToArray($rep_du_site, "*.txt", 1)
$search = ^ ERROR
Je regarderais ça plus en détail demain :D
Avatar du membre
Tlem
Site Admin
Site Admin
Messages : 11798
Enregistré le : ven. 20 juil. 2007 21:00
Localisation : Bordeaux
Status : Hors ligne

Re: [..] Récupérer une valeur dans des fichiers textes

#30

Message par Tlem »

Oui c'est 'normal', j'ai oublié ceci :

_FileListToArray ===> #Include <File.au3>

Hé oui il faut rajouter cet include. :)
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é".
dadrocket
Niveau 2
Niveau 2
Messages : 27
Enregistré le : jeu. 12 juin 2008 22:27
Status : Hors ligne

Re: [..] Récupérer une valeur dans des fichiers textes

#31

Message par dadrocket »

Merci !

Ça marche parfaitement :D
J'ai compris toute tes explications !

Par contre j'ai un petit soucis :
les valeurs copiées dans les fichiers textes sont envoyées dans un fichier Excel puis dans un fichier Word via publipostage. Seulement, les valeurs se retrouvent copiées avec des zéro ou des neuf derrière qui n'existent nul part ! Ni dans Excel ni dans les fichiers textes !

Je pense à un problème de lecture des valeurs dans les fichiers textes (problème d'arrondis ...)

Ci joint des copies d'écran :

ImageImage

ImageImage

A bientôt 8)
Avatar du membre
Tlem
Site Admin
Site Admin
Messages : 11798
Enregistré le : ven. 20 juil. 2007 21:00
Localisation : Bordeaux
Status : Hors ligne

Re: [..] Récupérer une valeur dans des fichiers textes

#32

Message par Tlem »

D'après les quelques tests que j'ai effectué, les valeurs retournée par le script sont de la forme :
17.39 (pour le cas de DCSR4PS1A1D).
Donc si il y à un problème sur les arrondit, c'est sans doute au niveau de l'échange Excel <=> Word.
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é".
dadrocket
Niveau 2
Niveau 2
Messages : 27
Enregistré le : jeu. 12 juin 2008 22:27
Status : Hors ligne

Re: [..] Récupérer une valeur dans des fichiers textes

#33

Message par dadrocket »

J'ai trouvé d'où venait le problème. C'était un bug de Word !

A+
Répondre