A oui c'est bien plus court comme ça
merci bien demivec
Sinon je suis parvenue a faire une commande complètte pour enlever les commentaires
et a ma surprise sa marche plutôt superbe bien
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
