Page 1 sur 1

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

Posté : ven. 10 août 2018 09:10
par JulienBoul
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?

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

Posté : ven. 10 août 2018 19:17
par mikell
Tu as essayé "If @error Then Return" ?

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

Posté : lun. 13 août 2018 09:31
par JulienBoul
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.

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

Posté : lun. 20 août 2018 08:18
par JulienBoul
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... :-/

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

Posté : lun. 20 août 2018 08:43
par mikell
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