[..] Plugin scite automodification
Règles du forum
- Merci de consulter la section "Règles du forum" et plus particulièrement "Règles et Mentions Légales du site autoitscript.fr" avant d'écrire un message.
- ricky
- Niveau 7

- Messages : 443
- Enregistré le : ven. 06 févr. 2009 09:25
- Localisation : Suisse
- Status : Hors ligne
[..] Plugin scite automodification
Hello,
Voici ma fonction :
_FileWriteLogRC($LineScript, $LogFile, $sLogMsg, $iFlag)
voici ce que j'aimerais faire. J'aimerais qu'avant chaque compilation Scite me lance un programme.
Ce programme devra lire chaque ligne du fichier a compiler (et includes) et mettre dans $LineScript le numéro de la ligne ou se trouve l'appel de ma fonction _FileWriteLogRC. Ou il devra le mettre pour la première fois ou le mettre à jour. Bien sur, la compilation devra prendre en compte les modifications faites par ce programme.
Comment pourrais-je faire ça?
Merci d'avance pour votre aide.
Voici ma fonction :
_FileWriteLogRC($LineScript, $LogFile, $sLogMsg, $iFlag)
voici ce que j'aimerais faire. J'aimerais qu'avant chaque compilation Scite me lance un programme.
Ce programme devra lire chaque ligne du fichier a compiler (et includes) et mettre dans $LineScript le numéro de la ligne ou se trouve l'appel de ma fonction _FileWriteLogRC. Ou il devra le mettre pour la première fois ou le mettre à jour. Bien sur, la compilation devra prendre en compte les modifications faites par ce programme.
Comment pourrais-je faire ça?
Merci d'avance pour votre aide.
Modifié en dernier par ricky le jeu. 28 avr. 2011 10:52, modifié 2 fois.
- jchd
- AutoIt MVPs (MVP)

- Messages : 2284
- Enregistré le : lun. 30 mars 2009 22:57
- Localisation : Sud-Ouest de la France (43.622788,-1.260864)
- Status : Hors ligne
Re: [..] Plugin scite automodification
Plutôt complexe surtout si, comme je le pressens, le but est d'obtenir le _bon_ numéro de ligne en cas d'erreur de script. Le n° de ligne dépend fortement des options de compilation et émuler correctement le comportement du wrapper dans tous les cas n'est pas des plus simple.
La cryptographie d'aujourd'hui c'est le taquin plus l'électricité.
- ricky
- Niveau 7

- Messages : 443
- Enregistré le : ven. 06 févr. 2009 09:25
- Localisation : Suisse
- Status : Hors ligne
Re: [..] Plugin scite automodification
Non, le but est d'obtenir le numéro de ligne dans le script non compilé. Le numéro de ligne du fichier .au3. Est-ce plus clair?
- sksbir
- Niveau 7

- Messages : 384
- Enregistré le : lun. 26 oct. 2009 17:57
- Localisation : Lyon
- Status : Hors ligne
Re: [..] Plugin scite automodification
oui, comme ça, je commence à comprendre.
L'idée ( si j'ai compris) , c'est qu'avant de compiler, ton programme intervienne sur le code source du fichier au3 pour remplacer $linescript par le vrai N° de ligne.
exemple avant la 1ere compilation:
143 _FileWriteLogRC($LineScript, $LogFile, "bonjour,c'est un test", 0)
deviendrait donc juste avant la compilation proprement dite:
143 _FileWriteLogRC(143, $LogFile, "bonjour,c'est un test", 0)
Le truc, c'est qu'à la 2eme compilation, il faut que ça remplace par exemple:
145 _FileWriteLogRC(143, $LogFile, "bonjour,c'est un test", 0) ( note : 145 parce qu'on a rajouté 2 lignes de code au dessus)
par
145 _FileWriteLogRC(145, $LogFile, "bonjour,c'est un test", 0)
Alors si c'est bien ça, ce genre de programme est tout à fait faisable, mais je déconseille de commencer par $LineScript, et j'utiliserais plutôt une "métavariable" comme %linescript% ce qui éviterait de confondre une métavariable devant être transformée avec une variable classique utilisée dans le code.
Mon 1er exemple deviendrait donc:
143 _FileWriteLogRC(%linescript%, $LogFile, "bonjour,c'est un test", 0)
Et l'idée sous-jacente à tout ça, c'est d'avoir (enfin) un exécutable qui se "plante" avec des N° de lignes qui veulent dirent quelque chose.
J'ai bon là ?
L'idée ( si j'ai compris) , c'est qu'avant de compiler, ton programme intervienne sur le code source du fichier au3 pour remplacer $linescript par le vrai N° de ligne.
exemple avant la 1ere compilation:
143 _FileWriteLogRC($LineScript, $LogFile, "bonjour,c'est un test", 0)
deviendrait donc juste avant la compilation proprement dite:
143 _FileWriteLogRC(143, $LogFile, "bonjour,c'est un test", 0)
Le truc, c'est qu'à la 2eme compilation, il faut que ça remplace par exemple:
145 _FileWriteLogRC(143, $LogFile, "bonjour,c'est un test", 0) ( note : 145 parce qu'on a rajouté 2 lignes de code au dessus)
par
145 _FileWriteLogRC(145, $LogFile, "bonjour,c'est un test", 0)
Alors si c'est bien ça, ce genre de programme est tout à fait faisable, mais je déconseille de commencer par $LineScript, et j'utiliserais plutôt une "métavariable" comme %linescript% ce qui éviterait de confondre une métavariable devant être transformée avec une variable classique utilisée dans le code.
Mon 1er exemple deviendrait donc:
143 _FileWriteLogRC(%linescript%, $LogFile, "bonjour,c'est un test", 0)
Et l'idée sous-jacente à tout ça, c'est d'avoir (enfin) un exécutable qui se "plante" avec des N° de lignes qui veulent dirent quelque chose.
J'ai bon là ?
- ricky
- Niveau 7

- Messages : 443
- Enregistré le : ven. 06 févr. 2009 09:25
- Localisation : Suisse
- Status : Hors ligne
Re: [..] Plugin scite automodification
Voilà, c'est tout à fait ça. Tu as bien compris. Que ça soit une meta-variable, ça m'est égal.
Le programme peut même réagir comme le remplacer à demander pour chaque valeur si on est sûr! Si qqn a une idée comment faire, je suis preneur...
Le programme peut même réagir comme le remplacer à demander pour chaque valeur si on est sûr! Si qqn a une idée comment faire, je suis preneur...
-
GaRydelaMer
- Niveau 7

- Messages : 450
- Enregistré le : mer. 18 mars 2009 22:12
- Localisation : Montpellier
- Status : Hors ligne
Re: [..] Plugin scite automodification
Salut
Tu as 2 macros AutoIt @ScriptLineNumber @ScriptName, à toi de jouer avec.
Le truc à savoir pour @ScriptName, le nom est remplacé par le nom du script principal pas des includes, tu peux aussi le passer en paramètres des fonctions
Func _Debug2Console($var, $str_Title = '', $int_Max = 60, $line = @ScriptLineNumber, $scriptfile = @ScriptName)
...
EndFunc
Pour débugger moi j'utilise Obfuscator pour compiler tous les includes dans 1 seul fichier et trouver vite fais la ligne qui bugge.
Tu as 2 macros AutoIt @ScriptLineNumber @ScriptName, à toi de jouer avec.
Le truc à savoir pour @ScriptName, le nom est remplacé par le nom du script principal pas des includes, tu peux aussi le passer en paramètres des fonctions
Func _Debug2Console($var, $str_Title = '', $int_Max = 60, $line = @ScriptLineNumber, $scriptfile = @ScriptName)
...
EndFunc
Pour débugger moi j'utilise Obfuscator pour compiler tous les includes dans 1 seul fichier et trouver vite fais la ligne qui bugge.
- sksbir
- Niveau 7

- Messages : 384
- Enregistré le : lun. 26 oct. 2009 17:57
- Localisation : Lyon
- Status : Hors ligne
Re: [..] Plugin scite automodification
Ben voila, plus la peine de chercher à remplacer avant compilation, puisque @scriptlinenumber te donne cette info.GaRydelaMer a écrit :Salut
Tu as 2 macros AutoIt @ScriptLineNumber @ScriptName, à toi de jouer avec.
Le résultat, c'est quoi ? quand ça plante, le N° de ligne affiché correspond au N° dans le fichier source modifié par Obfuscator ?GaRydelaMer a écrit : Pour débugger moi j'utilise Obfuscator pour compiler tous les includes dans 1 seul fichier et trouver vite fais la ligne qui bugge.
- ricky
- Niveau 7

- Messages : 443
- Enregistré le : ven. 06 févr. 2009 09:25
- Localisation : Suisse
- Status : Hors ligne
Re: [..] Plugin scite automodification
Parfait avec le scriptLine. Merci
Même question que sksbir...
Même question que sksbir...
-
GaRydelaMer
- Niveau 7

- Messages : 450
- Enregistré le : mer. 18 mars 2009 22:12
- Localisation : Montpellier
- Status : Hors ligne
Re: [..] Plugin scite automodification
Alors Obfuscator, avec cette ligne:
#AutoIt3Wrapper_Run_Obfuscator=y
#Obfuscator_Parameters=/striponly
Te permet d'obtenir un seul fichier Au3 qui correspond à l'ensemble de tes script et les includes en enlevant les commentaires sans modifier les noms de variable, et des fonctions, puis il le compile.
Pour Debugger "j'obscute" mes scripts, j'obtiens donc MonScript.au3 que j'ouvre avec scite un petit coup de tidy, puis F5 et à ce moment quand une ligne bugge je la retrouve de suite, après à moi de la corriger:
1 dans ce fichier pour verifier
puis reporter la correction dans le(s) fichier(s) d'origine.
#AutoIt3Wrapper_Run_Obfuscator=y
#Obfuscator_Parameters=/striponly
Te permet d'obtenir un seul fichier Au3 qui correspond à l'ensemble de tes script et les includes en enlevant les commentaires sans modifier les noms de variable, et des fonctions, puis il le compile.
Pour Debugger "j'obscute" mes scripts, j'obtiens donc MonScript.au3 que j'ouvre avec scite un petit coup de tidy, puis F5 et à ce moment quand une ligne bugge je la retrouve de suite, après à moi de la corriger:
1 dans ce fichier pour verifier
puis reporter la correction dans le(s) fichier(s) d'origine.
- ricky
- Niveau 7

- Messages : 443
- Enregistré le : ven. 06 févr. 2009 09:25
- Localisation : Suisse
- Status : Hors ligne
Re: [..] Plugin scite automodification
Pas mal comme solution.
Merci
Merci
- ricky
- Niveau 7

- Messages : 443
- Enregistré le : ven. 06 févr. 2009 09:25
- Localisation : Suisse
- Status : Hors ligne
Re: [..] Plugin scite automodification
Hello,
ça ne marche marche et je ne comprends pas pourquoi, qqn peut m'aider?
Voici la ligne dans le code :
et Voici ce que j'ai dans le log :
2011-04-28 10:51:20.734 #-1 : Fin des informations fichier complet.
Pourquoi? Je ne comprends pas! Merci d'avance pour votre aide.
ça ne marche marche et je ne comprends pas pourquoi, qqn peut m'aider?
Voici la ligne dans le code :
Code : Tout sélectionner
_FileWriteLogRC(@ScriptLineNumber, "Fin des informations fichier complet.")2011-04-28 10:51:20.734 #-1 : Fin des informations fichier complet.
Pourquoi? Je ne comprends pas! Merci d'avance pour votre aide.
- Iste
- Niveau 11

- Messages : 1870
- Enregistré le : jeu. 04 déc. 2008 14:21
- Localisation : 76
- Status : Hors ligne
Re: [..] Plugin scite automodification
Lire la doc...
Cette macro renvoie -1 en cas de script compilé.
Cette macro renvoie -1 en cas de script compilé.
Signez ici
- ricky
- Niveau 7

- Messages : 443
- Enregistré le : ven. 06 févr. 2009 09:25
- Localisation : Suisse
- Status : Hors ligne
Re: [..] Plugin scite automodification
Effectivement, j'ai fait confiance sans aller contrôler. Bonne remarque.
Donc, mon problème initial est toujours présent.
Comme puis-je insérer mon numéro de ligne avec mon fichier compilé?
Je ne peux malheureusement pas utiliser la solution avec l'obfuscator, car je ne peux pas l'obfusquer.
Donc, mon problème initial est toujours présent.
Comme puis-je insérer mon numéro de ligne avec mon fichier compilé?
Je ne peux malheureusement pas utiliser la solution avec l'obfuscator, car je ne peux pas l'obfusquer.
- Iste
- Niveau 11

- Messages : 1870
- Enregistré le : jeu. 04 déc. 2008 14:21
- Localisation : 76
- Status : Hors ligne
Re: [..] Plugin scite automodification
Bah il faut en effet procéder a une précompilation.
Aucune idée de comment l'implémenter a scite, mais avec un script faisant les modif et appelant lui meme le compilateur, on peut s'en sortir.
J'ai déja eu a procéder ainsi dans le passé.
Aucune idée de comment l'implémenter a scite, mais avec un script faisant les modif et appelant lui meme le compilateur, on peut s'en sortir.
J'ai déja eu a procéder ainsi dans le passé.
Signez ici
- ricky
- Niveau 7

- Messages : 443
- Enregistré le : ven. 06 févr. 2009 09:25
- Localisation : Suisse
- Status : Hors ligne
Re: [..] Plugin scite automodification
Provisoirement, sans passe par site, tu pourrais me donner ta solution?
- Iste
- Niveau 11

- Messages : 1870
- Enregistré le : jeu. 04 déc. 2008 14:21
- Localisation : 76
- Status : Hors ligne
Re: [..] Plugin scite automodification
La solution non (pas trop le temps ^^'), mais l'idée, c'est de faire un autre script, qui récuper ton .au3 (soit en param soit a l'aide d'une inputbox)
Apres, un _filereadtoarray(), une boucle For avec un index $î sur le resultat et un stringreplace() pour changer les %linenumber% par $i+1
Apres, un _filereadtoarray(), une boucle For avec un index $î sur le resultat et un stringreplace() pour changer les %linenumber% par $i+1
Signez ici
- ricky
- Niveau 7

- Messages : 443
- Enregistré le : ven. 06 févr. 2009 09:25
- Localisation : Suisse
- Status : Hors ligne
Re: [..] Plugin scite automodification
@Iste : tu as lu le temps de regarder?
Ou qqn d'autre,...
Ou qqn d'autre,...
- Iste
- Niveau 11

- Messages : 1870
- Enregistré le : jeu. 04 déc. 2008 14:21
- Localisation : 76
- Status : Hors ligne
Re: [..] Plugin scite automodification
Helas non, je suis pas mal occupé et surtout, souvent sous linux ou sans le net ^^'
mais voici un exemple de fonction effectuant ce boulot
Reste qu'a compiler, passer le fichier en paramètre et trouver comment intégrer ca dans scite... bonne chance ^^
mais voici un exemple de fonction effectuant ce boulot
Code : Tout sélectionner
#Include <File.au3>
Global Const $VALUE = "%linenumber%"
$file = FileOpenDialog("open", "C:\", "Script (*.au3)")
preCompil($file)
Func preCompil(Const $file)
;~ Lire toutes les lignes du fichier
Local $lines
_FileReadToArray($file, $lines)
;~ Boucle For de remplacement
For $i = 1 To $lines[0]
$lines[$i] = StringReplace($lines[$i], $VALUE, $i)
Next
_FileWriteFromArray($file & "_compiled.au3", $lines, 1)
EndFuncSignez ici
- ricky
- Niveau 7

- Messages : 443
- Enregistré le : ven. 06 févr. 2009 09:25
- Localisation : Suisse
- Status : Hors ligne
Re: [..] Plugin scite automodification
Merci.
Mais comme faire pour qu'il prenne %linenumber% ou %125% en sachant qu'à chaque compilation le numéro au centre sera différent?
Mais comme faire pour qu'il prenne %linenumber% ou %125% en sachant qu'à chaque compilation le numéro au centre sera différent?
- Iste
- Niveau 11

- Messages : 1870
- Enregistré le : jeu. 04 déc. 2008 14:21
- Localisation : 76
- Status : Hors ligne
Re: [..] Plugin scite automodification
baheuu... c'est ce qu'il fait
utilisez %linenumber% dans l'un de vos script, lancez mon exemple, et ouvrez votre script, validez, et chercher a coté de votre script d'origine une version *_compiled.au3
Ouvrez là, et les %linenumber% devrons etre remplacé par les numéros des lignes
Apres, vous ne pouvez pas continuer de travailler sur cette version car sinon les %linenumber% remplacés deviendrons faux.
Gardez votre script, précompilez le a l'aide de ma fonction ou une équivalente et compilez pour de vrai le résultat
utilisez %linenumber% dans l'un de vos script, lancez mon exemple, et ouvrez votre script, validez, et chercher a coté de votre script d'origine une version *_compiled.au3
Ouvrez là, et les %linenumber% devrons etre remplacé par les numéros des lignes
Apres, vous ne pouvez pas continuer de travailler sur cette version car sinon les %linenumber% remplacés deviendrons faux.
Gardez votre script, précompilez le a l'aide de ma fonction ou une équivalente et compilez pour de vrai le résultat
Signez ici
