Editeur D'expression

Vous avez développé un logiciel en PureBasic et vous souhaitez le faire connaitre ?
Shadow
Messages : 1373
Inscription : mer. 04/nov./2015 17:39

Editeur D'expression

Message par Shadow »

Salut,

Attention, utiliser une version non Unicode de PB !
5.44 x64 bits LTS est conseillé ou toute autre version non Unicode !


Je vous présente mon éditeur d'expression, il n'est
pas encore fini mais déjà vous pouvez l'utiliser, je vais le peaufiner !

Il accepte toutes expressions numérique.
Les fonctions Math ainsi que toutes fonction renvoyant un nombre sont accepté.

J'utilise le compilateur de PB, c'est lui qui se charge de vérifier que l'expression
est valide. Si valide elle est, la valeur de retour est renvoyer.

Image

Voici un petit exemple:

Code : Tout sélectionner

47 * (48 + 98 / (24 /5)) + 99 * (99 + CountString("abcdefABCDEF", "a") - 24) * Round(987, #PB_Round_Down) / (45 * 76)
Et les codes:

Code : Tout sélectionner

; Editeur D'expression 1.30
; Créer par Monsieur Dieppedalle David le 14/02/2017.

;{- Enumerations / DataSections

;{ Windows
Enumeration
  #FenetreEditeurExpression
EndEnumeration
;}

;{ Gadgets
Enumeration
  
  #Texte_Info_Editeur_Resultat
  #Editeur_Expression
  #Texte_Info_Editeur_Expression
  #Editeur_Resultat
  #Texte_Info_Panel
  #Panel
  
  #Boutton_0
  #Boutton_1
  #Boutton_2
  #Boutton_3
  #Boutton_4
  #Boutton_5
  #Boutton_6
  #Boutton_7
  #Boutton_8
  #Boutton_9
  #Boutton_Point
  #Boutton_Or
  #Boutton_Xor
  #Boutton_And
  #Boutton_Divise
  #Boutton_Parenthese
  #Boutton_Plus
  #Boutton_Moins
  #Boutton_Multiplie
  #Boutton_Inferieur
  #Boutton_Superieur_Ou_Egale
  #Boutton_Inferieur_Ou_Egale
  #Boutton_Decalage_Droite
  #Boutton_Decalage_Gauche
  #Boutton_Superieur
  #Boutton_Not
  #Boutton_Modulo_Binaire
  #Boutton_Exponentiel
  #Boutton_Hexadecimal
  #Boutton_Different
  #Boutton_Egale
  
  #Boutton_Verifier
  #Boutton_Valider
  #Boutton_Annuler
  
EndEnumeration
;}

;{ Fonts
Enumeration
  #Font_Texte_Info_Editeur_Resultat
  #Font_Editeur_Expression
  #Font_Editeur_Resultat
  #Font_Texte_Info_Editeur_Expression
  #Font_Texte_Info_Panel
  #Font_Panel
EndEnumeration
;}

Define.l Event, EventWindow, EventGadget, EventType, EventMenu

Global ErreurCompilation = 0
Global ErreurCode = 0
Global MessageErreur$ = ""
Global Sortie$ = ""

;}

Procedure AppelCompilateur()
  
  Compilateur = RunProgram(#PB_Compiler_Home + "/Compilers/pbcompiler", "Compilation.pb", "", #PB_Program_Open | #PB_Program_Read | #PB_Program_Hide)
  Sortie$ = ""
  MessageErreur$ = ""
  
  If Compilateur 
    
    While ProgramRunning(Compilateur)
      
      If AvailableProgramOutput(Compilateur)
        
        Tmp$ = ReadProgramString(Compilateur)
        
        If FindString(Tmp$, "Line")
          MessageErreur$ = Tmp$ + Chr(13)
        EndIf
        
      EndIf
      
    Wend
    
    ErreurCompilation = ProgramExitCode(Compilateur)
    CloseProgram(Compilateur) ; Ferme la connection vers le programme
    
  EndIf
  
  Delay(25)
  
  If ReadFile(1, "Log Compilation.txt")
    MessageErreur$ + ReadString(1)
    CloseFile(1)
  EndIf
  
EndProcedure

Procedure.s VerifieExpression(AlertErreur.b = #True, RetourResultat.b = #True)
  
  If CreateFile(1, "Code Source.pb")
    WriteString(1, "CreateFile(1, " + Chr(34) + "Résultat.txt" + Chr(34) + "): WriteString(1, StrD(" + GetGadgetText(#Editeur_Expression) + ")): CloseFile(1)")
    CloseFile(1)
    
  Else
    MessageRequester("Erreur !", "Impossible d'écrire le code source !", 16)
    
  EndIf
  
  AppelCompilateur()
  
  Delay(25)
  
  If AlertErreur = #True
    ClearGadgetItems(#Editeur_Resultat)
    MessageRequester("Résultat...", MessageErreur$, 64)
  EndIf
  
  DeleteFile("Log Compilation.txt")
  DeleteFile("Code Source.pb")
  DeleteFile("PureBasic.exe")
  
  If MessageErreur$ = "Pas d'érreurs !"
    
    If ReadFile(1, "Résultat.txt")
      
      While Eof(1) = 0           ; Boucle tant que la fin du fichier n'est pas atteinte. (Eof = 'End Of File') 
        Resultat$ + ReadString(1); Affiche du fichier
      Wend
      
      If RetourResultat = #True
        SetGadgetText(#Editeur_Resultat, Resultat$)
      EndIf
      
      CloseFile(1)
      DeleteFile("Résultat.txt")
      
    Else
      MessageRequester("Erreur !", "Impossible d'afficher le résultat !", 16)
    EndIf
    
    If RetourResultat = #True
      ProcedureReturn Resultat$
    EndIf
    
  Else
    SetGadgetText(#Editeur_Resultat, "Oppération non valide !")
  EndIf
  
EndProcedure

Procedure OpenWindow_FenetreEditeurExpression()
  If OpenWindow(#FenetreEditeurExpression, 400, 159, 500, 575, "Editeur D'expression 1.30", #PB_Window_SystemMenu|#PB_Window_MinimizeGadget|#PB_Window_TitleBar|#PB_Window_ScreenCentered)
    
    ; Création des Gadgets:
    TextGadget(#Texte_Info_Editeur_Expression, 10, 6, 480, 17, "Entrez votre Expression Mathématique:", #PB_Text_Center)
    SetGadgetFont(#Texte_Info_Editeur_Expression, LoadFont(#Font_Texte_Info_Editeur_Expression, "Times New Roman", 12, #PB_Font_Bold|#PB_Font_HighQuality))
    SetGadgetColor(#Texte_Info_Editeur_Expression, #PB_Gadget_FrontColor, RGB(0, 0, 200))
    
    EditorGadget(#Editeur_Expression, 10, 27, 480, 215, #PB_Editor_WordWrap)
    SetGadgetFont(#Editeur_Expression, LoadFont(#Font_Editeur_Expression, "Microsoft Sans Serif", 8, #PB_Font_HighQuality))
    SetGadgetColor(#Editeur_Expression, #PB_Gadget_FrontColor, RGB(0, 0, 0))
    
    TextGadget(#Texte_Info_Editeur_Resultat, 10, 255, 480, 17, "Résultat de sortie:", #PB_Text_Center)
    SetGadgetFont(#Texte_Info_Editeur_Resultat, LoadFont(#Font_Texte_Info_Editeur_Resultat, "Times New Roman", 12, #PB_Font_Bold|#PB_Font_HighQuality))
    SetGadgetColor(#Texte_Info_Editeur_Resultat, #PB_Gadget_FrontColor, RGB(255, 150, 0))
    EditorGadget(#Editeur_Resultat, 10, 275, 480, 17, #PB_Editor_ReadOnly)
    SetGadgetFont(#Editeur_Resultat, LoadFont(#Font_Editeur_Resultat, "Microsoft Sans Serif", 8, #PB_Font_HighQuality))
    SetGadgetColor(#Editeur_Resultat, #PB_Gadget_FrontColor, RGB(0, 150, 0))
    
    TextGadget(#Texte_Info_Panel, 10, 310, 480, 17, "Panel des commandes:", #PB_Text_Center)
    SetGadgetFont(#Texte_Info_Panel, LoadFont(#Font_Texte_Info_Panel, "Times New Roman", 12, #PB_Font_Bold|#PB_Font_HighQuality))
    SetGadgetColor(#Texte_Info_Panel, #PB_Gadget_FrontColor, RGB(200, 50, 0))
    PanelGadget(#Panel, 10, 330, 480, 200)
    SetGadgetFont(#Panel, LoadFont(#Font_Panel, "Microsoft Sans Serif", 8, #PB_Font_HighQuality))
    
    AddGadgetItem(#Panel, -1, "Basique")
    ButtonGadget(#Boutton_0, 25, 115, 70, 30, "0")
    GadgetToolTip(#Boutton_0, "0")
    ButtonGadget(#Boutton_Point, 95, 115, 35, 30, ".")
    GadgetToolTip(#Boutton_Point, ".")
    ButtonGadget(#Boutton_1, 25, 85, 35, 30, "1")
    GadgetToolTip(#Boutton_1, "1")
    ButtonGadget(#Boutton_2, 60, 85, 35, 30, "2")
    GadgetToolTip(#Boutton_2, "2")
    ButtonGadget(#Boutton_3, 95, 85, 35, 30, "3")
    GadgetToolTip(#Boutton_3, "3")
    ButtonGadget(#Boutton_4, 25, 55, 35, 30, "4")
    GadgetToolTip(#Boutton_4, "4")
    ButtonGadget(#Boutton_5, 60, 55, 35, 30, "5")
    GadgetToolTip(#Boutton_5, "5")
    ButtonGadget(#Boutton_6, 95, 55, 35, 30, "6")
    GadgetToolTip(#Boutton_6, "6")
    ButtonGadget(#Boutton_7, 25, 25, 35, 30, "7")
    GadgetToolTip(#Boutton_7, "7")
    ButtonGadget(#Boutton_8, 60, 25, 35, 30, "8")
    GadgetToolTip(#Boutton_8, "8")
    ButtonGadget(#Boutton_9, 95, 25, 35, 30, "9")
    GadgetToolTip(#Boutton_9, "9")
    ButtonGadget(#Boutton_Plus, 145, 115, 35, 30, "+")
    GadgetToolTip(#Boutton_Plus, "Addition")
    ButtonGadget(#Boutton_Moins, 145, 85, 35, 30, "-")
    GadgetToolTip(#Boutton_Moins, "Soustraction")
    ButtonGadget(#Boutton_Multiplie, 145, 55, 35, 30, "*")
    GadgetToolTip(#Boutton_Multiplie, "Multiplication")
    ButtonGadget(#Boutton_Divise, 145, 25, 35, 30, "/")
    GadgetToolTip(#Boutton_Divise, "Division")
    ButtonGadget(#Boutton_Parenthese, 180, 115, 35, 30, "()")
    GadgetToolTip(#Boutton_Parenthese, "Parenthèses")
    ButtonGadget(#Boutton_Hexadecimal, 180, 85, 35, 30, "$")
    GadgetToolTip(#Boutton_Hexadecimal, "Hexadecimal")
    ButtonGadget(#Boutton_Modulo_Binaire, 180, 55, 35, 30, "%")
    GadgetToolTip(#Boutton_Modulo_Binaire, "Modulo / Binaire")
    ButtonGadget(#Boutton_Exponentiel, 180, 25, 35, 30, "^")
    GadgetToolTip(#Boutton_Exponentiel, "Exponentiel")
    
    CloseGadgetList()
    
    ButtonGadget(#Boutton_Verifier, 100, 537, 100, 30, "Verifier")
    ButtonGadget(#Boutton_Valider, 200, 537, 100, 30, "Valider")
    ButtonGadget(#Boutton_Annuler, 300, 537, 100, 30, "Annuler")
    
    SetActiveGadget(#Editeur_Expression)
    
  EndIf
EndProcedure

OpenWindow_FenetreEditeurExpression()

;{- Event loop

Repeat ; Départ des évènements de boucle
  
  Event = WaitWindowEvent(1) ; Cette ligne attend pendent (Minuteur) qu'un évènement soit recus par la fenêtre
  EventWindow = EventWindow(); La fenêtre ou l'évènement c'est produit
  EventGadget = EventGadget(); Pour savoir sur quel gadget c'est produis l'évènement
  EventMenu = EventMenu()    ; Pour savoir sur quel menue c'est produis l'évènement
  EventType = EventType()    ; Le type d'évènement qui c'est produis sur le gadget
  
  Select Event
      
    Case #PB_Event_Gadget
      
      Select EventGadget
          
        Case #Boutton_0
          SendMessage_(GadgetID(#Editeur_Expression), #EM_REPLACESEL, 0, "0")
          
        Case #Boutton_1
          SendMessage_(GadgetID(#Editeur_Expression), #EM_REPLACESEL, 0, "1")
          
        Case #Boutton_2
          SendMessage_(GadgetID(#Editeur_Expression), #EM_REPLACESEL, 0, "2")
          
        Case #Boutton_3
          SendMessage_(GadgetID(#Editeur_Expression), #EM_REPLACESEL, 0, "3")
          
        Case #Boutton_4
          SendMessage_(GadgetID(#Editeur_Expression), #EM_REPLACESEL, 0, "4")
          
        Case #Boutton_5
          SendMessage_(GadgetID(#Editeur_Expression), #EM_REPLACESEL, 0, "5")
          
        Case #Boutton_6
          SendMessage_(GadgetID(#Editeur_Expression), #EM_REPLACESEL, 0, "6")
          
        Case #Boutton_7
          SendMessage_(GadgetID(#Editeur_Expression), #EM_REPLACESEL, 0, "7")
          
        Case #Boutton_8
          SendMessage_(GadgetID(#Editeur_Expression), #EM_REPLACESEL, 0, "8")
          
        Case #Boutton_9
          SendMessage_(GadgetID(#Editeur_Expression), #EM_REPLACESEL, 0, "9")
          
        Case #Boutton_Point
          SendMessage_(GadgetID(#Editeur_Expression), #EM_REPLACESEL, 0, ".")
          
        Case #Boutton_Parenthese
          SendMessage_(GadgetID(#Editeur_Expression), #EM_REPLACESEL, 0, "()")
          
        Case #Boutton_Plus
          SendMessage_(GadgetID(#Editeur_Expression), #EM_REPLACESEL, 0, "+")
          
        Case #Boutton_Moins
          SendMessage_(GadgetID(#Editeur_Expression), #EM_REPLACESEL, 0, "-")
          
        Case #Boutton_Multiplie
          SendMessage_(GadgetID(#Editeur_Expression), #EM_REPLACESEL, 0, "*")
          
        Case #Boutton_Divise
          SendMessage_(GadgetID(#Editeur_Expression), #EM_REPLACESEL, 0, "/")
          
        Case #Boutton_Modulo_Binaire
          SendMessage_(GadgetID(#Editeur_Expression), #EM_REPLACESEL, 0, "%")
          
        Case #Boutton_Exponentiel
          SendMessage_(GadgetID(#Editeur_Expression), #EM_REPLACESEL, 0, "^")
          
        Case #Boutton_Hexadecimal
          SendMessage_(GadgetID(#Editeur_Expression), #EM_REPLACESEL, 0, "$")
          
        Case #Editeur_Expression
          
          If FindString(GetGadgetText(#Editeur_Expression), Chr(10)) Or FindString(GetGadgetText(#Editeur_Expression), Chr(13))
            SetGadgetText(#Editeur_Expression, ReplaceString(ReplaceString(GetGadgetText(#Editeur_Expression), Chr(10), ""), Chr(13), ""))
            keybd_event_(#VK_END,0,0,0)
            keybd_event_(#VK_END,0,2,0)
          EndIf
          
        Case #Boutton_Verifier
                    
          If GetGadgetText(#Editeur_Expression) > ""
            VerifieExpression(#True, #True)
          EndIf
          
        Case #Boutton_Valider
          
          If GetGadgetText(#Editeur_Expression) > ""
            Resultat$ = VerifieExpression(#False, #True)
          EndIf
          
          CloseWindow(#FenetreEditeurExpression)
          Break
          
        Case #Boutton_Annuler
          Event = #PB_Event_CloseWindow
          CloseWindow(#FenetreEditeurExpression)
          Break
          
      EndSelect
      
    Case #PB_Event_Menu
      
      Select EventMenu
          
        Case 0
          
      EndSelect
      
    Case #PB_Event_CloseWindow  
      
  EndSelect
  
Until Event = #PB_Event_CloseWindow ; Fin des évènements de boucle
                                    ;
                                    ;}
Nommez ce fichier Compilation.pb et placez-le au même endroit que le code précédent.

Code : Tout sélectionner

Global Fin = 0

Procedure ErrorHandler()
  
  If CreateFile(1, "Log Compilation.txt")
    
    WriteString(1, ErrorMessage())
    CloseFile(1)
    
  Else
    MessageRequester("Erreur !", "Impossible d'écrire le Log !", 16)
  EndIf
  
  Fin = 1
  
EndProcedure

OnErrorCall(@ErrorHandler())

IncludeFile "Code Source.pb"

If Fin = 0
  
  If CreateFile(1, "Log Compilation.txt")
    
    WriteString(1, "Pas d'érreurs !")
    CloseFile(1)
    
  Else
    MessageRequester("Erreur !", "Impossible d'écrire le Log !", 16)
  EndIf
  
EndIf
L'archive au cas ou:
https://www.dropbox.com/s/eudb1nvn1ilvs ... on.7z?dl=0
Dernière modification par Shadow le mer. 15/févr./2017 7:56, modifié 2 fois.
Processeur: Intel Core I7-4790 - 4 Cœurs - 8 Thread: 3.60 Ghz.
Ram: 32 GB.
Disque: C: SDD 250 GB, D: 3 TB.
Vidéo: NVIDIA GeForce GTX 960: 2 GB DDR5.
Écran: Asus VX248 24 Pouces: 1920 x 1080.
Système: Windows 7 64 Bits.

PureBasic: 5.60 x64 Bits.
Avatar de l’utilisateur
falsam
Messages : 7244
Inscription : dim. 22/août/2010 15:24
Localisation : IDF (Yvelines)
Contact :

Re: Editeur D'expression

Message par falsam »

Je tape 1 + 1 que je vérifie en cliquant sur le bouton adéquat et effectivement je n'ai pas d'erreur.

Si j'ai bien compris tu crées un fichier source qui contiendra

Code : Tout sélectionner

CreateFile(1, "Résultat.txt"): WriteString(1, StrD(1 + 1)): CloseFile(1)
et c'est ce fichier que tu compiles avec PureBasic pour voir si il y a des erreurs.

Pas contre pas de résultat, ce qui est normal puisque tu cherche à ouvrir le fichier Résultat.txt avec le code suivant

Code : Tout sélectionner

ReadFile(1, "Résultat.txt")
Quand au deuxieme code que tu proposes je n'en vois pas l'utilité.
Configuration : Windows 11 Famille 64-bit - PB 6.03 x64 - AMD Ryzen 7 - 16 GO RAM
Vidéo NVIDIA GeForce GTX 1650 Ti - Résolution 1920x1080 - Mise à l'échelle 125%
Shadow
Messages : 1373
Inscription : mer. 04/nov./2015 17:39

Re: Editeur D'expression

Message par Shadow »

Tous les codes sont utile !
Pour faire simple, bien que complexe quand même:

Je créer le fichier source PB "Code Source.pb" qui contient les instructions suivante:

Création du fichier "Résultat.txt"
Écriture du résultat de l’opération de l'éditeur d'expression évalué grâce à StrD()
Fermeture du fichier

Ensuite j'appel le compilateur PB et je lui donne le fichier "Compilation.pb"
qui lui même contiendra par un include le fichier "Code Source.pb"

Le compilateur essaie de compiler le fichier "Code Source.pb", ensuite j'enregistre la sortie
erreur du compilateur dans un fichier Log qui va inscrire si
une erreur est survenue, sinon j'écris "Pas d'érreurs !"

Ensuite je récupère la sortie (Log) en lisant le fichier
et je l'affiche dans une boîte de dialogue.

Si ya pas d'erreur, j'affiche le résultat dans l'éditeur adéquat
sinon j'affiche qu'il à une erreur.

Voilà en gros.

L'avantage avec ça est que toutes commande PB qui peu
renvoyer un numérique est utilisable dans l'expression !

De cette manière je suis très flexible !
Au delà de toutes mes attente en faite et exactement se que je voulais :D
Processeur: Intel Core I7-4790 - 4 Cœurs - 8 Thread: 3.60 Ghz.
Ram: 32 GB.
Disque: C: SDD 250 GB, D: 3 TB.
Vidéo: NVIDIA GeForce GTX 960: 2 GB DDR5.
Écran: Asus VX248 24 Pouces: 1920 x 1080.
Système: Windows 7 64 Bits.

PureBasic: 5.60 x64 Bits.
Avatar de l’utilisateur
Ar-S
Messages : 9476
Inscription : dim. 09/oct./2005 16:51
Contact :

Re: Editeur D'expression

Message par Ar-S »

de cette manière je suis très flexible !
Au delà de toutes mes attentes en fait et exactement ce que je voulais
Et c'est bien là le plus important. Pour ma part je passe, je n'en ai pas l'utilité.
~~~~Règles du forum ~~~~
⋅.˳˳.⋅ॱ˙˙ॱ⋅.˳Ar-S ˳.⋅ॱ˙˙ॱ⋅.˳˳.⋅
W11x64 PB 6.x
Section HORS SUJET : ICI
LDV MULTIMEDIA : Dépannage informatique & mes Logiciels PB
UPLOAD D'IMAGES : Uploader des images de vos logiciels
Avatar de l’utilisateur
Micoute
Messages : 2522
Inscription : dim. 02/oct./2011 16:17
Localisation : 35520 La Mézière

Re: Editeur D'expression

Message par Micoute »

Et en plus il fonctionne avec PB 5.60 b3, ce qui prouve que ça fonctionne avec l'Unicode.
Microsoft Windows 10 Famille 64 bits : Carte mère : ASRock 970 Extreme3 R2.0 : Carte Graphique NVIDIA GeForce RTX 3080 : Processeur AMD FX 6300 6 cœurs 12 threads 3,50 GHz PB 5.73 PB 6.00 LTS (x64)
Un homme doit être poli, mais il doit aussi être libre !
Shadow
Messages : 1373
Inscription : mer. 04/nov./2015 17:39

Re: Editeur D'expression

Message par Shadow »

Non Micoute ça ne fonctionne pas comme ça devrais en Unicode !
A cause des accents sur les nom de fichier notamment je pense.
Sinon peut être oui.
Processeur: Intel Core I7-4790 - 4 Cœurs - 8 Thread: 3.60 Ghz.
Ram: 32 GB.
Disque: C: SDD 250 GB, D: 3 TB.
Vidéo: NVIDIA GeForce GTX 960: 2 GB DDR5.
Écran: Asus VX248 24 Pouces: 1920 x 1080.
Système: Windows 7 64 Bits.

PureBasic: 5.60 x64 Bits.
Avatar de l’utilisateur
Zorro
Messages : 2185
Inscription : mar. 31/mai/2016 9:06

Re: Editeur D'expression

Message par Zorro »

je n'ai pas testé le code
mais, il faut avouer que la methode (si ça marche) , ben c'est tres malin ! :)
Image
Image
Site: http://michel.dobro.free.fr/
Devise :"dis moi ce dont tu as besoin, je t'expliquerai comment t'en passer"
Marc56
Messages : 2147
Inscription : sam. 08/févr./2014 15:19

Re: Editeur D'expression

Message par Marc56 »

Ligne 137:

Code : Tout sélectionner

DeleteFile("PureBasic.exe")"
Si le chemin courant se perd, possibilité de supprimer l'IDE PB :roll:

:arrow: Dans une application sérieuse, les fonctions systèmes doivent toujours s'utiliser avec un chemin complet ou une vérification préalable du répertoire courant. :!:
(Pour les exécutables générés par une application, on utilise en général GetTemporaryDirectory() sinon l'EXE se fait mettre en quarantaine par tout antivirus sérieux)

Code : Tout sélectionner

OnErrorCall(@ErrorHandler())
C'est bien (mais autant le mettre au début) juste après EnableExplicit (absent)
De toutes façons il ne sert à rien car tu as oublié d'écrire la procédure ErrorHandler()...
https://www.purebasic.com/french/docume ... rcall.html


Ton programme fonctionne en mode unicode (testé sous 5.60 B3)
- Replace "Résultat.txt" par "Resultat.txt"
- Supprime la ligne 154 (DeleteFile("Resultat.txt")) ton résultat s'y trouve, tu n'as qu'à afficher le contenu


Trop de boucles If / EndIf rendent ton programme difficile à suivre:

:idea: Il est plus lisible d'écrire dans une procédure directement la sortie si la condition principale n'est pas remplie

Code : Tout sélectionner

If Not ...
     MessageRequester(...
     ProcedureReturn 
EndIf
que

Code : Tout sélectionner

If ...
     If ...
          If ...
               ...
               ...
               ...
          EndIf
     EndIf
Else
     ...
EndIf
Car on a vite fait de se tromper dans les imbrications (et d'oublier par exemple de relâcher un handle de fichier ouvert)
Avatar de l’utilisateur
Zorro
Messages : 2185
Inscription : mar. 31/mai/2016 9:06

Re: Editeur D'expression

Message par Zorro »

voici en gros le principe :) (testé et fonctionne chez moi )

Code : Tout sélectionner


Enumeration
#file
EndEnumeration


expression.s="10*6+(8/2)+Pow(2.0, 3.0) " ; l'expression qui sera evalué par le compilo


; **************************************************************************************
nom_file.s="resultat.pb" ; le nom du prg qui sera compilé
Openfile(#file,nom_file.s)
		WriteStringN(#file,"a.q =" + expression.s) ; on attribut l'expression a une variable .q
		WriteStringN(#file,"SetClipboardText(strq(a.q ))") ; on copie le resultat dans le clipboard
CloseFile(#file)

RunProgram(#PB_Compiler_Home + "\Compilers\pbcompiler.exe", nom_file.s, "") ; on lance notre pseudo prg
delay(500)

debug "le resultat est :"+GetClipboardText() ; on affiche le contenu du clipboard ...bref , le resultat
ClearClipboard()
; **************************************************************************************


bon en fait, ça ne peut servir qu'a ceux qui ont une licence Purebasic
puisqu'il faut détenir le compilateur .... ce qui limite pas mal l'interet au final :)

mais l'idée est interessante :)
Dernière modification par Zorro le mer. 15/févr./2017 9:59, modifié 1 fois.
Image
Image
Site: http://michel.dobro.free.fr/
Devise :"dis moi ce dont tu as besoin, je t'expliquerai comment t'en passer"
Avatar de l’utilisateur
Kwai chang caine
Messages : 6962
Inscription : sam. 23/sept./2006 18:32
Localisation : Isere

Re: Editeur D'expression

Message par Kwai chang caine »

Oui, bonne idée d'utiliser le compilateur 8O t'es un malin :mrgreen: , ce dont je n'ai jamais douté :wink:
Bon...ca oblige à avoir une licence, mais fallait y penser ...
Merci du partage 8)
ImageLe bonheur est une route...
Pas une destination

PureBasic Forum Officiel - Site PureBasic
Marc56
Messages : 2147
Inscription : sam. 08/févr./2014 15:19

Re: Editeur D'expression

Message par Marc56 »

Efficace, Zorro (comme d'habitude) :P

En passant, à quoi sert:

Code : Tout sélectionner

Declare appelcompilateur()
La procédure n'est pas dans le code ?

PS. La largeur de ton bandeau de signature (1241 px) élargie tout le forum dès que tu postes un article. Si tu pouvais réduire de 25 ou 50% ce serait bien et tout aussi lisible :wink:
Shadow
Messages : 1373
Inscription : mer. 04/nov./2015 17:39

Re: Editeur D'expression

Message par Shadow »

Je conçois bien que mon programme soit encore très imparfaits :wink:
Mais je vais amélioré :)

Utiliser le débogueur de PB...

Bha oui, je demande un truc qui n'existe pas, pouvoir évoluer une expression
exactement comme si c’était dans PB lui même pour avoir toutes les possibilités du langage.

Et ça n'existe pas je pense, et bien trop compliquer à mettre en place même pour un pro.
Alors quoi ?

Bon j'me suis dit, écoute, tu as PB là, tu as tous se qui te faut, pourquoi chercher
une chose qui ne te conviendra de toute façon jamais, alors que
tu as le compilateur de PB sous la main ?! -> Sert t'en !

Et voilà, l'idée est venue de là.

Malin ?!, j'avoue que c'est futé et que j'ai pris la meilleur décision possible.
Il faut PB oui et de toute façon c'est indispensable !

Je suis assez fier de mon idée et surtout de l'avoir mis en pratique !
Merci à vous.
Processeur: Intel Core I7-4790 - 4 Cœurs - 8 Thread: 3.60 Ghz.
Ram: 32 GB.
Disque: C: SDD 250 GB, D: 3 TB.
Vidéo: NVIDIA GeForce GTX 960: 2 GB DDR5.
Écran: Asus VX248 24 Pouces: 1920 x 1080.
Système: Windows 7 64 Bits.

PureBasic: 5.60 x64 Bits.
Avatar de l’utilisateur
Zorro
Messages : 2185
Inscription : mar. 31/mai/2016 9:06

Re: Editeur D'expression

Message par Zorro »

Marc56 a écrit :En passant, à quoi sert:

Code : Tout sélectionner

Declare appelcompilateur()
La procédure n'est pas dans le code ?
un oubli !
PS. La largeur de ton bandeau de signature (1241 px) élargie tout le forum dès que tu postes un article. Si tu pouvais réduire de 25 ou 50% ce serait bien et tout aussi lisible :wink:
corrigé en principe merci (la largeur max d'une image,sur un forum, ne devrai pas depasser 800 de largeur .. je le sais pourtant
mais.... je suis passé a coté de ça :roll:
Image
Image
Site: http://michel.dobro.free.fr/
Devise :"dis moi ce dont tu as besoin, je t'expliquerai comment t'en passer"
Avatar de l’utilisateur
JohnJohnsonSHERMAN
Messages : 648
Inscription : dim. 13/déc./2015 11:05
Localisation : Allez, cherche...
Contact :

Re: Editeur D'expression

Message par JohnJohnsonSHERMAN »

C'est une bonne idée de passer par le compilateur :) J'y aurais pas pensé ;)
Ca me rapelle ce que faisait un utiisateur du forum Allemand pour inclure du code PB dans une page web (sur le même principe que le PHP) , la page était lue par le serveur, le code compilé et exécuté, et la sortie du programme était renvoyée dans la page, alors envoyée au client :) J'étais passé dessus en faisant mon serveur, mais pas moyen de remettre la main dessus...


En tout cas, merci Shadow
"Le bug se situe entre la chaise et le clavier"
Votre expert national en bogage et segfaults.

CPU : AMD A8 Quad core - RAM 8Gb - HDD 2To
  • Windows 10 x64 - PB 5.61 x64
  • Linux Ubuntu 16.04 LTS x64 (dual boot) - PB pas encore réinstallé
Avatar de l’utilisateur
Kwai chang caine
Messages : 6962
Inscription : sam. 23/sept./2006 18:32
Localisation : Isere

Re: Editeur D'expression

Message par Kwai chang caine »

JohnJohnsonSHERMAN a écrit :la page était lue par le serveur, le code compilé et exécuté, et la sortie du programme était renvoyée dans la page
Put...pour faire un virus à distance, c'est de la balle 8O
C'est vrai que quand on peut trimballer le compilo, on peut faire whatmilles choses etant donné sa portabilité 8)
Je me rappelle aussi un fil de discussion, ou quelqu'un avant demandé si il pouvait le copier dans son programme, je te laisse deviner la réponse :lol:
ImageLe bonheur est une route...
Pas une destination

PureBasic Forum Officiel - Site PureBasic
Répondre