[..] Plugin scite automodification

Aide et conseils concernant AutoIt et ses outils.
Règles du forum
.
Avatar du membre
ricky
Niveau 7
Niveau 7
Messages : 443
Enregistré le : ven. 06 févr. 2009 09:25
Localisation : Suisse
Status : Hors ligne

[..] Plugin scite automodification

#1

Message par ricky »

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.
Modifié en dernier par ricky le jeu. 28 avr. 2011 10:52, modifié 2 fois.
Avatar du membre
jchd
AutoIt MVPs (MVP)
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

#2

Message par jchd »

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é.
Avatar du membre
ricky
Niveau 7
Niveau 7
Messages : 443
Enregistré le : ven. 06 févr. 2009 09:25
Localisation : Suisse
Status : Hors ligne

Re: [..] Plugin scite automodification

#3

Message par ricky »

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?
Avatar du membre
sksbir
Niveau 7
Niveau 7
Messages : 384
Enregistré le : lun. 26 oct. 2009 17:57
Localisation : Lyon
Status : Hors ligne

Re: [..] Plugin scite automodification

#4

Message par sksbir »

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à ?
Avatar du membre
ricky
Niveau 7
Niveau 7
Messages : 443
Enregistré le : ven. 06 févr. 2009 09:25
Localisation : Suisse
Status : Hors ligne

Re: [..] Plugin scite automodification

#5

Message par ricky »

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...
GaRydelaMer
Niveau 7
Niveau 7
Messages : 450
Enregistré le : mer. 18 mars 2009 22:12
Localisation : Montpellier
Status : Hors ligne

Re: [..] Plugin scite automodification

#6

Message par GaRydelaMer »

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.
Avatar du membre
sksbir
Niveau 7
Niveau 7
Messages : 384
Enregistré le : lun. 26 oct. 2009 17:57
Localisation : Lyon
Status : Hors ligne

Re: [..] Plugin scite automodification

#7

Message par sksbir »

GaRydelaMer a écrit :Salut
Tu as 2 macros AutoIt @ScriptLineNumber @ScriptName, à toi de jouer avec.
Ben voila, plus la peine de chercher à remplacer avant compilation, puisque @scriptlinenumber te donne cette info.
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.
Le résultat, c'est quoi ? quand ça plante, le N° de ligne affiché correspond au N° dans le fichier source modifié par Obfuscator ?
Avatar du membre
ricky
Niveau 7
Niveau 7
Messages : 443
Enregistré le : ven. 06 févr. 2009 09:25
Localisation : Suisse
Status : Hors ligne

Re: [..] Plugin scite automodification

#8

Message par ricky »

Parfait avec le scriptLine. Merci

Même question que sksbir...
GaRydelaMer
Niveau 7
Niveau 7
Messages : 450
Enregistré le : mer. 18 mars 2009 22:12
Localisation : Montpellier
Status : Hors ligne

Re: [..] Plugin scite automodification

#9

Message par GaRydelaMer »

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.
Avatar du membre
ricky
Niveau 7
Niveau 7
Messages : 443
Enregistré le : ven. 06 févr. 2009 09:25
Localisation : Suisse
Status : Hors ligne

Re: [..] Plugin scite automodification

#10

Message par ricky »

Pas mal comme solution.
Merci
Avatar du membre
ricky
Niveau 7
Niveau 7
Messages : 443
Enregistré le : ven. 06 févr. 2009 09:25
Localisation : Suisse
Status : Hors ligne

Re: [..] Plugin scite automodification

#11

Message par ricky »

Hello,

ç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.")
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.
Avatar du membre
Iste
Niveau 11
Niveau 11
Messages : 1870
Enregistré le : jeu. 04 déc. 2008 14:21
Localisation : 76
Status : Hors ligne

Re: [..] Plugin scite automodification

#12

Message par Iste »

Lire la doc...
Cette macro renvoie -1 en cas de script compilé.
Signez ici
Avatar du membre
ricky
Niveau 7
Niveau 7
Messages : 443
Enregistré le : ven. 06 févr. 2009 09:25
Localisation : Suisse
Status : Hors ligne

Re: [..] Plugin scite automodification

#13

Message par ricky »

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.
Avatar du membre
Iste
Niveau 11
Niveau 11
Messages : 1870
Enregistré le : jeu. 04 déc. 2008 14:21
Localisation : 76
Status : Hors ligne

Re: [..] Plugin scite automodification

#14

Message par Iste »

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é.
Signez ici
Avatar du membre
ricky
Niveau 7
Niveau 7
Messages : 443
Enregistré le : ven. 06 févr. 2009 09:25
Localisation : Suisse
Status : Hors ligne

Re: [..] Plugin scite automodification

#15

Message par ricky »

Provisoirement, sans passe par site, tu pourrais me donner ta solution?
Avatar du membre
Iste
Niveau 11
Niveau 11
Messages : 1870
Enregistré le : jeu. 04 déc. 2008 14:21
Localisation : 76
Status : Hors ligne

Re: [..] Plugin scite automodification

#16

Message par Iste »

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
Signez ici
Avatar du membre
ricky
Niveau 7
Niveau 7
Messages : 443
Enregistré le : ven. 06 févr. 2009 09:25
Localisation : Suisse
Status : Hors ligne

Re: [..] Plugin scite automodification

#17

Message par ricky »

@Iste : tu as lu le temps de regarder?

Ou qqn d'autre,...
Avatar du membre
Iste
Niveau 11
Niveau 11
Messages : 1870
Enregistré le : jeu. 04 déc. 2008 14:21
Localisation : 76
Status : Hors ligne

Re: [..] Plugin scite automodification

#18

Message par Iste »

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

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)

EndFunc
Reste qu'a compiler, passer le fichier en paramètre et trouver comment intégrer ca dans scite... bonne chance ^^
Signez ici
Avatar du membre
ricky
Niveau 7
Niveau 7
Messages : 443
Enregistré le : ven. 06 févr. 2009 09:25
Localisation : Suisse
Status : Hors ligne

Re: [..] Plugin scite automodification

#19

Message par ricky »

Merci.

Mais comme faire pour qu'il prenne %linenumber% ou %125% en sachant qu'à chaque compilation le numéro au centre sera différent?
Avatar du membre
Iste
Niveau 11
Niveau 11
Messages : 1870
Enregistré le : jeu. 04 déc. 2008 14:21
Localisation : 76
Status : Hors ligne

Re: [..] Plugin scite automodification

#20

Message par Iste »

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
Signez ici
Répondre