Outils personnalisés

Vous débutez et vous avez besoin d'aide ? N'hésitez pas à poser vos questions
Avatar de l’utilisateur
Droopy
Messages : 1151
Inscription : lun. 19/juil./2004 22:31

Outils personnalisés

Message par Droopy »

Je cherche à créer un pluggin qui modifie le code que j'édite
Voici le code du Pluggin :

Code : Tout sélectionner

Procedure Erreur(Text.s)
  MessageRequester("Erreur",Text,#MB_ICONERROR) 
  End
EndProcedure

#FichierInc="PbSnippet.pbi"

PParametre.s=ProgramParameter(0)
If PParametre="" Or UCase(Left(PParametre,8))="TEMPFILE"
  Erreur("Aucun fichier spécifié")
EndIf

;/ Vérifie que le chemin est valide
Path.s=GetPathPart(PParametre)
If FileSize(Path)<>-2
  Erreur("Chemin invalide")
EndIf


;/ Vérifie que le fichier spécifié n'est pas vide
FichierPB.s=PParametre
If FileSize(FichierPB)<1
  Erreur("Fichier vide")
EndIf


;/ Test si le fichier source inclus déjà le fichier pbi
Fid=ReadFile(#PB_Any,FichierPB)
flag=1
While Eof(Fid)=0
  Ligne.s=ReadString(Fid,#PB_Ascii) ; lit une ligne
  Ligne=UCase(Ligne) ; la mete en majuscule
  Ligne=ReplaceString(Ligne," ","") ; supprime tous les espaces
  LigneRecherchee.s="INCLUDEFILE"+Chr(34)+UCase(#FichierInc)+Chr(34)
  If Left(Ligne,Len(LigneRecherchee))=LigneRecherchee
    flag=0
  EndIf
Wend

;/ Insère la commande include si non incluse
If flag
  Beep_(750,300)
  Taille=FileSize(FichierPB)
  *Ptr=AllocateMemory(Taille)
  Fid=ReadFile(#PB_Any,FichierPB)
  ReadData(Fid,*Ptr,Taille)
  CloseFile(Fid)
  
  ; écrit le fichier avec la commande include en premier
  Fid=CreateFile(#PB_Any,FichierPB)
  WriteStringN(Fid,"IncludeFile "+Chr(34)+#FichierInc+Chr(34))
  WriteData(Fid,*Ptr,Taille)
  CloseFile(Fid)
  FreeMemory(*Ptr)
EndIf
Le soucis que je rencontre est que le fichier modifié n'est pas rechargé !
Si quelqu'un a une idée :wink:
comtois
Messages : 5186
Inscription : mer. 21/janv./2004 17:48
Contact :

Message par comtois »

Peut-être que ce lien peut t'aider ?

http://www.purebasic.fr/french/viewtopic.php?t=6284
http://purebasic.developpez.com/
Je ne réponds à aucune question technique en PV, utilisez le forum, il est fait pour ça, et la réponse peut profiter à tous.
brossden
Messages : 833
Inscription : lun. 26/janv./2004 14:37

Message par brossden »

Bonjour Droopy
Lorsque tu fermes le fichier "FichierPB" tu cherches à en créer un autre du même nom beaucoup trop vite, ce se fait rien ne se passe, essaye de rajouter un delay(1000) entre les deux et tu n'auras plus de problème.

Une autre solution (plus judicieuse à mon goût) consiste à ouvrir une seule fois le fichier et de reécrire par dessus puisque le fichier final et forcement égal ou plus grand que le fichier initial, ceci grace au repositionnement du pointeur par FileSeek()

Code : Tout sélectionner

Procedure Erreur(Text.s)
  MessageRequester("Erreur",Text,#MB_ICONERROR)
  End
EndProcedure

#FichierInc="PbSnippet.pbi"

PParametre.s=ProgramParameter(0)

If PParametre="" Or UCase(Left(PParametre,8))="TEMPFILE"
  Erreur("Aucun fichier spécifié")
EndIf

;/ Vérifie que le chemin est valide
Path.s=GetPathPart(PParametre)
If FileSize(Path)<>-2
  Erreur("Chemin invalide")
EndIf


;/ Vérifie que le fichier spécifié n'est pas vide
FichierPB.s=PParametre
If FileSize(FichierPB)<1
  Erreur("Fichier vide")
EndIf


;/ Test si le fichier source inclus déjà le fichier pbi
Fid = OpenFile(#PB_Any,FichierPB)
flag=1
While Eof(Fid)=0
  Ligne.s=UCase(ReadString(Fid,#PB_Ascii)) ; lit une ligne
;  Ligne=UCase(Ligne) ; la mete en majuscule
;  Ligne=ReplaceString(Ligne," ","") ; supprime tous les espaces
;  LigneRecherchee.s="INCLUDEFILE"+Chr(34)+UCase(#FichierInc)+Chr(34)
;  If Left(Ligne,Len(LigneRecherchee))=LigneRecherchee
;    flag=0
;  EndIf
  If FindString(Ligne,"INCLUDEFILE",0)>0 And  FindString(Ligne,UCase(#FichierInc),0)>0
    flag = 0
  EndIf
Wend
;/ Insère la commande include si non incluse
If flag
  Beep_(750,300)
  Taille=FileSize(FichierPB)
  *Ptr=AllocateMemory(Taille)
  FileSeek(Fid,0)
  ReadData(Fid,*Ptr,Taille)
  FileSeek(Fid,0) 
  WriteStringN(Fid,"IncludeFile "+Chr(34)+#FichierInc+Chr(34))
  WriteData(Fid,*Ptr,Taille)
  FreeMemory(*Ptr)
EndIf
CloseFile(Fid)
Dernière modification par brossden le mer. 04/juil./2007 10:59, modifié 1 fois.
Denis

Bonne Jounée à tous
brossden
Messages : 833
Inscription : lun. 26/janv./2004 14:37

Message par brossden »

J'ai corrigé un petit Bug ! Le code est bon maintenant.

J'avais simplement alloué un nom de fichier existant au paramètre PParametre pour tester plus facilement, j'ai supprimé la ligne !

Toutes mes excuses !
:oops:

J'a' aussi traité un autre problème qui est le suivant :

Si la ligne n'est pas <IncludeFile "PbSnippet.pbi">,
mais IncludeFile "c:\Purebasic\PbSnippet.pbi" ton code ne fonctionne pas !

La parade est de chercher "INCLUDEFILE" et "PBSNIPPET.PBI" présent sur la même ligne !

If FindString(Ligne,"INCLUDEFILE",0)>0 And FindString(Ligne,UCase(#FichierInc),0)>0
Denis

Bonne Jounée à tous
Avatar de l’utilisateur
Droopy
Messages : 1151
Inscription : lun. 19/juil./2004 22:31

Message par Droopy »

Merci Brossden & Comtois, je vais analyser mon erreur :D :wink:
Avatar de l’utilisateur
Droopy
Messages : 1151
Inscription : lun. 19/juil./2004 22:31

Message par Droopy »

J'avais juste oublié de fermer le fichier que je lisais :oops:

Merci encore
Répondre