Page 2 sur 2
Re: [..] Récupérer une valeur dans des fichiers textes
Posté : ven. 31 oct. 2008 00:10
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.
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}")
Re: [..] Récupérer une valeur dans des fichiers textes
Posté : ven. 31 oct. 2008 01:36
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.
Re: [..] Récupérer une valeur dans des fichiers textes
Posté : lun. 03 nov. 2008 19:12
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
Code : Tout sélectionner
$rep_du_site = FileSelectFolder("Selectionnez le répertoire du site.", "")
$search = _FileListToArray($rep_du_site, "*.txt", 1)
If @error Then
MsgBox(0, "", "Aucun Fichier txt trouvé.")
Exit
EndIf
For $i = 1 To $search[0]
$file = FileOpen($rep_du_site & "\" & $search[$i], 0)
While 1
$Line = FileReadLine($file)
If @error = -1 Then ExitLoop
ConsoleWrite($Line & @CRLF)
If StringLeft($Line, 15) = "Marker 5 Value:" Then
$Val = StringFormat("%.2f", Abs(StringMid($Line, 16)))
Opt("WinWaitDelay", 100)
Opt("WinTitleMatchMode", 4)
Opt("WinDetectHiddenText", 1)
Opt("MouseCoordMode", 0)
WinWait("Microsoft Excel")
If Not WinActive("Microsoft Excel") Then WinActivate("Microsoft Excel")
WinWaitActive("Microsoft Excel")
Send("^t")
Send(IniRead ( "Fichiers.ini", "File", $search[$i], "" ))
Send("{Enter}")
Send($Val)
Send("{Enter}")
ExitLoop
EndIf
WEnd
Re: [..] Récupérer une valeur dans des fichiers textes
Posté : lun. 03 nov. 2008 20:21
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
Re: [..] Récupérer une valeur dans des fichiers textes
Posté : lun. 03 nov. 2008 21:47
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
Code : Tout sélectionner
$rep_du_site = FileSelectFolder("Selectionnez le répertoire du site.", "")
$search = _FileListToArray($rep_du_site, "*.txt", 1)
If @error Then
MsgBox(0, "", "Aucun Fichier txt trouvé.")
Exit
EndIf
For $i = 1 To $search[0]
$file = FileOpen($rep_du_site & "\" & $search[$i], 0)
While 1
$Line = FileReadLine($file)
If @error = -1 Then ExitLoop
ConsoleWrite($Line & @CRLF)
If StringLeft($Line, 15) = "Marker 5 Value:" Then
$Val = StringFormat("%.2f", Abs(StringMid($Line, 16)))
Opt("WinWaitDelay", 100)
Opt("WinTitleMatchMode", 4)
Opt("WinDetectHiddenText", 1)
Opt("MouseCoordMode", 0)
WinWait("Microsoft Excel")
If Not WinActive("Microsoft Excel") Then WinActivate("Microsoft Excel")
WinWaitActive("Microsoft Excel")
Send("^t")
Send(IniRead ( "Fichiers.ini", "File", $search[$i], "" ))
Send("{Enter}")
Send($Val)
Send("{Enter}")
If StringLeft($Line, 14) = "Marker 5 Freq:" And StringLeft($Line, 1) = "UMTS LON S1A1M" Then
$Val = StringFormat("%.2f", Abs(StringMid($Line, 16)))
Opt("WinWaitDelay", 100)
Opt("WinTitleMatchMode", 4)
Opt("WinDetectHiddenText", 1)
Opt("MouseCoordMode", 0)
WinWait("Microsoft Excel")
If Not WinActive("Microsoft Excel") Then WinActivate("Microsoft Excel")
WinWaitActive("Microsoft Excel")
Send("^t")
Send(IniRead ( "Fichiers.ini", "File2", $search[$i], "" ))
Send("{Enter}")
Send($Val)
Send("{Enter}")
ExitLoop
EndIf
ExitLoop
EndIf
WEnd
FileClose($file)
Next
Re: [..] Récupérer une valeur dans des fichiers textes
Posté : lun. 03 nov. 2008 21:57
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.

Re: [..] Récupérer une valeur dans des fichiers textes
Posté : lun. 03 nov. 2008 22:56
par dadrocket
merci encore
Je fais une exception uniquement pour un fichier (une fois la bonne technique trouvé, je rajouterai les 5 autres

) :
► Afficher le texte
Code : Tout sélectionner
$rep_du_site = FileSelectFolder("Selectionnez le répertoire du site.", "")
$search = _FileListToArray($rep_du_site, "*.txt", 1)
If @error Then
MsgBox(0, "", "Aucun Fichier txt trouvé.")
Exit
EndIf
For $i = 1 To $search[0]
$file = FileOpen($rep_du_site & "\" & $search[$i], 0)
While 1
$Line = FileReadLine($file)
If @error = -1 Then ExitLoop
ConsoleWrite($Line & @CRLF)
If StringLeft($Line, 15) = "Marker 5 Value:" And Not StringLeft($Line, 1) = "UMTSLONS1A1M.txt" Then
$Val = StringFormat("%.2f", Abs(StringMid($Line, 16)))
Opt("WinWaitDelay", 100)
Opt("WinTitleMatchMode", 4)
Opt("WinDetectHiddenText", 1)
Opt("MouseCoordMode", 0)
WinWait("Microsoft Excel")
If Not WinActive("Microsoft Excel") Then WinActivate("Microsoft Excel")
WinWaitActive("Microsoft Excel")
Send("^t")
Send(IniRead ( "Fichiers.ini", "File", $search[$i], "" ))
Send("{Enter}")
Send($Val)
Send("{Enter}")
If StringLeft($Line, 14) = "Marker 5 Freq:" And StringLeft($Line, 1) = "UMTSLONS1A1M.txt" Then
$Val = StringFormat("%.2f", Abs(StringMid($Line, 16)))
Opt("WinWaitDelay", 100)
Opt("WinTitleMatchMode", 4)
Opt("WinDetectHiddenText", 1)
Opt("MouseCoordMode", 0)
WinWait("Microsoft Excel")
If Not WinActive("Microsoft Excel") Then WinActivate("Microsoft Excel")
WinWaitActive("Microsoft Excel")
Send("^t")
Send(IniRead ( "Fichiers.ini", "File2", $search[$i], "" ))
Send("{Enter}")
Send($Val)
Send("{Enter}")
ExitLoop
EndIf
ExitLoop
EndIf
WEnd
FileClose($file)
Next
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).
Re: [..] Récupérer une valeur dans des fichiers textes
Posté : mar. 04 nov. 2008 00:23
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.
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
Code : Tout sélectionner
$rep_du_site = FileSelectFolder("Selectionnez le répertoire du site.", "")
$search = _FileListToArray($rep_du_site, "*.txt", 1)
If @error Then
MsgBox(0, "", "Aucun Fichier txt trouvé.")
Exit
EndIf
For $i = 1 To $search[0]
$file = FileOpen($rep_du_site & "\" & $search[$i], 0)
While 1
$Line = FileReadLine($file)
If @error = -1 Then ExitLoop
$Val = "" ; Il est important de remettre $Val à "" pour la suite du code.
; ##### Début du bloc de sélection #####
Select
Case $search[$i] = "UMTSLONS1A1M.txt" ; Contrôle si le fichier en cours est UMTSLONS1A1M.txt.
If StringLeft($Line, 14) = "Marker 5 Freq:" Then $Val = StringFormat("%.2f", Abs(StringMid($Line, 15)))
; Vous pouvez rajouter les cas comme ceci.
Case $search[$i] = "Un_Autre_Cas.txt"
If StringLeft($Line, 14) = "Marker 5 Freq:" Then $Val = StringFormat("%.2f", Abs(StringMid($Line, 15)))
; N'oubliez pas de régler les valeurs de :
; - StringLeft($Line, 14) -> 14 étant la longeur de la chaine à tester ("Marker 5 Freq:").
; - StringMid($Line, 15) -> 15 étant la position de début du nombre à récupérer.
Case Else
If StringLeft($Line, 15) = "Marker 5 Value:" Then $Val = StringFormat("%.2f", Abs(StringMid($Line, 16)))
EndSelect
; ##### Fin du bloc de sélection #####
; Cette condition va permettre d'envoyer la valeur de $Val si elle est différente de ""
If $Val <> "" Then
Opt("WinWaitDelay", 100)
Opt("WinTitleMatchMode", 4)
Opt("WinDetectHiddenText", 1)
Opt("MouseCoordMode", 0)
WinWait("Microsoft Excel")
If Not WinActive("Microsoft Excel") Then WinActivate("Microsoft Excel")
WinWaitActive("Microsoft Excel")
Send("^t")
Send(IniRead ( "Fichiers.ini", "File", $search[$i], "" ))
Send("{Enter}")
Send($Val)
Send("{Enter}")
ExitLoop
EndIf
WEnd
FileClose($file)
Next
Re: [..] Récupérer une valeur dans des fichiers textes
Posté : mar. 04 nov. 2008 23:22
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

Re: [..] Récupérer une valeur dans des fichiers textes
Posté : mar. 04 nov. 2008 23:43
par Tlem
Oui c'est 'normal', j'ai oublié ceci :
_FileListToArray ===>
#Include <File.au3>
Hé oui il faut rajouter cet include.

Re: [..] Récupérer une valeur dans des fichiers textes
Posté : sam. 08 nov. 2008 20:46
par dadrocket
Merci !
Ça marche parfaitement
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 :


A bientôt

Re: [..] Récupérer une valeur dans des fichiers textes
Posté : dim. 09 nov. 2008 00:15
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.
Re: [..] Récupérer une valeur dans des fichiers textes
Posté : mar. 11 nov. 2008 15:39
par dadrocket
J'ai trouvé d'où venait le problème. C'était un bug de Word !
A+