#include #include #Include $GUI = GUICreate("MAJ fichier QIF",400, 300) $Bouton1 = GUICtrlCreateButton("1 Choisir le fichier", 50, 100) $Bouton2 = GUICtrlCreateButton("2 Lancer les changements", 150, 100) GUISetState(@SW_SHOW) While 1 $nMsg = GUIGetMsg() Switch $nMsg Case $GUI_EVENT_CLOSE Exit Case $Bouton1 $message = "Fichier QIF � s�lectionner" $fichier = FileOpenDialog($message, @DocumentsCommonDir & "\", "type (*.qif)", 1 + 4 ) If @error Then MsgBox(4096,"","Pas de fichier s�lectionn�") Else FileRead($fichier) $NBlignesfichier = _FileCountLines($fichier) EndIf Case $Bouton2 fonction_lire_ligne($NBlignesfichier) EndSwitch WEnd Func fonction_lire_ligne($NBlignesfichier) Dim $date_D,$date_P,$nombre_de_lignes For $i = 1 to $NBlignesfichier step 1 ;For $i = 1 to 21 step 1 $chainecar = filereadline($fichier,$i) $premcar = stringleft($chainecar,1) ;$premcar = StringRegExp($chainecar,"^(.{1})") : pourquoi �a ne fonctionne pas ?! Switch $premcar case "!" ;premi�re ligne du fichier, on zappe case "D" ;c'est une ligne de date, format MM/JJ/AAAA $date_D = tableau_date_D($chainecar,$i) case "P" ;ligne de d�tail du paiement : on r�cup�re la date que cette ligne contient $date_P = tableau_date_P($chainecar,$i) ;on compare les deux dates $nombre_de_lignes = comparaison_tableau_dates($date_D,$date_P,$i,$nombre_de_lignes) case "T" ;c'est le montant, on ne touche � rien case "M" ;derni�re ligne du "groupe", on n'y touche pas case "^" ;caract�re fin du "groupe", on n'y touche pas endSwitch Next msgbox(0,"Fin de la modification du fichier","Fichier mis à jour, nb lignes : "& $nombre_de_lignes) FileClose($fichier) EndFunc Func comparaison_tableau_dates($date_D,$date_P,$i,$nombre_de_lignes) ;premi�re �tape : la date P doit avoir le m�me format que la date D (ou l'inverse...) : _ArrayReverse($date_D,0,1) ; passage au format DDMMAAAA ;maintenant on compare ces deux tableaux transform�s en cha�nes de caract�res $resultat = stringcompare(_ArrayToString($date_D),_ArrayToString($date_P),0) switch $resultat case "0" ; identique ;on ne fait rien case Else ; diff�rent ;reconstruction de la date pour le fichier pour une ligne type D, format DMM/DD/AAAA _ArrayReverse($date_P,0,1) $newdateD = "D"&_arraytostring($date_P,"/") ;il faut remplacer dans la ligne $i-2 la date ;fonction qui permet d'�crire dans le fichier � la ligne voulue et indiqu�e _FileWritetoLine($fichier,$i-2,$newdateD,1) $nombre_de_lignes += 1 return $nombre_de_lignes EndSwitch EndFunc Func tableau_date_P($chainecar,$i) ;dans cette fonction, on r�cup�re la chaine de caract�res, on extrait la date, puis on la stocke dans un tableau Dim $tableau_date_P[3] $texte = stringleft($chainecar,6) switch $texte case "PCARTE" $texte = StringTrimLeft($chainecar,7) ;on vire les x premiers caract�res, et on met la date dans le tableau ;et on renvoie le tableau � la fin $tableau_date_P[0] = (stringleft($texte,2)) $texte = StringTrimLeft($texte,3) $tableau_date_P[1] = (stringleft($texte,2)) $texte = StringTrimLeft($texte,3) $tableau_date_P[2] = (stringleft($texte,4)) return $tableau_date_P case "PCHEQU" ;$texte = StringTrimLeft($chainecar,8) ;rien pour l'instant, � faire plus tard : r�cup�rer le num�ro de ch�que, puis cr�er une ligne dans le fichier pour automatiser l'insertion de ce num�ro EndSwitch EndFunc Func tableau_date_D($chainecar,$i) ;fonction pour stocker dans un tableau la date de la ligne de type Date du fichier QIF Dim $tableau_date_D[3] ;on supprime le D qui pr�c�de la date $chainecar = StringTrimLeft($chainecar,1) ; on remplit le tableau $tableau_date_D[0] = (stringleft($chainecar,2)) $chainecar = StringTrimLeft($chainecar,3) $tableau_date_D[1] = (stringleft($chainecar,2)) $chainecar = StringTrimLeft($chainecar,3) $tableau_date_D[2] = (stringleft($chainecar,4)) return $tableau_date_D EndFunc