FORUM DE DISCUSSION SUR LE LANGAGE PANORAMIC

Développement d'applications avec le langage Panoramic
 
AccueilAccueil  FAQFAQ  RechercherRechercher  S'enregistrerS'enregistrer  MembresMembres  GroupesGroupes  Connexion  
Derniers sujets
» Planétarium virtuel.
par Pedro Alvarez Aujourd'hui à 8:41

» Biomorphe de Pickover
par Jack Aujourd'hui à 7:17

» PanExpress : l'éditeur Panoramic avec création d'objet
par Minibug Aujourd'hui à 0:59

» Virus/Antivirus
par JL35 Hier à 21:11

» Calculatrice
par papydall Ven 21 Sep 2018 - 22:45

» Orbites de l’ensemble de Mandelbrot
par Minibug Ven 21 Sep 2018 - 21:32

» Demande pour Jack concernant PanExpress
par Minibug Ven 21 Sep 2018 - 11:04

» EPP_V01 éditeur pour Panoramic
par Minibug Mer 19 Sep 2018 - 21:03

» [RESOLU] Quelle ligne est sélectionnée dans SYNEDIT ?
par Jean Claude Mer 19 Sep 2018 - 21:02

» Petit coucou en passant !
par Minibug Dim 16 Sep 2018 - 15:03

» bug SEVERE fnc+sub : variables globales corrompus
par silverman Dim 16 Sep 2018 - 13:38

» Verrouiller un form en avant plan
par silverman Dim 16 Sep 2018 - 12:50

» Fin de l'aventure.
par Pedro Alvarez Sam 15 Sep 2018 - 18:16

» Demande d'explications Sur File_Write & File_writeln
par Jack Sam 15 Sep 2018 - 17:26

» MEMO avec des possibilités de commande
par Oscaribout Mer 12 Sep 2018 - 1:06

Navigation
 Portail
 Index
 Membres
 Profil
 FAQ
 Rechercher
Rechercher
 
 

Résultats par :
 
Rechercher Recherche avancée
Septembre 2018
LunMarMerJeuVenSamDim
     12
3456789
10111213141516
17181920212223
24252627282930
CalendrierCalendrier

Partagez | 
 

 Recherche d'une expression dans un source

Aller en bas 
AuteurMessage
Marc

avatar

Nombre de messages : 865
Age : 57
Localisation : TOURS
Date d'inscription : 17/03/2014

MessageSujet: Recherche d'une expression dans un source   Sam 18 Nov 2017 - 23:53

Bonsoir à tous !

Voici un petit programme de recherche dans un source.

Bien qu’il soit destiné à être greffé à mon programme d’analyse ( http://panoramic.1fr1.net/t5501-analyser-un-code-panoramic ), c’est une version totalement autonome et opérationnelle.

La recherche d’une expression est un peu particulière : Le programme affiche simultanément toutes les lignes où est présente l’expression recherchée et occulte les lignes non concernées. Nous avons donc une vue générale de la recherche.

Après avoir chargé un source, cliquez sur   >> Search >>   puis tapez les caractères que vous souhaitez trouver.

N’hésitez pas à me faire remonter vos remarques.

Bonne programmation et bon dimanche à tous !

Code:
' ------------------------------------------------------------------------------
'  PANORAMIC SEARCH
'  MARC37 - November 2017 - Panoramic v0.9.28.i12
'  http://panoramic-language.pagesperso-orange.fr/French/index.html
'  http://panoramic.forumotion.com
' ------------------------------------------------------------------------------
DIM a$ : ' file name to analyze
DIM b$ : ' Reading a line of a$
DIM c$ : ' uppercase of b$
DIM d$ : ' formatted line number as ######
DIM i%, j% : ' variable loop FOR/NEXT
DIM LineNumber%, FontSize%, MemoInUse%
DIM Word$, UpperWord$
LABEL Resize, OpenFile, Bigger, Smaller, About, Quit
LABEL FindText, DataEntry, StringSearch
FontSize% = 10
DLIST 50 : ' hidden object => source code to analyze
Mask()
ON_CLOSE 0, Quit
ON_RESIZE 0, Resize
ON_CLICK 1, OpenFile
ON_CLICK 2, Quit
ON_CLICK 3, About
ON_CLICK 4, Smaller
ON_CLICK 5, Bigger
ON_CLiCK 6, FindText
END
' ------------------------------------------------------------------------------
FindText:
    OFF_CLICK 6
    FOR i%=20 TO 22
        HIDE i%
    NEXT i%
    SHOW 21
    MemoInUse% = 21
    IF TEXT$(6)="  >> Search >>" THEN TEXT 6,""        
    Word$=TEXT$(6)
    DISPLAY
    GOSUB StringSearch
RETURN
' ------------------------------------------------------------------------------
DataEntry:
    Word$=TEXT$(6)
    GOSUB StringSearch
RETURN
' ------------------------------------------------------------------------------
StringSearch:
    UpperWord$ = UPPER$(Word$)
    CLEAR 21
    SHOW 100
    DISPLAY
    FOR LineNumber% = 1 to COUNT(50)
        IF Word$=""
                b$=ITEM_READ$(20,LineNumber%)
            ITEM_ADD 21,b$
        ELSE    
            b$=UPPER$(ITEM_READ$(50,LineNumber%))
            IF INSTR(b$,UpperWord$)>0
                b$=ITEM_READ$(20,LineNumber%)
                ITEM_ADD 21,b$
            END_IF
        END_IF        
        ON_CHANGE 6, DataEntry
    NEXT LineNumber%
    HIDE 100
RETURN
' ------------------------------------------------------------------------------
OpenFile:
    IF OBJECT_EXISTS(40)=0 THEN OPEN_DIALOG 40
    FILTER 40,"*.bas|*.bas"
    a$=FILE_NAME$(40)
    IF a$="_" THEN RETURN
    CLEAR 50
    FOR i% = 20 TO 21
        CLEAR i%
    NEXT i%    
    FOR i% = 4 TO 6
        HIDE i%
    NEXT i%
    OFF_RESIZE 0
    OFF_CLICK 1
    OFF_CHANGE 6
    ON_CLiCK 6, FindText
    LineNumber% = 1
    FOR i% = 21 to 22
        HIDE i%
    NEXT i%
    SHOW 20
    TEXT 6, "  >> Search >>"  
    waitingMessage()
    FILE_OPEN_READ 40,a$
    CAPTION 0, a$
    WHILE FILE_EOF(40)<>1
        FILE_READLN 40,b$
        d$=STR$(LineNumber%)
        WHILE LEN(d$)<6
            d$=" "+d$
        END_WHILE
        c$=UPPER$(b$)
        ITEM_ADD 50, b$
        ITEM_ADD 20, d$+" "+b$
        LineNumber% = LineNumber% + 1
    END_WHILE
    FILE_CLOSE 40
    HIDE 100
    FOR i% = 4 TO 6
        SHOW i%
    NEXT i%
    ON_RESIZE 0, Resize
    ON_CLICK 1, OpenFile
RETURN
' ------------------------------------------------------------------------------
About:
    FOR i%=20 TO 22
        HIDE i%
    NEXT i%
    SHOW 22
    MemoInUse% = 22
    ON_CLiCK 6, FindText
RETURN
' ------------------------------------------------------------------------------
Resize:
    FOR i% = 20 TO 22
        WIDTH i%, (WIDTH(0)-100)
        HEIGHT i%, (HEIGHT(0)-60)
    NEXT i%
RETURN
' ------------------------------------------------------------------------------
Bigger:
    FontSize%=FontSize% + 1
    IF FontSize% > 16 THEN FontSize% = 16 : RETURN
    FOR i% = 20 TO 22
        FONT_SIZE i%, FontSize%
    NEXT i%
    HIDE MemoInUse% : SHOW MemoInUse%
RETURN
' ------------------------------------------------------------------------------
Smaller:
    FontSize%=FontSize% - 1
    IF FontSize% < 8 THEN FontSize% = 8 : RETURN
    FOR i% = 20 TO 22
        FONT_SIZE i%, FontSize%
    NEXT i%
    HIDE MemoInUse% : SHOW MemoInUse%
RETURN
' ------------------------------------------------------------------------------
SUB Mask()
    WIDTH 0, 1025
        HEIGHT 0, 727
        LEFT 0,(SCREEN_X-WIDTH(0))/2
        TOP 0,(SCREEN_Y-HEIGHT(0))/2
        COLOR 0, 180,180,180
    BUTTON 1
        WIDTH 1, 100
        HEIGHT 1, 25
        LEFT 1,13
        TOP 1,10
        CAPTION 1, "&Open"
    BUTTON 2
        WIDTH 2, 100
        HEIGHT 2, 25
        LEFT 2,13
        TOP 2, 650
        CAPTION 2, "&Quit"
    BUTTON 3
        WIDTH 3, 100
        HEIGHT 3, 25
        LEFT 3,13
        TOP 3, 610
        CAPTION 3, "&About"
    CREATE_HIDE
    BUTTON 4
        WIDTH 4, 100
        HEIGHT 4, 25
        LEFT 4,13
        TOP 4,530    
        CAPTION 4, "&Smaller"  
    BUTTON 5
        WIDTH 5, 100
        HEIGHT 5, 25
        LEFT 5,13
        TOP 5,570    
        CAPTION 5, "&Bigger"  
    EDIT 6
        WIDTH 6, 100
        HEIGHT 6, 25
        LEFT 6,13
        TOP 6,470    
        TEXT 6, "  >> Search >>"  
    for i% = 1 to 6 : font_bold i% : next i%
    FOR i%= 20 TO 22
        LIST i%
        LEFT i%, 125
        TOP i%,10
        WIDTH i%, 870
        HEIGHT i%, 666
        FONT_NAME i%,"Courier New"
        FONT_SIZE i%,10
    NEXT i%
    SHOW 20
    TextAbout()
    MessageBox()
END_SUB
' ------------------------------------------------------------------------------
SUB MessageBox()
    PANEL 100
        WIDTH 100,300
        HEIGHT 100,200
        FONT_NAME 100,"Arial"
        FONT_SIZE 100,14
    COMMAND_TARGET_IS 100
    ALPHA 101
        TOP 101, 60
        LEFT 101, 100
        CAPTION 101, "Please wait"
    ALPHA 102
        TOP 102, 110
        LEFT 102, 60
        CAPTION 102, "Analysis in progress..."
    COMMAND_TARGET_IS 0
    SHOW 101
    SHOW 102
END_SUB
' ------------------------------------------------------------------------------
SUB WaitingMessage()
    TOP 100, (HEIGHT_CLIENT(0)-200)/2
    LEFT 100, (WIDTH_CLIENT(0)-300)/2
    SHOW 100
END_SUB
' ------------------------------------------------------------------------------
SUB TextAbout()
    ITEM_ADD 22,""
    b$="                        PANORAMIC SEARCH"
    ITEM_ADD 22, b$
    b$="           MARC37 - November 2017 - Panoramic v0.9.28.i12"
    ITEM_ADD 22, b$
    b$="  http://panoramic-language.pagesperso-orange.fr/French/index.html"
    ITEM_ADD 22, b$
    b$="                 http://panoramic.forumotion.com"
    ITEM_ADD 22, b$
END_SUB
' ------------------------------------------------------------------------------
Quit:
    TERMINATE
RETURN
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
papydall

avatar

Nombre de messages : 5995
Age : 68
Localisation : Moknine (Tunisie) Entre la chaise et le clavier
Date d'inscription : 03/03/2012

MessageSujet: Re: Recherche d'une expression dans un source   Dim 19 Nov 2017 - 1:39

Salut Marc.
J’ai testé et c’est bon.
Merci pour le partage.

Comme je suis de l’ancienne génération de l’époque de feu DOS,  j’aimerais bien signaler la présence de deux commandes que l’on peut lancer à partir de l’invite de commandes et qui offrent une très grande souplesse d’emploi.

FIND et FINDSTR:
 


Voici le résultat de ton code et de la commande FIND (exécutée en ligne de commandes) sur le même fichier : Le résultat est identique.

Remarque : la chaîne recherchée est "xmax" dans le même fichier.

Spoiler:
 
Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://papydall-panoramic.forumarabia.com/
Pedro Alvarez

avatar

Nombre de messages : 1179
Date d'inscription : 19/01/2014

MessageSujet: Recherche d'une expression dans un source.   Dim 19 Nov 2017 - 8:18

Bonjour.

Pour info, Klaus nous a concocté une fonction similaire, que j'utilise abondamment:


res%=dll_call6("SearchStringInTextFile",adr(fic$),adr(crit$),LineNumbers%,AtStartOnly%,OutType%,OutHandle%)

LineNumbers: 0=pas de numéros de ligne <>0=numéros de ligne
AtStartOnly: 0=dans toute la ligne <>0=au début de la ligne uniquement
OutType: chercher le critère entier: 0=clipboard 1=Memo 2=Combo 3=List
chercher tous les mots séparément: 10=clipboard 11=Memo 12=Combo 13=List sans signaler les mots
chercher tous les mots séparément: 20=clipboard 21=Memo 22=Combo 23=List en signalant les mots
OutHandle%: ignoré si OutType%=0, ou handle de l'objet sinon
Si OutType%=2, 12 ou 22: les résultats sont ajoutés au contenu existant de la combo.

Revenir en haut Aller en bas
Voir le profil de l'utilisateur
Minibug

avatar

Nombre de messages : 3028
Age : 51
Localisation : Vienne (86)
Date d'inscription : 09/02/2012

MessageSujet: Re: Recherche d'une expression dans un source   Dim 19 Nov 2017 - 11:28

Belle réalisation Marc 37 ! cheers

Comme quoi même en 100% Panoramic, on peut faire des chose très intéressante...
J'ai testé sur plus de 5000 lignes et c'est bluffant même avec un résultat sur de nombreuses lignes.

Bravo continu comme ça... Wink

Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://gpp.panoramic.free.fr
Jean Claude

avatar

Nombre de messages : 5648
Age : 64
Localisation : 83 Var
Date d'inscription : 07/05/2009

MessageSujet: Re: Recherche d'une expression dans un source   Dim 19 Nov 2017 - 14:16

Je viens de tester et ça marche cheers

Bravo Marc37, tu es entrain de nous concocter, sinon un déboguer, au moins un assistant au débogage.

Très utile...

A+
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
Marc

avatar

Nombre de messages : 865
Age : 57
Localisation : TOURS
Date d'inscription : 17/03/2014

MessageSujet: Re: Recherche d'une expression dans un source   Lun 20 Nov 2017 - 11:08


Merci à tous pour vos retours.

@Papydall :
Merci du rappel !
Eh oui, même sous W10, les commandes DOS survivent !

@Pedro:
Merci aussi pour le rappel de la DDL de Klaus qui a implémenté entre autres, de puissantes et rapides fonctions de recherche.

Merci pour vos tests, je continue pour le plaisir de programmer, même si ça existe déjà... Le plaisir de faire soi-même !

Bonne journée à tous !
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
Contenu sponsorisé




MessageSujet: Re: Recherche d'une expression dans un source   

Revenir en haut Aller en bas
 
Recherche d'une expression dans un source
Revenir en haut 
Page 1 sur 1
 Sujets similaires
-
» souci, installer plusieurs map dans le répertoire garmin de la carte mémoire
» Recherche wifi gratuit ou solution gratuite
» pas de carte dans mapsource????
» intégrer mes POI dans MAP SOURCE
» fichier gtm

Permission de ce forum:Vous ne pouvez pas répondre aux sujets dans ce forum
FORUM DE DISCUSSION SUR LE LANGAGE PANORAMIC :: PANORAMIC :: Vos sources, vos utilitaires à partager-
Sauter vers: