Page 5 sur 6

Re: Epb v2.68

Publié : mar. 11/juin/2019 8:13
par Micoute
Merci Zorro pour ces nouvelles rassurantes.

Re: Epb v2.68

Publié : dim. 16/juin/2019 8:59
par Zorro
(apres effacement de mes gif animé par un modo, qui a du se dire qu'elles etaient trop grosses ... je me disait qu'aujourd'hui tout le monde a au mini 1920x1080 ... mais j'oubliais les telephones portable et autre tablette bas de game)

j'ai moi meme effacé mes messages... je me suis rendu compte que j'exprimais mal le probleme ....

en fait le challenge , c'est pas de trouver la position d'un mot "procedure" et son numero de ligne , qui avec findstring() ne prends
pas trop de temps ...

le probleme c'est de trouver TOUTES les occurences de Procedure , avec les numero de lignes ou ils apparaissent

et l'air de rien , sur un code de 9000 lignes , ben ça peut prendre beaucoup plus de temps ;)

si en plus on considere, qu'il faut ranger dans une liste (ou tableau) le nom de la procedure , et le numero de ligne
donc , qu'a chaque fois qu'on trouve une occurence, il faut effectuer un traitement particulier d'analyse de la ligne
de la séparation de celle-ci en "morceaux" pour etre attribué a une liste ou tableau ... là , les quelque milliseconde de recherche par occurence trouvée
se transforme en secondes pour un texte complet .....



l'editeur officiel doit utiliser une subtilité de scintilla que j'ignore , j'imagine une forme de tag , invisible , soit au niveau du contenu de la ligne
la mise a jour de l'onglet de droite que ce soit pour une procedure, ou un signet, est quasi instantané , quelque soit la taille du listing !!
je n'imagine meme pas qu'il utilise un systeme de recherche ... c'est trop rapide ...

de plus, moi j'utilise dans mon onglet le numero de la ligne, pour pouvoir sauter dessus lorsqu'on clique sur l'onglet de droite ....
l'editeur officiel, lui n'affiche aucun numero de ligne dans cet onglet ... donc, comment ferai t'il son "saut" a la bonne ligne,
si le numero de ligne n'est pas retenu quelque part ?? ....

mon systeme marche tres bien sur de petits listings
l'editeur officiel , lui fait un tour de magie !! LOL que franchement je ne comprends pas 8O
(a moins d'une fonction scintilla special ? .. )

Re: Epb v2.68

Publié : dim. 16/juin/2019 10:41
par Zorro
merci , je vais regarder ta technique :)

Re: Epb v2.68

Publié : dim. 16/juin/2019 10:56
par Zorro
oui effectivement, c'est super rapide ...

faut que je regarde ces expressions regulieres... 8O

faut que j'isole nom de procedure + parametre (avec parenthese) -->nom_procedure(par,par,..ect ), <-- pour la completion
et aussi juste le nom de procedure sans parenthese et parametre <--- pour l'onglet
si en plus j'avais le numero de ligne...ça m'arrangerai bien <--- pour les sauts plus tard...et puis j'aime bien les avoir dans l'onglet

je vais faire mes propres recherches ;) ... je n'attends pas un code tout cuit :lol:

en tout cas, merci bien, tu vas peut etre , etre a l'origine de la reprise de EPB :) carrement ça me debloque...

j'aime bien travailler sur les Chaines, mais a l'ancienne (mid() Left() right() findstring() etc ... ) les expression regulieres, je ne maitrise pas :)

ps: a ta santé (avec la meilleurs bierre du monde ! ); Image

Re: Epb v2.68

Publié : dim. 16/juin/2019 14:41
par Zorro
arf!! j'etais tout fier de te montrer mon complement du regex
pour avoir la procedure complete :mrgreen:

Code : Tout sélectionner

If Not CreateRegularExpression(0, "\bprocedure[ .]{1,}[a-zA-Z_0-9-\(.\)-,-$-*- ]+", #PB_RegularExpression_NoCase)
vais tester ton code . Merci :)

Re: Epb v2.68

Publié : dim. 16/juin/2019 15:02
par Zorro
oui je prends aussi le type , puisque ceci sera pour les completions ...

regarde j'apprends vite :)

j'ai repris ton premier code , et je rajoute le numero de ligne ;)

grace a toi je pense que EPB va prendre un coup de turbo :)

Code : Tout sélectionner

; Mémorisation fichier de test (code pb 9800 lignes 127 procedures)


CallDebugger
file.s=OpenFileRequester("ouvre un pb","d:\","*.pb",0) 
If file.s<>""

Debug "Lecture Fichier source en cours..."
ReadFile(0,file.s)
Deb = ElapsedMilliseconds()
While Not Eof(0)
    Txt$ = ReadString(0, #PB_File_IgnoreEOL)
Wend   
CloseFile(0)
Fin = ElapsedMilliseconds()
Debug "Lecture Terminée. (" + Str(Fin - Deb) + " ms)"
Else
	End
EndIf

; Analyse
If Not CreateRegularExpression(0, "\bprocedure[ .]{1,}[a-zA-Z_0-9-\(.\)-,-$-*- ]+", #PB_RegularExpression_NoCase)
    Debug RegularExpressionError()
    End
EndIf

Debug "Analyse..."
Deb = ElapsedMilliseconds()

If ExamineRegularExpression(0, Txt$)
	Debug "--- Resultat"
	While NextRegularExpressionMatch(0)
		i + 1
		pos_procedure=RegularExpressionMatchPosition(0)
		Debug "Offset: " + LSet(Str(RegularExpressionMatchPosition(0)), 8, " ") + " - " +RegularExpressionMatchString(0) +"ligne numero:"+CountString(Left(Txt$,pos_procedure), #CRLF$) + 1
	Wend   
EndIf
Debug ""

Fin = ElapsedMilliseconds()
Debug "Analyse Terminée. (" + Str(Fin - Deb) + " ms) " + Str(i) + " Procédures"

Re: Epb v2.68

Publié : dim. 16/juin/2019 15:04
par Zorro
merci encore :)

je vais faire ensuite l'adaptation pour les signets
(lignes commençant par ";-" ou ";{" ou ";{-" )



et aussi les constantes (le plus simple ) lignes commençant par "#" :)

mais là , c'est Dimanche , je vais m'arreter là :)

bon Dimanche a toi , (et a ceux qui lisent ) a+++ :)

ps: pour le type c'est pas trop grave , un traitement finale a base de Stringfield() ne prends pas beaucoup de temps
le plus long etant bien la recherche , et grace au regex , ben ... ça le fait , je pense :)

Re: Epb v2.68

Publié : dim. 16/juin/2019 17:19
par Ollivier
@marc56

Il y a PeDe qui est à 450MHz ici. Est-ce que tu pourrais préciser à quelle vitesse tourne ton petit i3, et avec combien de coeurs?

@zorro

J'ai vu ton message hier et, à part ignorer que c'était un GIF, ton message était des plus orthodoxes. Perso, juste pas le temps d'y répondre. Quasiment comme maintenant d'ailleurs.

Re: Epb v2.68

Publié : mar. 18/juin/2019 0:13
par Zorro
Marc56 a écrit :je vais faire ensuite l'adaptation pour les signets, (lignes commençant par ";-" ou ";{" ou ";{-" )


je coince justement la dessus en ce moment , j'ai testé sur des sites online
par exemple celui ci
https://regex101.com/

si je met "^;(\{|\-).+" en regex pour ce texte : ça marche !! . mais dans Purebasic, ça ne marche plus !??
;- test 1
;{ test 2
; simple commentaire 2
;}
;{- test 3
; simple commentaire 3
;}
resultat :

Image


du coup, je suis pas sur que purebasic interprete les regex comme il faut ...

Re: Epb v2.68

Publié : mar. 18/juin/2019 0:47
par Zorro
si ça marche , a condition d'ajouter le multiligne …

Code : Tout sélectionner

If Not CreateRegularExpression(1,  "^;(\{|\-).+", #PB_RegularExpression_NoCase|#PB_RegularExpression_MultiLine)

Re: Epb v2.68

Publié : mar. 18/juin/2019 8:43
par Zorro
je te remercie pour les infos concernants les regex
je voulais juste que tu saches que je ne me sert absolument pas de tes exemples concernant Scintilla
EPB etant fait de façon différente... je ne pourrai de toute façons pas greffer tes exemples...
donc peut etre eu t'il fallu que tu post ces superbes exemple dans un topic dédie ou mieux, a la suite du tuto de Falsam
sur Scintilla ... :)

pour tes premières remarques
Marc56 a écrit :Ton "^;(\{|\-).+" peut s'écrire plus simplement "^;[-{].+"
Les caractères dans les classes [] n'ont pas besoin d'êtres "échappées" \ (saut ])
[-{] suffit
oui , je le savais , note que j'utilise un groupe () et pas une classe []....
et j'ai vu pléthore d'exemples sur le net qui échappent dans les groupes... alors dans le doute ...;)
Les procédures et commentaires ne sont pas forcement en début de ligne, je propose donc
"\s?;[-{].+"
Ici je traite uniquement d'éventuels espaces ou tab à gauche.
les Signets ne sont pas des commentaires ordinaire, ils ne peuvent pas etre ailleurs qu'au debut d'une ligne !!

les procedures c'est la meme chose, ont les ecrit toujours en debut de lignes (dans EPB,je considère qu'une tabulation est un debut de ligne ;) )
en principe seul les declaration des procedure m'interresse ... donc elles sont ecrite en debut de ligne :)



dans EPB , je filtre de toutes façons les espaces et les Tab (Trim() )
les regex ne me servent qu'a trouver le mot...(et c'est deja énorme le gain de temp)
le traitement, je le fait avec les fonctions string de Purebasic .....

si j'avais a refaire un éditeur a partir de zero , ce serai bien différent ... là je compose avec la librairie "Go-Scintilla"
qui m'apporte une simplicité de codage, mais aussi beaucoup de lenteurs parfois ...
si c'etait a refaire, je ne passerai pas par cette librairie ....

d'ailleurs, il me reste de grosse lenteurs, il faut que j'arrive a trouver d'ou ça viens ....
j'ai un gros soupçon concernant les complétions de Go-scintilla .... :)

ps: j'ai testé
"\s?;[-{].+"
sur le site https://regex101.com/
je ne suis pas convaincu ....

voici ce que le site me renvoi c(regarder les sélections en bleu )
Image

voici ce que j’obtiens avec mon regex
Image

Re: Epb v2.68

Publié : mar. 18/juin/2019 13:37
par Zorro
je sais pas pourquoi, mais je sent que ça te motive a faire ton propre editeur :lol:

Re: Epb v2.68

Publié : mer. 19/juin/2019 21:44
par Ollivier
Moi, ces machins-là, Scintilla et RegEx, c'est comme la pipe : c'est pas pour moi.

Re: Epb v2.68

Publié : sam. 22/juin/2019 0:57
par Ollivier
Olliv a écrit :@marc56
Il y a PeDe qui est à 450MHz ici. Est-ce que tu pourrais préciser à quelle vitesse tourne ton petit i3, et avec combien de coeurs?
Prévenez s'il vous plaît quand vous supprimez un message sinon le sujet n'a ni queue ni tête. Tu avais donc indiqué que tu mettais ta config dans ta dignature.

Donc, en gros, PeDe a un engin 4 fois moins rapide que ton << petit i3 >> qui est déjà à 450 MHz. De souvenir, je suis passé d'un 33MHz à un 450 MHz. On peut vraiment faire un paquet de choses impossibles avec un 33 MHz. C'est une chance de pouvoir faire tourner des programmes sur d'anciennes config sans prise de tête d'adaptation.

Re: Epb v2.68

Publié : sam. 22/juin/2019 9:24
par Marc56
Ollivier a écrit : Il y a PeDe qui est à 450MHz ici. Est-ce que tu pourrais préciser à quelle vitesse tourne ton petit i3, et avec combien de coeurs?

Prévenez s'il vous plaît quand vous supprimez un message sinon le sujet n'a ni queue ni tête. Tu avais donc indiqué que tu mettais ta config dans ta dignature.
Donc, en gros, PeDe a un engin 4 fois moins rapide que ton << petit i3 >> qui est déjà à 450 MHz. De souvenir, je suis passé d'un 33MHz à un 450 MHz. On peut vraiment faire un paquet de choses impossibles avec un 33 MHz. C'est une chance de pouvoir faire tourner des programmes sur d'anciennes config sans prise de tête d'adaptation.
1. J'ai prévenu que je déplaçais mes exemples pour ne pas polluer le topic de zorro. Les articles ont ensuite été supprimés dans la journée pour garder le topic propre (j'approuve ce nettoyage)
2. Il n'y a plus grand monde pour utiliser des vieux coucous et encore moins développer dessus. Ma mini tour i3 m'avait coûté en 2012 le prix d'une smartphone ou tablette moyenne gamme (299€ (UC seule neuve)) pour ça: Intel i3-3220 @3.30 GHz, 2 coeurs, 4 threads - RAM 16 Go (dont 8 ajouté pour qqs euros) - Nvidia GT 620 1920x1080 DPI 100%.

(Allègement du cloud et recentrage topic: Un modo pourra aussi supprimer cet article après le weekend par exemple)
:)