Merci pour ta réponse erix14. Mais malheureusement, j'ai à la fois des difficultés pour comprendre ton exemple, et des difficultés à l'adapter sur ton code source...
Voici ma fonction (pas encore optimisée ni débuggée) :
Code : Tout sélectionner
Procedure.s split(Chaine.s, Delimiteur.s)
Static previous
Lendel.l
del.l
Toreturn.s
! push dword [p.v_Delimiteur]
! call _PB_Len@4
! mov dword [p.v_Lendel], eax
! mov ecx, dword [p.v_Lendel]
! add ecx, dword [s_split.v_previous]
! push ecx
! push dword [p.v_Delimiteur]
! push dword [p.v_Chaine]
! call _PB_FindString@12
! mov dword [p.v_del], eax
! cmp dword [p.v_del], 0
! je _jumpcmp
! mov ecx, dword [p.v_del]
! sub ecx, dword [s_split.v_previous]
! sub ecx, dword [p.v_Lendel]
! mov ebx, dword [s_split.v_previous]
! add ebx, dword [p.v_Lendel]
! push ecx
! push ebx
! push dword [p.v_Chaine]
! call _PB_Mid@16
! mov dword [p.v_Toreturn], eax
! mov edx, dword [p.v_del]
! mov dword [s_split.v_previous], edx
! jmp _result
! _jumpcmp :
! cmp dword [s_split.v_previous], 0
! jne _eos
! mov eax, dword [p.v_Chaine]
ProcedureReturn
! _eos :
! push dword [p.v_Chaine]
! call _PB_Len@4
! add eax, 1
! sub eax, [s_split.v_previous]
! push eax
! push dword [p.v_Chaine]
! call _PB_Right@12
! mov dword [p.v_Toreturn], eax
! mov dword [s_split.v_previous], 0
! _result :
! mov eax, dword [p.v_Toreturn]
ProcedureReturn
EndProcedure
Procedure Test()
STR.s = " Premier découpage / Deuxième découpage / Troisième découpage"
Debug split(STR.s, " / ")
Debug split(STR.s, " / ")
Debug split(STR.s, " / ")
EndProcedure
Test()
Pourrais-tu (ou un autre d'ailleurs
). M'expliquer comment adapter ton exemple ? Et aussi me dire pourquoi le ProcedureReturn, comme défini dans la doc ne fonctionne pas ?
Merci
PS : Oui, fanatique des pouet tests, et des "ceci est un test... ça marche ?"
PS2 : D'un point de vue optimisation qu'est-ce qui est le mieux ? Le "call" ou le "invoke" ?