Page 1 sur 8

Interpreteur

Publié : sam. 11/déc./2010 13:44
par dayvid
Salut, j'ai lue un sujet sur le fofo mais il date
cependent je m'en suis inspirer pour progresser un peut

Non j'ai pas encore progresser mais sa viendra :)

donc voilà la chose:

Code : Tout sélectionner

;-PHASE 6 FIN DE L'EPURATION DES CHAINES DE CARACTERERES

; On supprime les charactères de fin de chaines (#EOL)
ForEach CodeBrut() : CodeBrut()\CMD$ = RemoveString(CodeBrut()\CMD$,#EOL) : Next

ForEach CodeBrut()   ; On Stocke les chaines non nulle , dans une autre liste qui va nous servir de "main courante" pour l'execution du code.
  If CodeBrut()\CMD$<>""
    AddElement(Code())
    Code()\CMD$         = CodeBrut()\CMD$
    Code()\FichierLigne = CodeBrut()\Ligne  ; Pk le -2 ??? je ne sais pô , sinon sa bug on tombe 2 ligne en dessous lors d'une erreur
    Code()\Ligne        = ListIndex(Code())
  EndIf   
Next

; On supprime les charactères de fin de chaines (#EOL)
ForEach Code() :
 
  Code()\CMD$ = RemoveString(Code()\CMD$,#EOL) :
 
  If Code()\CMD$=""
    DeleteElement(Code())
  EndIf
 
Next
qui se trouve ici http://www.purebasic.fr/french/viewtopi ... +les+bases

mais comment je fait si il y a méton une ligne comme sa:

Code : Tout sélectionner

// un commantaire sur une seulle ligne
imaginon qu'il est aussi ceci par exemple:

Code : Tout sélectionner

ecrire "abcd" // ecrire du texte 

/* cette commande permet de taper du
texte dans la console*/ 

input() /* ceci permet de laisser a l'utilisateur
la possibilité de répondre a une question */

/* // un /* commentaire /* sur une /* seulle // ligne */
// un /* autre */ commentaire // sur */ une seulle /* ligne

en plus le sujet a été arreter et je me demandais pourquoi ?

Re: Interpreteur

Publié : sam. 11/déc./2010 14:23
par dayvid
bin sinon j'ai crée sa, c'est un bon debut :P

Code : Tout sélectionner

ProcedureDLL.s TrimInvisibleCharacter(Chaine$)
; ont enlève tous les caractère invisible en début et fin de ligne
position_depart = 0

; au début
Repeat
  position_depart + 1
  caractere$ = Mid(Chaine$, position_depart, 1)
Until caractere$ <> Chr(1) And caractere$ <> Chr(2) And caractere$ <> Chr(3) And caractere$ <> Chr(4) And caractere$ <> Chr(5) And caractere$ <> Chr(6) And caractere$ <> Chr(7) And caractere$ <> Chr(8) And caractere$ <> Chr(9) And caractere$ <> Chr(10) And caractere$ <> Chr(11) And caractere$ <> Chr(12) And caractere$ <> Chr(13) And caractere$ <> Chr(14) And caractere$ <> Chr(15) And caractere$ <> Chr(16) And caractere$ <> Chr(17) And caractere$ <> Chr(18) And caractere$ <> Chr(19) And caractere$ <> Chr(20) And caractere$ <> Chr(21) And caractere$ <> Chr(22) And caractere$ <> Chr(23) And caractere$ <> Chr(24) And caractere$ <> Chr(25) And caractere$ <> Chr(26) And caractere$ <> Chr(27) And caractere$ <> Chr(28) And caractere$ <> Chr(29) And caractere$ <> Chr(30) And caractere$ <> Chr(31) And caractere$ <> Chr(32) 

position_fin = Len(ligne_de_code$) + 1

; a la fin
Repeat
  position_fin - 1
  caractere$ = Mid(Chaine$, position_fin, 1)
Until caractere$ <> Chr(1) And caractere$ <> Chr(2) And caractere$ <> Chr(3) And caractere$ <> Chr(4) And caractere$ <> Chr(5) And caractere$ <> Chr(6) And caractere$ <> Chr(7) And caractere$ <> Chr(8) And caractere$ <> Chr(9) And caractere$ <> Chr(10) And caractere$ <> Chr(11) And caractere$ <> Chr(12) And caractere$ <> Chr(13) And caractere$ <> Chr(14) And caractere$ <> Chr(15) And caractere$ <> Chr(16) And caractere$ <> Chr(17) And caractere$ <> Chr(18) And caractere$ <> Chr(19) And caractere$ <> Chr(20) And caractere$ <> Chr(21) And caractere$ <> Chr(22) And caractere$ <> Chr(23) And caractere$ <> Chr(24) And caractere$ <> Chr(25) And caractere$ <> Chr(26) And caractere$ <> Chr(27) And caractere$ <> Chr(28) And caractere$ <> Chr(29) And caractere$ <> Chr(30) And caractere$ <> Chr(31) And caractere$ <> Chr(32) 

ProcedureReturn Mid(Chaine$, position_depart, position_fin - position_depart + 1)
EndProcedure

; ; Charger la dll pour que  le programme puisse l'utiliser
; 
; If OpenLibrary(1, "TrimInvisibleCharacter.dll")
;   CallFunction(1, "TrimInvisibleCharacter()")
;   CloseLibrary(1)
; EndIf

Re: Interpreteur

Publié : lun. 13/déc./2010 15:58
par dayvid
salut, je coinse un peut la

c'est pour supprimer les commentaires du code mais sans modifier le nombre de ligne
par exemple, sa remplace tous les commentaire par:

Code : Tout sélectionner

// un commentaire sur une ligne 
remplacer par "" pour ne pas suprimer la ligne de code

Code : Tout sélectionner

*/ un commentaire
sur plusieur ligne /*
"" pour ne pas suprimer la ligne de code
"" pour ne pas suprimer la ligne de code

Code : Tout sélectionner

ecrire "texte" // un commentaire sur une ligne 
remplacer par "ecrire "texte"

Code : Tout sélectionner

ecrire "texte" */ un commentaire
sur plusieur ligne /*
remplacer par:
"ecrire "texte"
"" pour ne pas suprimer la ligne de code

voici mon code mais je penjse que je m'y prends mal:

Code : Tout sélectionner

#EOL = Chr(13) + Chr(10) 
Commentaire = 0

Global NewList CodeBrut.s()
Global NewList CodeTraiter.s()

Procedure.s TrimInvisibleCharacter(Chaine$)
  
; ont enlève tous les caractère invisible en début et fin de ligne
position_depart = 0

; au début
Repeat
  position_depart + 1
  caractere$ = Mid(Chaine$, position_depart, 1)
Until caractere$ <> Chr(1) And caractere$ <> Chr(2) And caractere$ <> Chr(3) And caractere$ <> Chr(4) And caractere$ <> Chr(5) And caractere$ <> Chr(6) And caractere$ <> Chr(7) And caractere$ <> Chr(8) And caractere$ <> Chr(9) And caractere$ <> Chr(10) And caractere$ <> Chr(11) And caractere$ <> Chr(12) And caractere$ <> Chr(13) And caractere$ <> Chr(14) And caractere$ <> Chr(15) And caractere$ <> Chr(16) And caractere$ <> Chr(17) And caractere$ <> Chr(18) And caractere$ <> Chr(19) And caractere$ <> Chr(20) And caractere$ <> Chr(21) And caractere$ <> Chr(22) And caractere$ <> Chr(23) And caractere$ <> Chr(24) And caractere$ <> Chr(25) And caractere$ <> Chr(26) And caractere$ <> Chr(27) And caractere$ <> Chr(28) And caractere$ <> Chr(29) And caractere$ <> Chr(30) And caractere$ <> Chr(31) And caractere$ <> Chr(32) 

position_fin = Len(Chaine$) + 1

; a la fin
Repeat
  position_fin - 1
  caractere$ = Mid(Chaine$, position_fin, 1)
Until caractere$ = "" Or caractere$ <> Chr(1) And caractere$ <> Chr(2) And caractere$ <> Chr(3) And caractere$ <> Chr(4) And caractere$ <> Chr(5) And caractere$ <> Chr(6) And caractere$ <> Chr(7) And caractere$ <> Chr(8) And caractere$ <> Chr(9) And caractere$ <> Chr(10) And caractere$ <> Chr(11) And caractere$ <> Chr(12) And caractere$ <> Chr(13) And caractere$ <> Chr(14) And caractere$ <> Chr(15) And caractere$ <> Chr(16) And caractere$ <> Chr(17) And caractere$ <> Chr(18) And caractere$ <> Chr(19) And caractere$ <> Chr(20) And caractere$ <> Chr(21) And caractere$ <> Chr(22) And caractere$ <> Chr(23) And caractere$ <> Chr(24) And caractere$ <> Chr(25) And caractere$ <> Chr(26) And caractere$ <> Chr(27) And caractere$ <> Chr(28) And caractere$ <> Chr(29) And caractere$ <> Chr(30) And caractere$ <> Chr(31) And caractere$ <> Chr(32) 

ProcedureReturn Mid(Chaine$, position_depart, position_fin - position_depart + 1)
EndProcedure

Procedure Chargerfichier()
  FichierParDefaut$ = "code.txt"   ; Répertoire et fichier par défaut qui seront affichés
  ;  Avec la chaîne suivante nous allons définir les filtres ("|" comme séparateur) pour l'affichage de fichier :
  ;  1er  : "Texte (*.txt)" comme nom, ".txt" et ".bat" comme extension autorisée
  ;  2ème : "PureBasic (*.pb)" comme nom, ".pb" comme extension autorisée
  ;  3ème : "Tous les fichiers (*.*)" comme nom, "*.*" comme extension autorisée, valide pour tous les fichiers
  Filtre$ = "Texte (*.txt)|*.txt;*.bat|Tous les fichiers (*.*)|*.*"
  Filtre  = 0    ; utiliser  par défaut le premier des trois filtres possibles
  Fichier$ = OpenFileRequester("Choisissez un fichier à charger", FichierParDefaut$, Filtre$, Filtre)
  If Fichier$
    If ReadFile(1, Fichier$)  ; Si le fichier peut être lu , on continue...
    While Eof(1) = 0           ; Boucle tant que la fin du fichier n'est pas atteinte. (Eof = 'End Of File') 
      AddElement(CodeBrut())
      CodeBrut() = ReadString(1)
    Wend
    CloseFile(1)               ; Ferme le fichier précédemment ouvert
    FirstElement(CodeBrut())
  Else
    MessageRequester("Information","Impossible d'ouvrir le fichier !")
  EndIf

  Else
    
  EndIf 

EndProcedure

ProcedureDLL .s TrimComment(List.s, DebutCommentaire$, FinCommentaire$, CommentaireUnique$)
  FirstElement(CodeBrut())
  ClearList(CodeTraiter())
  
  ForEach CodeBrut()
    If ListIndex(CodeBrut()) > 0
      Ligne = ListIndex(CodeBrut())
    Else
      Ligne = 1
    EndIf
    
    LigneDeCode$ = ReplaceString(CodeBrut(), Chr(32), "")
    Commentaire$ = CommentaireUnique$
    If LigneDeCode$ > ""
    For RechercheCommentaire = 1 To Len(LigneDeCode$)
      RechercheCommentaire$ = Mid(LigneDeCode$, RechercheCommentaire, Len(Commentaire$)) ; je vais extraire X caractère a la suite, X = nombre de caractère dans CommentaireUnique$
      If DebutCommentaire = 0 ; si on as pas déjà trouvé un DebutCommentaire$ sur la ligne
        If RechercheCommentaire$ = CommentaireUnique$ ; si tout les caractères extrait correspondent a ceux de CommentaireUnique$, j'ai trouvé un commentaire sur une ligne
          ; j'éfface le commentaire, c'est a dire tous caractère a partir de CommentaireUnique$
          Debug "j'ai trouvé un commantaire unique: " + Mid(LigneDeCode$, FindString(LigneDeCode$, CommentaireUnique$, RechercheCommentaire)) + ", ligne " + Str(Ligne)
          AddElement(CodeTraiter())
          CodeTraiter() = Mid(LigneDeCode$, 1, RechercheCommentaire - 1)
          Break ; on as fini de traité cette ligne donc on passe a la suivente directement
          
        Else
          Commentaire$ = DebutCommentaire$
          RechercheCommentaire$ = Mid(LigneDeCode$, RechercheCommentaire, Len(Commentaire$)) ; je vais extraire X caractère a la suite, X = nombre de caractère dans DebutCommentaire$
          
          If RechercheCommentaire$ = DebutCommentaire$ ; sinon si tout les caractères extrait correspondent a ceux de DebutCommentaire$, j'ai trouvé un debut de commentaire sur une ou plusieur ligne
            ; j'éfface le commentaire, c'est a dire tous caractère a partir de DebutCommentaire$ jusqu'à FinCommentaire$ si il existe sur cette ligne sinon ont éfface entierement le reste de la ligne
            ; et recherche FinCommentaire$ sur la ligne suivente
            If Not FindString(LigneDeCode$, FinCommentaire$, FindString(LigneDeCode$, DebutCommentaire$, 1) + Len(DebutCommentaire$)) ; si on ne trouve pas FinCommentaire$ sur cette ligne
              Debug "j'ai trouvé que un début de commantaire: " + Mid(LigneDeCode$, FindString(LigneDeCode$, DebutCommentaire$, 1) - 1) + ", ligne " + Str(Ligne)
              AddElement(CodeTraiter())
              CodeTraiter() = Mid(LigneDeCode$, 1, FindString(LigneDeCode$, DebutCommentaire$, 1) - 1)
              DebutCommentaire = 1
              Break ; on ne l'as pas trouvé alors on passe a la ligne suivente
            Else
              FinCommentaire = FindString(LigneDeCode$, FinCommentaire$, FindString(LigneDeCode$, DebutCommentaire$, 1) + Len(DebutCommentaire$))
              Debug "j'ai trouvé un commantaire sur une seulle ligne: " + Mid(LigneDeCode$, FindString(LigneDeCode$, DebutCommentaire$, 1) - 1, FinCommentaire - FindString(LigneDeCode$, DebutCommentaire$, 1) + 2) + ", ligne " + Str(Ligne)
              DebutCommentaire = 0
              AddElement(CodeTraiter())
              CodeTraiter() = Mid(LigneDeCode$, 1, FindString(LigneDeCode$, DebutCommentaire$, 1) - 1) + Mid(LigneDeCode$, FinCommentaire + Len(FinCommentaire$))
            EndIf
            
          Else ; il n'y as aucun commentaire sur cette ligne
            Debug "pas trouvé de commentaire, ligne " + Str(Ligne)
            AddElement(CodeTraiter())
            CodeTraiter() = ""
            Break
          EndIf
          
        EndIf
        
      ElseIf DebutCommentaire = 1 ; sinon je vais rechercher FinCommentaire$ sur la ligne
        If FindString(LigneDeCode$, FinCommentaire$, 1)
          FinCommentaire = FindString(LigneDeCode$, FinCommentaire$, 1)
          Debug "j'ai trouvé une fin de commantaire: " + Mid(LigneDeCode$, 1) + ", ligne " + Str(Ligne)
          DebutCommentaire = 0
          AddElement(CodeTraiter())
          CodeTraiter() = Mid(LigneDeCode$, FinCommentaire + Len(FinCommentaire$))
        Else
          ; DebutCommentaire est toujours = à 1
          Break ; si on ne l'a toujours pas trouvé sur cette ligne, c'est que le commentaire n'est pas encore terminer donc ont passe a la ligne suivente
        EndIf
        
      EndIf
    Next
    
  Else
    
  EndIf
  Next CodeBrut()
  
  ForEach CodeTraiter()
      Debug CodeTraiter()
  Next CodeTraiter()
  
EndProcedure

Chargerfichier()

TrimComment(CodeBrut(), "*/", "/*", "//")

Re: Interpreteur

Publié : lun. 13/déc./2010 20:40
par Demivec
Salut dayvid, parce que TrimInvisibleCharacter() ce serait plus simple:

Code : Tout sélectionner

Procedure.s TrimInvisibleCharacter(Chaine$)
  
  ; ont enlève tous les caractère invisible en début et fin de ligne
  position_depart = 0
  
  ; au début
  Repeat
    position_depart + 1
    caractere = Asc(Mid(Chaine$, position_depart, 1))
  Until caractere = 0 Or caractere > 32
  
  position_fin = Len(Chaine$) + 1
  
  ; a la fin
  Repeat
    position_fin - 1
    caractere = Asc(Mid(Chaine$, position_fin, 1))
  Until caractere = 0 Or caractere > 32 Or position_fin < position_depart
  
  ProcedureReturn Mid(Chaine$, position_depart, position_fin - position_depart + 1)
EndProcedure

Re: Interpreteur

Publié : mer. 15/déc./2010 14:43
par dayvid
A oui c'est bien plus court comme ça :D
merci bien demivec :wink:

Sinon je suis parvenue a faire une commande complètte pour enlever les commentaires
et a ma surprise sa marche plutôt superbe bien :D

Si ce n'est quand même un pitit problème de rien du tous
mais qui a son importance quand même:

Code : Tout sélectionner

#EOL = Chr(13) + Chr(10) 
Commentaire = 0

Global NewList CodeBrut.s()
Global NewList CodeTraiter.s()

Procedure Chargerfichier()
  FichierParDefaut$ = "code.txt"   ; Répertoire et fichier par défaut qui seront affichés
  ;  Avec la chaîne suivante nous allons définir les filtres ("|" comme séparateur) pour l'affichage de fichier :
  ;  1er  : "Texte (*.txt)" comme nom, ".txt" et ".bat" comme extension autorisée
  ;  2ème : "PureBasic (*.pb)" comme nom, ".pb" comme extension autorisée
  ;  3ème : "Tous les fichiers (*.*)" comme nom, "*.*" comme extension autorisée, valide pour tous les fichiers
  Filtre$ = "Texte (*.txt)|*.txt;*.bat|Tous les fichiers (*.*)|*.*"
  Filtre  = 0    ; utiliser  par défaut le premier des trois filtres possibles
  Fichier$ = OpenFileRequester("Choisissez un fichier à charger", FichierParDefaut$, Filtre$, Filtre)
  If Fichier$
    If ReadFile(1, Fichier$)  ; Si le fichier peut être lu , on continue...
      While Eof(1) = 0           ; Boucle tant que la fin du fichier n'est pas atteinte. (Eof = 'End Of File') 
        AddElement(CodeBrut())
        CodeBrut() = ReadString(1)
      Wend
      CloseFile(1)               ; Ferme le fichier précédemment ouvert
      FirstElement(CodeBrut())
    Else
      MessageRequester("Information","Impossible d'ouvrir le fichier !")
    EndIf
    
  Else
    
  EndIf 
  
EndProcedure

ProcedureDLL .s TrimComment(List.s, CommentaireUnique$, DebutCommentaire$, FinCommentaire$, DebutChaine$, FinChaine$)
  FirstElement(CodeBrut())
  ClearList(CodeTraiter())
  
  Interupteur$ = "On"
  
  Positionextraction = 0
  
  PremierCaractereCommentaireUnique$ = Mid(CommentaireUnique$, 1, 1)
  NombreCaractereCommentaireUnique = Len(CommentaireUnique$)
  
  PremierCaractereDebutCommentaire$ = Mid(DebutCommentaire$, 1, 1)
  NombreCaractereDebutCommentaire = Len(DebutCommentaire$)
  
  PremierCaractereFinCommentaire$ = Mid(FinCommentaire$, 1, 1)
  NombreCaractereFinCommentaire = Len(FinCommentaire$)
  
  PremierCaractereDebutChaine$ = Mid(DebutChaine$, 1, 1)
  NombreCaractereDebutChaine = Len(DebutChaine$)
  
  PremierCaractereFinChaine$ = Mid(FinChaine$, 1, 1)
  NombreCaractereFinChaine = Len(FinChaine$)
  
  ForEach CodeBrut()
    
    ; on va extraire chaque caractère de la ligne de code jusqu'a rencontrer un caractère bien spécifique
    ; et sous certaine condition on va les mémoriser de sorte a ne prendre en compte uniquement que
    ; les ligne de code et non les commentaire qu'il soit sur une ou plusieur ligne
    
    ligne + 1
    Positionextraction = 0
    autorisation = 1
    
    If DebutCommentaire = 0
      BufferLigneDeCode$ = ""
      Interupteur$ = "On"
    EndIf
    
    For TraitementCommentaire = 1 To Len(CodeBrut()) ; je commence l'oppération en partent du début jusqu'a la fin de la ligne de code
      Positionextraction + 1
      
      Caractere$ = Mid(CodeBrut(), Positionextraction, 1) ; j'éxtrait un par un chaque cacartère de la ligne de code
      
      If Interupteur$ = "On" ; va servire si ya plusieurs commentaire sur la même ligne, ceci est un selecteur
        ; On = on prend en compte le caractère
        ; Off on ne prend pas en compte le caractère
        ; des que on trouvera un commentaire, le comutateur ce metra sur Off
        ; pour ne pas prendre en compte les commentaires
        
        BufferLigneDeCode$ + Caractere$
        
        If Caractere$ = PremierCaractereCommentaireUnique$ And DebutChaineDeCaractere = 0
          ; je vais extraire dans la ligne de code le nombre de caractère = à NombreCaractereCommentaireUnique
          Buffer$ = Mid(CodeBrut(), Positionextraction, NombreCaractereCommentaireUnique)
          
          ; si tous les caractère extrait sont identique a CommentaireUnique$
          If Buffer$ = CommentaireUnique$
            ; ont as trouvé un commentaire unique
            Debug "à trouvé un commentaire unique a la ligne " + Str(ligne)  + ", à la position " +Str(Positionextraction); on met une petite info sur le traitement de la ligne en court, comme sa on s'y retrouvara mieux dans le code
            
            ; je met une autorisation car si on as déjà trouvé un commentaire sur la ligne sa change tous
            If autorisation = 1
              BufferLigneDeCode$ = Mid(CodeBrut(), 1, Positionextraction)
              ; j'enlève le caractère de debut de commentaire
              BufferLigneDeCode$ = Mid(BufferLigneDeCode$, 1, Len(BufferLigneDeCode$) - 1)
            EndIf
            
            Break ; on igniore le restant de la ligne et on passe a la suivente
            
          Else ; sinon on continue
            Continue
          EndIf
          
        ElseIf Caractere$ = PremierCaractereDebutCommentaire$  And DebutChaineDeCaractere = 0
          ; je vais extraire dans la ligne de code le nombre de caractère = à NombreCaractereDebutCommentaire
          Buffer$ = Mid(CodeBrut(), Positionextraction, NombreCaractereDebutCommentaire)
          
          ; si tous les caractère extrait sont identique a DebutCommentaire$
          If Buffer$ = DebutCommentaire$
            ; ont as trouvé un debut de commentaire
            Debug "à trouvé un debut de commentaire a la ligne " + Str(ligne) + ", à la position " +Str(Positionextraction) ; on met une petite info sur le traitement de la ligne en court, comme sa on s'y retrouvara mieux dans le code
            Interupteur$ = "Off"
            ; j'enlève le caractère de debut de commentaire
            BufferLigneDeCode$ = Mid(BufferLigneDeCode$, 1, Len(BufferLigneDeCode$))
            DebutCommentaire = 1
            Positionextraction + Len(DebutCommentaire$)
          
          EndIf
          
        ElseIf Caractere$ = PremierCaractereDebutChaine$
          ; je vais extraire dans la ligne de code le nombre de caractère = à NombreCaractereDebutChaine
          Buffer$ = Mid(CodeBrut(), Positionextraction, NombreCaractereDebutChaine)
          
          ; si tous les caractère extrait sont identique a DebutChaine$
          If Buffer$ = DebutChaine$
            ; ont as trouvé un debut de chaine de caractère
            Debug "à trouvé un debut de chaine de caractère a la ligne " + Str(ligne) + ", à la position " +Str(Positionextraction) ; on met une petite info sur le traitement de la ligne en court, comme sa on s'y retrouvara mieux dans le code
            ; on ne met pas Interupteur$ à Off car on garde bien la ligne puisque ce n'est pas un commentaire mais une chaine de caractère
            If FindString(CodeBrut(), FinChaine$,Positionextraction + Len(DebutChaine$)) ; si on trouve bien sur la ligne de code FinChaine$
              ; tous va bien, la chaine de caractère est correcte, on est obliger de vérrifier cella ou sinon on s'y perdrait
              DebutChaineDeCaractere = 1
              AddElement = 1
            Else
              ; il y as une erreur de syntaxe dans la ligne de code, les caractères de fin de chaine sont introuvable
              MessageRequester("Erreur de syntax", "Chaine de caractère non tèrminer a la ligne " + Str(ligne), 16)
              End ; on interon le programme car on ne peut pas continuer puisque il y a une erreur de code
            EndIf
          EndIf
          
        ElseIf Caractere$ = PremierCaractereFinChaine$
          ; je vais extraire dans la ligne de code le nombre de caractère = à NombreCaractereFinChaine
          Buffer$ = Mid(CodeBrut(), Positionextraction, NombreCaractereFinChaine)
          
          ; si tous les caractère extrait sont identique a FinChaine$
          If Buffer$ = FinChaine$
            ; ont as trouvé une fin de chaine de caractère
            Debug "à trouvé une fin de chaine de caractère a la ligne " + Str(ligne) + ", à la position " +Str(Positionextraction) ; on met une petite info sur le traitement de la ligne en court, comme sa on s'y retrouvara mieux dans le code
            DebutChaineDeCaractere = 0
            AddElement = 0
          EndIf
          
          
        EndIf
        
      ElseIf Interupteur$ = "Off" ; a partir d'ici, on ne prends plus en compte aucun caractère
        
        If DebutCommentaire = 1 And Positionextraction = Len(CodeBrut()) ; par exemple si il y as un début de commentaire sur la ligne mais que c'elle-ci n'est pas terminer sur cette même ligne
          ; et que on est a la fin de la ligne, sa veut dire que la suite du commentaire ce trouve sur la ligne suivente, donc on ajoute une ligne vide correspondent a cette prochaine ligne
          AjoueLignevide = 1
        EndIf
        
          ; ne prend pas en compte le carectère
          If Caractere$ = PremierCaractereFinCommentaire$
            ; je vais extraire dans la ligne de code le nombre de caractère = à NombreCaractereFinCommentaire
            ; je vais extraire dans la ligne de code le nombre de caractère = à NombreCaractereFinCommentaire
            Buffer$ = Mid(CodeBrut(), Positionextraction, NombreCaractereFinCommentaire)
            
            ; si tous les caractère extrait sont identique a FinCommentaire$
            If Buffer$ = FinCommentaire$
              ; ont as trouvé un commentaire de fin
              Debug "à trouvé une fin de commentaire a la ligne " + Str(ligne)  + ", à la position " +Str(Positionextraction); on met une petite info sur le traitement de la ligne en court, comme sa on s'y retrouvara mieux dans le code
              Interupteur$ = "On"
              autorisation = 0
              ; j'enlève le caractère de fin de commentaire
              BufferLigneDeCode$ = Mid(BufferLigneDeCode$, 1, Len(BufferLigneDeCode$) - 1)
              Positionextraction + Len(FinCommentaire$)
              TraitementCommentaire = Positionextraction
              DebutCommentaire = 0
              AddElement = 0
            Else ; sinon on continue
              Continue
            EndIf
            
          ElseIf Caractere$ = PremierCaractereFinChaine$
            
          Else ; sinon on continue
            AddElement = 1
            Continue
          EndIf
          
        Else
          
        EndIf
        
    Next
    
    If AddElement = 0
      
      If autorisation = 0 And FindString(BufferLigneDeCode$, "/", Len(BufferLigneDeCode$) - 1)
        ; j'enlève le caractère de debut de commentaire
        BufferLigneDeCode$ = Mid(BufferLigneDeCode$, 1, Len(BufferLigneDeCode$) - 1)
      EndIf
      
      AddElement(CodeTraiter())
      CodeTraiter() = BufferLigneDeCode$
      
      If AjoueLignevide = 1
        AddElement(CodeTraiter())
        CodeTraiter() = ""
        AjoueLignevide = 0
        Debug "a ajouté une ligne vide a la ligne " + Str(ligne)
      EndIf
      
    EndIf
  
  Next CodeBrut()
  
  ForEach CodeTraiter()
    Debug CodeTraiter()
  Next CodeTraiter()
  
EndProcedure

Chargerfichier()

TrimComment(CodeBrut(), "//", "*/", "/*", "{" + Chr(34), Chr(34) + "}")

Bon mince, j'ai oublier mon code txt d'éxemple
mais en gros mettez ceci:

ecrire {"texte"} */ un commentaire sur une ligne /* 1 */ un commentaire sur une ligne /* 2 */ un commentaire sur une ligne /* 3
*/ un commentaire sur une ligne /* A */ un commentaire sur une ligne /* B */ un commentaire sur une ligne /* 4
*/ un commentaire sur une ligne /* C */ un commentaire sur une ligne /* D */ un commentaire sur une ligne /* 5
*/ un commentaire sur une ligne /* E */ un commentaire sur une ligne /* F */ un commentaire sur une ligne /* 6
*/ un commentaire sur une ligne /* G */ un commentaire sur une ligne /* H */ un commentaire sur une ligne /* 7
*/ un commentaire sur une ligne /* I */ un commentaire sur une ligne /* J */ un commentaire sur une ligne /* 8

Normallement, il devrais apparaitre:

ecrire {"texte"} 1 2 3
A B 4
C D 5
E F 6
G H 7
I J 8

Mais tout apparais sur une seulle ligne, ce qui pose gros problème
le problème va être pour débuguer le code car le nombre de ligne doit être identique a l'originale vous comprennez ?

Voila à par ça, j'ai réussi à faire ce que je voulais par je ne sais quel miracle :mrgreen:

Re: Interpreteur

Publié : ven. 17/déc./2010 16:25
par dayvid
Salut a tous :D

Voilà j'ai continuer et est pas mal avencer de mon coté
et je suis très fier de vous montrer mon travail:

http://www.archive-host.com/files/73303 ... erprete.7z

Re: Interpreteur

Publié : ven. 17/déc./2010 16:44
par Warkering
Je vais voir ce que cela donne dans le courant de la journée et je t'en reparle. :wink:

Re: Interpreteur

Publié : ven. 17/déc./2010 16:48
par dayvid
Merci, j'ai beaucoup travailler pour en arriver la, j'ai essayer d'organiser au mieux mon code
et de mettre pas mal de commentaire pour expliquer ce que je fait

Je vais bien finir par y arriver un jour :D

Re: Interpreteur

Publié : sam. 18/déc./2010 15:03
par dayvid
Salut !

Warkering tu m'as pas recontacter, dommage !
bon c'est pas grave de toute façon j'avais oublier des choses
essaye ça sa marche très bien, j'ai pas fini mais déjà c pas mal :D

http://www.archive-host.com/files/73469 ... ete_104.7z

Re: Interpreteur

Publié : sam. 18/déc./2010 20:58
par Warkering
Désolé, J'ai pas eu le temps! J'ai écris cela lorsque je ne savais pas encore que l'on partait faire le plein de bouffe et de cadeaux pour les fêtes! :lol:
Présentement, je viens de me lever. Donc je ne suis pas en état de regarder ça, mais je te promet que je regarde ça ensuite! :wink:

Re: Interpreteur

Publié : dim. 19/déc./2010 0:40
par Warkering
Il me semble que tu te complique la tâche sur plusieurs points. Par exemple, pour les commentaires, je n'aurais fais qu'une simple boucle principale parcourant le texte caractère par caractère qui, chaque fois qu'elle tombe sur un ';', supprime le restant de la ligne. Ou bien si elle tombe sur un '*' vérifie si le prochain caractère est bien '/' pour ensuite tomber dans une seconde boucle qui supprime tous les caractères qu'elle rencontre sauf si elle tombe sur un '/'. Si c'est le cas, elle vérifie si le prochain caractère est bien '*' et sort de la boucle si c'est le cas, sinon elle continue de supprimer. Etc.
Le tout bien sûr si elle n'est pas dans une chaîne de caractère! :)
Vérifie bien le tout et regarde du côté de tes boucle. Je ne suis pas sûr qu'un «Repeat» est bien sa place dans le début du fichier KillSpaceLines. Un «While» serait beaucoup mieux, car dans ta boucle à toi, tu lis un caractère de trop dans ta chaîne, ce qui peut être source de problème dans certains cas.
Mais bon, belle job quand même! Lâche pas! :wink:

Re: Interpreteur

Publié : ven. 24/déc./2010 14:59
par dayvid
merci :) , je bosse dur tu sais 8)

peut tu me faire ce que tu vien de dire ?

oui tu modifie mon code et fait comme ta dit pour que je puisse voir a quoi sa va resembler (oui quand tu pourra sa va de soie et si tu veut bien)
quoi qui en soit je vais te dire que ce n'est pas la premier fois que je fait ce genre de truc mais plus je recommence
et plus je m'améliore, nan sans blague, la sa commence vraiment a me plaire tu sais :)

a plus, et si sa tinteresse de m'aider t'es le bienvenue :D
a plus

Re: Interpreteur

Publié : lun. 27/déc./2010 14:40
par Ollivier
dayvid a écrit :merci :) , je bosse dur tu sais 8)

peut tu me faire ce que tu vien de dire ?

oui tu modifie mon code et fait comme ta dit pour que je puisse voir a quoi sa va resembler (oui quand tu pourra sa va de soie et si tu veut bien)
quoi qui en soit je vais te dire que ce n'est pas la premier fois que je fait ce genre de truc mais plus je recommence
et plus je m'améliore, nan sans blague, la sa commence vraiment a me plaire tu sais :)

a plus, et si sa tinteresse de m'aider t'es le bienvenue :D
a plus
« peut tu me faire ce que tu vien de dire ? »
s'écrit plutôt
« Peux-tu me faire ce que tu viens de dire ? »

Code : Tout sélectionner

je peux        je viens
tu peux        tu viens
il peut        il vient
nous pouvons   nous venons
vous pouvez    vous venez
ils peuvent    ils viennent

Re: Interpreteur

Publié : mar. 28/déc./2010 16:34
par dayvid
Ah oui merci olivier, je n'est pas fait gaffe :)

Re: Interpreteur

Publié : mar. 28/déc./2010 20:32
par SPH
Les discutions avec ce cher dayvid, c'est toujours lolant :mrgreen: