[R] Enchaîner deux fonctions - lecture de csv - fin de colonne

Aide et conseils concernant AutoIt et ses outils.
Règles du forum
.
Répondre
JulienBoul
Niveau 4
Niveau 4
Messages : 68
Enregistré le : ven. 04 déc. 2015 13:55
Status : Hors ligne

[R] Enchaîner deux fonctions - lecture de csv - fin de colonne

#1

Message par JulienBoul » ven. 10 août 2018 09:10

Salut salut!

Je suis ennuyé, la première fonction se lance, mais le script continue à tourner en fin de première fonction, et ne quitte pas la fonction dès que la dernière case de la colonne est vide (If $String="" Then Return). Donc mes deux fonctions ne s'enchainent pas malgré mon fichier (_import.txt) qui s'alimente bien jusqu'à la dernière réf présente dans mon csv de départ.
Heu, pour synthétiser, ma fonction X1 se lance parfaitement, et à la fin, pas de message d'erreur, elle continue de tourner, sans passer à la fonction X2.

Je peux fournir le tableau csv et le code complet par mp si besoin.

Code : Tout sélectionner

#include <String.au3>
#include <File.au3>
#include <Date.au3>

X1()
Func X1()
$Line=1
$path=@WorkingDir&"\aaa.csv" ; correspond a un fichier csv de 4 colonnes, A=RefX1, B=urlX1, C=RefX2, D=urlX2
While 1
    $String=FileReadLine($path,$Line)
    If $String="" Then Return
    $Snam= StringSplit($String, ";")

Dim $url =$Snam[2] ;2 = numéro de colonne lue
Dim $hDownload = InetGet($url, @WorkingDir & "\Test.txt", 1, 0)
Dim $sFldr1 = @WorkingDir&"\import\"
Dim $Date_us = _NowCalcDate()
Dim $Date_eu1 = StringRegExpReplace($Date_us, "\A(\d*)/(\d*)/(\d*)","$3/$2/$1")
Dim $Date_eu2 = StringReplace($Date_eu1,"/", "")
Dim $DossierFichier = $sFldr1&$Date_eu2&"_import.txt"

while FileExists("Test.txt")=0
Sleep(200) ; on fait une pause, pour préserver le CPU
WEnd
$File=@WorkingDir & "\Test.txt"
$txt = FileRead($File)

; ISOLATION DES VARIABLES
$string1 = StringRegExp($txt, '\n*.*EUR","price":"(.*)","i|\n*.*EUR","price":(.*),"i', 1) ;PRIX
If IsArray($string1) Then $result = $string1[0]
$string2 = StringRegExp($txt, '\n*Réf&nbsp;: (.*)<\/p>', 1) ;REFERENCE
If IsArray($string2) Then $result = $string2[0]

;CREATION DU DOSSIER ET FICHIER
DirCreate($sFldr1)
$fh = FileOpen($DossierFichier, 1)
If $fh = -1 Then SetError(1, 0, 0)
Local $iWriteFile = FileWriteLine($fh, "X1;"&$Date_eu2&";"&$string1[0]&";"&$string2[0])
Local $iRet = FileClose($fh)
If $iWriteFile = -1 Then SetError(2, $iRet, 0)
FileDelete ("Test.txt")

    $Line+=1
WEnd
EndFunc ;X1


X2()
Func X2()
$Line=1
$path=@WorkingDir&"\bbb.csv" ; correspond a un fichier csv de 4 colonnes, A=RefX1, B=urlX1, C=RefX2, D=urlX2
While 1
    $String=FileReadLine($path,$Line)
    If $String="" Then Return
    $Snam= StringSplit($String, ";")

Dim $url =$Snam[4] ;4 = numéro de colonne lue
Dim $hDownload = InetGet($url, @WorkingDir & "\Test.txt", 1, 0)
Dim $sFldr1 = @WorkingDir&"\import\"
Dim $Date_us = _NowCalcDate()
Dim $Date_eu1 = StringRegExpReplace($Date_us, "\A(\d*)/(\d*)/(\d*)","$3/$2/$1")
Dim $Date_eu2 = StringReplace($Date_eu1,"/", "")
Dim $DossierFichier = $sFldr1&$Date_eu2&"_import.txt"

while FileExists("Test.txt")=0
Sleep(200) ; on fait une pause, pour préserver le CPU
WEnd
$File=@WorkingDir & "\Test.txt"
$txt = FileRead($File)

; ISOLATION DES VARIABLES
$string1 = StringRegExp($txt, '\n*var productPrice = (.*);', 1) ;PRIX
If IsArray($string1) Then $result = $string1[0]
$string2 = StringRegExp($txt, "\n*\nvar productReference = '(.*)';", 1) ;REFERENCE
If IsArray($string2) Then $result = $string2[0]

;CREATION DU DOSSIER ET FICHIER
DirCreate($sFldr1)
$fh = FileOpen($DossierFichier, 1)
If $fh = -1 Then SetError(1, 0, 0)
Local $iWriteFile = FileWriteLine($fh, "X2;"&$Date_eu2&";"&$string1[0]&";"&$string2[0])
Local $iRet = FileClose($fh)
If $iWriteFile = -1 Then SetError(2, $iRet, 0)
FileDelete ("Test.txt")

    $Line+=1
WEnd
EndFunc ;X2
Pouvez vous m'aider à enchaîner les deux fonctions? Je me casse la tête depuis 2 jours mais je suis persuadé qu'il s'agit d'une minime modification... Qu'est ce qui se passe, il est ou le problème?
Modifié en dernier par JulienBoul le mer. 29 août 2018 14:56, modifié 1 fois.

Avatar du membre
mikell
Modérateur
Modérateur
Messages : 5726
Enregistré le : dim. 29 mai 2011 16:32
Localisation : Deep Cévennes
Status : Hors ligne

Re: [..] Enchaîner deux fonctions - lecture de csv - fin de colonne

#2

Message par mikell » ven. 10 août 2018 19:17

Tu as essayé "If @error Then Return" ?
" L'échec est le fondement de la réussite. " (Lao-Tseu )
" Plus ça rate, plus on a de chances que ça marche " (les Shadoks )

JulienBoul
Niveau 4
Niveau 4
Messages : 68
Enregistré le : ven. 04 déc. 2015 13:55
Status : Hors ligne

Re: [..] Enchaîner deux fonctions - lecture de csv - fin de colonne

#3

Message par JulienBoul » lun. 13 août 2018 09:31

Hello,

Oui je viens de tester à l'instant, rien n'y fait.
C'est curieux car sur mon fichier de restitution, "13082018_import.txt" ben il me met une ligne vide tout à la fin de la liste (ça le faisait déjà sans "If @error Then Return").
On dirait qu'il ne capte pas qu'il arrive à la fin de la liste à analyser... En fait il comprend pas qu'il a terminé le taff et qu'il faut continuer le script, il reste bloqué dedans, c'est vraiment étrange.
D'ailleurs, il n'affiche aucun message d'erreur, mais reste bloqué dans la console sur:
"--> Press Ctrl+Alt+Break to Restart or Ctrl+Break to Stop"

Merci.

JulienBoul
Niveau 4
Niveau 4
Messages : 68
Enregistré le : ven. 04 déc. 2015 13:55
Status : Hors ligne

Re: [..] Enchaîner deux fonctions - lecture de csv - fin de colonne

#4

Message par JulienBoul » lun. 20 août 2018 08:18

Salut !
Je viens de tester avec

Code : Tout sélectionner

If $String="X" Then Return
en ajoutant un X en fin de colonne sur mon fichier CSV, et rien n'y fait...
D'autre part, j'ai testé en mettant un ";" devant chaque fonction, et en en laissant une seule tourner, la fonction tourne nikel jusqu'à la dernière ligne du fichier csv. Par contre, est ce normal, mon fichier txt de report (là ou je met les variables trouvées dans le code source) comporte une ligne vide la fin, et ma fonction continue de tourner en boucle sans s’arrêter...
Si vous avez une idée de pourquoi elle ne sors pas de la fonction une fois le fichier csv fini de lire... Il ne me manque que ça pour avoir mon logiciel de finalisé, ça m’embêterai de devoir faire un logiciel par fonction... :-/

Avatar du membre
mikell
Modérateur
Modérateur
Messages : 5726
Enregistré le : dim. 29 mai 2011 16:32
Localisation : Deep Cévennes
Status : Hors ligne

Re: [..] Enchaîner deux fonctions - lecture de csv - fin de colonne

#5

Message par mikell » lun. 20 août 2018 08:43

Impossible de te répondre sans du code fonctionnel
Tu peux m'envoyer tout ça par mp si tu veux mais il faut que le bazar puisse marcher chez moi
" L'échec est le fondement de la réussite. " (Lao-Tseu )
" Plus ça rate, plus on a de chances que ça marche " (les Shadoks )

Répondre