Novembre 2024 | Lun | Mar | Mer | Jeu | Ven | Sam | Dim |
---|
| | | | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | | Calendrier |
|
|
| Nombre d'objets | |
|
+4Jack 659_minifly Nardo26 JL35 8 participants | |
Auteur | Message |
---|
Nardo26
Nombre de messages : 2294 Age : 56 Localisation : Valence Date d'inscription : 02/07/2010
| Sujet: Re: Nombre d'objets Lun 25 Oct 2010 - 16:16 | |
| - Citation :
- Eh ben bon courage ! parce que bonjour tous les cas particuliers... variable% = v2%+5, variable% = toto%+tata%-3 etc etc...
C'est fait... bon je ne suis pas allé aussi que le tu le propose, dans le cas de : "variable%=v%+5" le programme affiche v%+5 (c'est déjà pas mal,enfin je trouve...) Ce que je peux faire c'est afficher le n° de ligne de l'affectation de la variable... @cosmos : je suis étonné par ta demande, vu que tu utilises un éditeur un peu plus performant que celui d'origine, tu dois bien avoir dans le menu 'Edit' une commande "Search & replace" (Trouver & Remplacer) Avec ça tu peux renommer automatiquement toutes tes variables avec tous les noms à coucher dehors que tu veux ! Pour les includes : je vois pas où il y a de problème. Voir comment s'y prend D.J Peter avec par exemple TCP_INCLUDE.bas en fait dans ce fichier on a au tout début: - déclaration des variables - déclaration des labels - goto FindeFichier - Déclaration de toutes les procédures - puis sur la dernière ligne le label 'FindeFichier:' Bon cela implique d'avoir des noms de variables bien spécifique au fichier par exemple toutes les variables du fichier 'Toto.bas' que l'on veut inclure commence par 'TOTO_xxx' Quelques petites questions, j'aimerai avoir votre avis : 1- Là où ça commence à être moche, c'est le formatage à l'écran. Que faire ? utiliser des grid ? 2- Pour les rajouts de fonctionnalités, plusieurs solutions : a - Utiliser les pseudo-objets TAB de notre excellent ami Klaus... b - Avoir plusieurs Form (dans le style du petit éditeur de Nicolas) c - Autre ? | |
| | | JL35
Nombre de messages : 7112 Localisation : 77 Date d'inscription : 29/11/2007
| Sujet: Re: Nombre d'objets Lun 25 Oct 2010 - 16:31 | |
| La ligne d'affectation de chaque variable... il peut y en avoir plusieurs évidemment, sans compter les for i% = ... Et il faudrait aussi toutes les lignes où est utilisée la variable ? ça commence à faire beaucoup. Le Chercher/Remplacer c'est valable pour les variables avec des noms un peu tordus (et donc uniques), mais pas pour les variables simples telles que i, m, ab etc., imagine les dégâts. Tout ça me fait penser à l'arbre qui cache la forêt, on écarte une difficulté et il y en a 10 autres derrière... maintenant je sais bien que tout est possible en informatique (mais pas forcément facilement). Et il faut tester son programme avec les programmes des autres, il y a des façons de programmer inattendues auxquelles on ne pense pas avant de les avoir vues ! | |
| | | Nardo26
Nombre de messages : 2294 Age : 56 Localisation : Valence Date d'inscription : 02/07/2010
| Sujet: Re: Nombre d'objets Lun 25 Oct 2010 - 16:50 | |
| Non ce que je propose pour l'instant c'est ceci : 13 DIM MaListe% : MaListe%=number_objects+1 14 MEMO 21 15 For i%=22 to 26 16 EDIT i% 17 TOP i%,(23-i%)*15 18 NEXT i% 19 LIST MaListe% - Code:
-
numéro: 21 type:MEMO déclaration ligne : 14 numéro: 22 to 26 (ligne 15) var:i% type:EDIT declaration ligne : 16 numéro: number_objects+1 (ligne 13) var:MaListe% type:LIST déclaration ligne : 19 Quand aux tests, je recherche actuellement tous les exemples présent dans le forum... Je sais que fatalement je risque de tomber sur un cas tordu que je n'aurais pas prévu, mais on va dire que globalement cela devrait fonctionner dans la majorité des cas... Quand au chercher/remplacer, si je veux modifier qu'une portion de code, je sélectionne un bloc puis j'applique le replace uniquement sur le bloc... | |
| | | JL35
Nombre de messages : 7112 Localisation : 77 Date d'inscription : 29/11/2007
| Sujet: Re: Nombre d'objets Lun 25 Oct 2010 - 17:30 | |
| Ah ouais, c'est déjà très élaboré ! Juste une petite remarque, à la place de 'numéro' j'afficherais 'objet', ça me semble plus parlant ? Bon allez, je t'encourage des deux mains et je reste en jachère pour le moment (j'affiche juste la liste des variables et des étiquettes ... ) | |
| | | Nardo26
Nombre de messages : 2294 Age : 56 Localisation : Valence Date d'inscription : 02/07/2010
| Sujet: Re: Nombre d'objets Lun 25 Oct 2010 - 17:50 | |
| Je met à jour systématiquement mon site de manière que ceux qui prennent le train en route aient la dernière version... As tu un avis concernant les questions que j'ai posé plus haut ?... car là je ne sais pas encore véritablement dans quoi je me lance... (des prises de tête, ça c'est sûr!) [Ok, je vais mettre 'objet' à la place) Concernant le cahier des charges liste des variables, numéros des lignes où sont utilisées ces variables ok dans une liste, on clique dessus et les numéros de ligne apparaissent. Là où ça risque d'être mariole, c'est le cas des includes... liste des étiquettes, numéros des lignes où sont appelées ces étiquettes idem que pour les variables liste des objets c'est déjà en bonne voie... Ce qui est vraiment dommage, c'est qu'il n'y a pas d'interaction possible avec l'éditeur pano... (ça fait râler ! )
Dernière édition par Nardo26 le Lun 25 Oct 2010 - 18:14, édité 1 fois | |
| | | JL35
Nombre de messages : 7112 Localisation : 77 Date d'inscription : 29/11/2007
| Sujet: Re: Nombre d'objets Lun 25 Oct 2010 - 18:13 | |
| Tu veux dire des questions sur le formatage et la présentation du résultat ? ça c'est la partie finale qui sera je pense facilement modifiable... sortie écran ? dans un fichier pour pouvoir l'éditer ? Perso je n'ai pas d'à priori, quand l'outil existera ce sera le plus facile à faire.
Il me semble que le plus dur c'est ce que tu es en train de faire, débusquer tous les cas particuliers...
Bon allez, je vais faire un tour sur ton site. | |
| | | Nardo26
Nombre de messages : 2294 Age : 56 Localisation : Valence Date d'inscription : 02/07/2010
| Sujet: Re: Nombre d'objets Lun 25 Oct 2010 - 18:17 | |
| Oups ! nos post ce sont croisés. Pour répondre à ta question : non c'est par rapport aux libellés, variables (bref le cahier des charges) Si je me lance dans un utilitaire qui fait une analyse de ce que l'on trouve dans un source, il faut que cela reste facile à utiliser... | |
| | | JL35
Nombre de messages : 7112 Localisation : 77 Date d'inscription : 29/11/2007
| Sujet: Re: Nombre d'objets Lun 25 Oct 2010 - 18:29 | |
| Comme dit l'autre: "je ne vous dis pas ce qu'il faut faire, mais je vous dirai au résultat si c'est bien ou pas" Les Label (étiquettes) ça semble assez facile, mais pour les variables à mon avis c'est une autre paire de manches pour aller les débusquer toutes dans le programme... Pour en revenir aux include, je n'avais pas percuté sur ta réponse, effectivement la méthode d.j.peters semble résoudre de manière élégante le problème des déclarations de variables. | |
| | | 659_minifly
Nombre de messages : 590 Age : 76 Localisation : Valenciennes Nord Date d'inscription : 29/04/2010
| Sujet: Re: Nombre d'objets Lun 25 Oct 2010 - 18:30 | |
| Il y a quelque temps j'avais commencer a faire un programme du meme genre: - Code:
-
dim num_F% dim tp% dim lft% dim wth% dim hgt% dim brd_hd% dim clr_r% dim clr_g% dim clr_b% dim dumy% dim dummy$ dim I% dim compteur% ' Définition des tableaux
dim Tbl_Dictionnaire$(100) dim Tbl_variables$(100) I%=0 Tbl_Dictionnaire$(I%)="dim" I%=I%+1 Tbl_Dictionnaire$(I%)="label" ' Définitions des labels Label list1,list2,list3,list4,list5,list6 ' Initialisation des variables pour la fenêtre 1 num_f%=1 tp%=30 lft%=440 wth%=153 hgt%=445 brd_hd%=1 num_f%=2 tp%=0 lft%=0 wth%=130 hgt%=400 brd_hd%=1 clr_r% = 240 clr_g% = 240 clr_b% = 240
' ************************************ ' Form 1 pour receptacle les variables form 1 top 1,30 left 1,440 width 1,153 height 1,445 caption 1,"Dim" border_small 1 ' ************************************** ' List pour les variables command_target_is 1 list 2 top 2,0 left 2,0 width 2,133 height 2,410 parent 2,1 color 2,240,240,240 show 2
' ************************************ ' Form 3 pour receptacle les variables form 3 top 3,25 left 3,440 width 3,153 height 3,445 caption 3,"Labels" border_small 3
' ************************************* ' Pour les labels command_target_is 3 list 4 top 4,0 left 4,0 width 4,133 height 4,410 parent 4,3 color 4,240,240,240 show 4 item_add 4,"Label0" item_add 4,"Label1" item_add 4,"Label2" item_add 4,"Label3" item_add 4,"Label4"
' ************************************ ' Form 5 pour receptacle les goto form 5 top 5,25 left 5,440 width 5,153 height 5,445 caption 5,"GOTO" border_small 5
' ************************************* ' List pour les goto command_target_is 5 list 6 top 6,0 left 6,0 width 6,133 height 6,410 parent 6,5 color 6,240,240,240 show 6 item_add 6,"goto0" item_add 6,"goto1" item_add 6,"goto2" item_add 6,"goto3" item_add 6,"goto4" ' ************************************ ' Form 7 pour receptacle les gosub form 7 top 7,25 left 7,440 width 7,153 height 7,445 caption 7,"GOSUB" border_small 7
' ************************************* ' List pour les gosub command_target_is 7 list 8 top 8,0 left 8,0 width 8,133 height 8,410 parent 8,7 color 8,240,240,240 show 8 item_add 8,"gosub0" item_add 8,"gosub1" item_add 8,"gosub2" item_add 8,"gosub3" item_add 8,"gosub4" ' ************************************ ' Form 9 pour receptacle des #include form 9 top 9,25 left 9,440 width 9,153 height 9,445 caption 9,"#Include" border_small 9
' ************************************* ' List pour les #include command_target_is 9 list 10 top 10,0 left 10,0 width 10,133 height 10,410 parent 10,9 color 10,240,240,240 show 10 item_add 10,"#include0" item_add 10,"#include1" item_add 10,"#include2" item_add 10,"#include3" item_add 10,"#include4"
' ************************************ ' Form 11 pour receptacle les Erreurs form 11 top 11,25 left 11,440 width 11,153 height 11,445 caption 11,"Erreurs" border_small 11
' ************************************* ' List 12 pour les Erreurs command_target_is 11 list 12 top 12,0 left 12,0 width 12,133 height 12,410 parent 12,11 color 12,240,240,240 show 12 item_add 12,"Erreurs0" item_add 12,"Erreurs1" item_add 12,"Erreurs2" item_add 12,"Erreurs3" item_add 12,"Erreurs4"
' **************************************** ' Memo 17 pour afficher le programme command_target_is 0 Memo 17 top 17,0 left 17,0 width 17 ,600 height 17,400 font_name 17,"Consolas" font_size 17,14
' Initialisation des variables pour numérotation progamme dim a$ ,b% ,f$ ,c% ,d$,E$ ,flgins$,flag_instr% b%=0 flgins$="#include" flag_instr%=0 label include
' Ouvrir la boite de dialogue open_dialog 13
' Choisir le fichier a traiter a$=file_name$(13)
' récupérer le nombre de caratères du nom de fichier c% = len(a$)
' récuperer le nom du fichier sans l'extension d$= left$(a$,C%-3)
' ajouter l'extension txt" d$= d$+"txt"
' Ouvrir le fichier en lecture a traiter file_open_read 14, a$
' ouvrir le fichier d'écriture file_open_write 15,d$
' test si pas fin de fichier while file_eof(14) <>1
' Lecture d'un ligne de fichier file_readln 14,f$
' On retire les blancs de devant et de derriere f$=trim$(f$) ' Incrémentation du compteur de ligne b%=b%+1
' changement de la variable numerique en string e$=str$(b%)
' ajout d'un blanc entre le numero de ligne et les instructions e$ = e$+" "+f$
' ecrire la ligne dans le fichier file_writeln 15,lower$(e$) ' on ecrit la ligne dans le memo item_add 17,e$ ' Tester si la chaine #include existe dans la ligne flag_instr%=instr(f$,flgins$)
' Test si le drapeau flag_instr$ différent de zero if flag_instr%>0
' Test si le premier caractère est bien un # ' si oui c'est bien un include on va au sous-prog include if "#"= left$(f$,1) then gosub include end_if
' fin de la boucle end_while ' Fermeture des fichiers file_close 14 file_close 15 ' ********************************************************************** ' Ceci est un test pour voir si cela est faisable ' on enregistre toutes les déclarations des variables dans un tableau ' on a deja mis en minuscule tous les caractères dans le fichier *.txt ' On vas appelé le sous programme Variables label Recherche ' récupéation du mot a chercher ' Initialisation du compteur du memo compteur%=count(17) item_add 2,str$(compteur%) gosub Recherche
' ********************************************************************** on_click 2,list1 on_click 4,list2 on_click 6,list3 on_click 8,list4 on_click 10,list5 on_click 12,list6 end
list1: dumy%=item_index(2) dummy$=item_read$(2,dumy%) print dummy$
return
list2:
dumy%=item_index(4) dummy$=item_read$(4,dumy%) print dummy$ return
list3:
dumy%=item_index(6) dummy$=item_read$(6,dumy%) print dummy$ return
list4:
dumy%=item_index(8) dummy$=item_read$(8,dumy%) print dummy$
return
list5:
dumy%=item_index(10) dummy$=item_read$(10,dumy%) print dummy$ return
list6:
dumy%=item_index(12) dummy$=item_read$(12,dumy%) print dummy$ return
terminate
include:
' longueur de la chaîne c%=len(f$)
' On convertit la caractère " a$=chr$(34)
' position ou se trouve le premier ..."... I%=instr(f$,a$)
' on rajoute pour avoir le compte correct c%=(C%-I%)+2
' On a le nom du fichier Include f$= right$(f$,c%)
f$=ltrim$(f$)
file_open_read 16,f$ ' test si pas fin de fichier while file_eof(16) <>1
' Incrémentation de la boucle b%=b%+1 ' changement de la variable numerique en string e$=str$(b%)
' Lecture d'un ligne de fichier file_readln 16,f$ ' ajout d'un blanc e$ = e$+" "+f$ ' ecrire la ligne dans le fichier file_writeln 15,lower$(e$)
item_add 17,e$ end_while file_close 16 flag_instr%=0 return
Recherche:
' Recherche mot dans le memo dim mot$,ligne$,ins_tr% ' On convertit la caractère " a$=chr$(34)
' On recupère le mot du dictonnaire I%=0 mot$=Tbl_Dictionnaire$(I%) for i%=1 to compteur% step 1 ligne$=item_read$(17,i%)
' Est-ce que le mot existe dans la ligne ins_tr%=instr(ligne$,Mot$) set_focus 2 If ins_tr%>0 ins_tr%=instr(ligne$,"'") if ins_tr%=0 ins_tr%=instr(ligne$,"rem") if ins_tr%=0 ins_tr%=instr(ligne$,":") if ins_tr%=0 ins_tr%=instr(ligne$,a$) if ins_tr%=0 item_add 2,ligne$ end_if end_if end_if end_if end_if next i%
return
S>i cela peut vous rendre service. | |
| | | JL35
Nombre de messages : 7112 Localisation : 77 Date d'inscription : 29/11/2007
| Sujet: Re: Nombre d'objets Lun 25 Oct 2010 - 18:38 | |
| C'est à dire qu'on ne voit pas très bien ce que ça fait, à part générer un fichier texte du programme avec les numéros de lignes... Et l'indentation de ton programme est plutôt fantaisiste... @Nardo, un exemple d'une petite difficulté à laquelle je me suis heurté dans la recherche de toutes les variables déclarées (en général chez moi sur une même ligne, séparées par des virgules): en plein milieu déclaration d'un tableau à deux dimensions: - Code:
-
DIM a$, b$, toto%(20), txt$(10, 100), x, y.... dans ce cas la virgule n'est plus le séparateur de variables et il faut faire des tests supplémentaires sur les parenthèses. Comme toujours le cas général se traite en quelques lignes, et les cas particuliers rallongent considérablement le tout.
Dernière édition par JL35 le Lun 25 Oct 2010 - 18:44, édité 1 fois | |
| | | Invité Invité
| Sujet: Re: Nombre d'objets Lun 25 Oct 2010 - 18:43 | |
| Je viens de prendre le train en cours de route, et je vois que vous avez le mord au dents. Pour les includes, c'est pas dur: vous commencez par lire toutes les lignes, et dès que vous trouvez "#include " vous rajoutez le fichier. J'ai pris un extrait d'un code qui devait servir pour tracer un programme, mais à force de problèmes et de blocage de l'éditeur Panoramic, j'ai perdu courage, et mis de côté. - Code:
-
list 1 :width 1,width(0)-30:height 1,200 ' --- rem "list 2 est le programme à mettre en fin" memo 2 : top 2,210:width 2,width(0)-30:height 2,200:font_size 2,14:color 2,239,243,189:bar_both 2 file_load 1,"C:\TESTE\M_au _P_TRACE\Ajout_fin.txt" for a%=1 to count(1) a$=item_read$(1,a%) if left$(upper$(trim$(a$)),8)="#INCLUDE" v%=instr(upper$(a$),"#INCLUDE ") item_add 2,"' dépilé: "+trim$(a$) b$=mid$(a$,v%+9,50) file_add 2,b$ else item_add 2,a$ end_if next a% Jetez un coup d'oeil, le programme avec toutes les lignes fonctionne, mais les particularité seraient gênantes ici. Il n'y a pas les déclarations des dim, mais normalement ce doit être un problème pour comprendre. Bon amusement! |
| | | Nardo26
Nombre de messages : 2294 Age : 56 Localisation : Valence Date d'inscription : 02/07/2010
| Sujet: Re: Nombre d'objets Lun 25 Oct 2010 - 18:48 | |
| Merci minifly, Je viens tout juste de finir de jeter un oeil sur le programme de cosmos et après je regarderai le tiens... @cosmos : J'ai du mal à faire fonctionner ton prog. lorsque je deplace le scrollbar, j'ai systematiquement 'list index out of bound' LEs objets 3 et 4 je l'ai est redeclarer en list (il me semble que tu y met des choses interessante) mais il faut que je redimensionne tout car actuellement je ne vois pas grand chose... | |
| | | Invité Invité
| Sujet: Re: Nombre d'objets Lun 25 Oct 2010 - 19:07 | |
| Le programme ne fonctionne pas bien avec le scroll_bar. Je l'ai dis, c'est la partie récupération des DIM qui fonctionne, Le reste n'était pas faite pour votre programme. Le fonctionnement avec deux listes n'est finalement pas la bonne solution, pourquoi? Parce que (avant que je modifie, et ce sera toujours valable selon ce principe), si on rempli la list 6 (6 est la liste de droite), en écrivant sans return, celle ci est en rapport, mais si par mégarde on fait return à chaque fois, on insert une ligne vide. Donc ce principe n'est pas le bon. Il vaut mieux avoir deux listes côte à côte, et un edit pour modifier chaque ligne. Mais cela c'était pour résoudre mon problème. La méthode que vous voulez utiliser pour faire votre programme, je ne la connait pas, et on ne fait pas la même chose.
J'ai laissé de côté, parce que j'ai plus important à faire, alors qu'en ce moment j'ai beaucoup de retard ailleur. Donc désolé.
J'ai parfois la possibilité de regarder le forum en passant, mais svp, de m'en demandez pas plus. Pourtant l'envie de faire est là.
|
| | | Nardo26
Nombre de messages : 2294 Age : 56 Localisation : Valence Date d'inscription : 02/07/2010
| Sujet: Re: Nombre d'objets Lun 25 Oct 2010 - 19:14 | |
| Ok ya pas de mal, merci cosmos ! Pour l'anecdote : je viens regarder la façon dont tu procède et j'applique à peu près le même principe... Au passage, j'ai lancé ton prog (et je l'ai fais testé sur lui-même) et il y a une faille : sur la ligne de commentaire : ' je mets le label de la procédure, et les dims de départ 'dims' a été détecté par erreur et je me retrouve avec une variable 'de départ' - Citation :
- @Nardo, un exemple d'une petite difficulté à laquelle je me suis heurté dans la recherche de toutes les variables déclarées (en général chez moi sur une même ligne, séparées par des virgules): en plein milieu déclaration d'un tableau à deux dimensions:
Code: DIM a$, b$, toto%(20), txt$(10, 100), x, y....
dans ce cas la virgule n'est plus le séparateur de variables et il faut faire des tests supplémentaires sur les parenthèses. Comme toujours le cas général se traite en quelques lignes, et les cas particuliers rallongent considérablement le tout.
C'est sûr qu'il y a quelques cas à traiter... j'ai eu le même problème pour les chaines de caractères. si dans un prog tu as : caption 2,"EDIT : fichier incorrect" --> il ne faut pas tenir compte du contenu de la chaine... | |
| | | JL35
Nombre de messages : 7112 Localisation : 77 Date d'inscription : 29/11/2007
| Sujet: Re: Nombre d'objets Lun 25 Oct 2010 - 21:03 | |
| Juste une ébauche pour lister les variables et les labels déclarés, sans fioritures ni mise en forme, je laisse en l'état pour le moment puisque tu fais d'ores et déjà beaucoup mieux: - Code:
-
DIM f$, a$, b$, c$, a1$, i%, k%, k1%, k2%, nl%, nvar%, neti%, nobj%, ign% DIM var$(200), eti$(100), obj$(100) LABEL ra, rb, rc, rd, Suit1, Suit2, Tri, Misfo
f$ = "C:\LANGAGES\Panoramic\Etiquette.bas": ' ***** SOURCE A ANALYSER *****
nvar% = 0: neti% = 0: nobj% = 0 ' ***** VARIABLES DÉCLARÉES (DIM) FILE_OPEN_READ 1, f$: nl% = 0 WHILE FILE_EOF(1) = 0 nl% = nl% + 1: FILE_READLN 1, a$: GOSUB Misfo: IF ign% = 1 THEN GOTO Suit1 k% = INSTR(a$, "DIM ") IF k% > 0 a$ = MID$(a$, k%+4, LEN(a$)-k%-3) ra: k% = INSTR(a$, ":"): a1$ = "" IF k% > 0 THEN a1$ = MID$(a$, k%+1, LEN(a$)-k%): a$ = LEFT$(a$, k%-1) k% = INSTR(a$, "(") IF k% > 0 b$ = MID$(a$, k%+1, LEN(a$)-k%) k2% = INSTR(b$, ")") IF k2% > 0 k1% = INSTR(b$, ",") IF k1% > 0 AND k1% < k2% k1% = k% + k1%: k2% = k% + k2% a$ = LEFT$(a$, k%-1)+"["+MID$(a$, k%+1, LEN(a$)-k%) a$ = LEFT$(a$, k1%-1)+"."+MID$(a$, k1%+1, LEN(a$)-k1%) IF k2% < LEN(a$) a$ = LEFT$(a$, k2%-1)+"]"+MID$(a$, k2%+1, LEN(a$)-k2%) ELSE a$ = LEFT$(a$, k2%-1) + "]" END_IF END_IF END_IF END_IF rb: k% = INSTR(a$, ",") nvar% = nvar% + 1: b$ = STR$(nl%): b$ = STRING$(5-LEN(b$)," ") + b$ IF k% > 0 var$(nvar%) = TRIM$(LEFT$(a$, k%-1)) + b$ a$ = MID$(a$, k%+1, LEN(a$)-k%): GOTO rb END_IF var$(nvar%) = TRIM$(a$) + b$ IF a1$ <> "" THEN a$ = a1$: GOTO ra END_IF Suit1: END_WHILE FILE_CLOSE 1 ' ***** ÉTIQUETTES DÉCLARÉES (LABEL) FILE_OPEN_READ 1, f$: nl% = 0 WHILE FILE_EOF(1) = 0 nl% = nl% + 1: FILE_READLN 1, a$: GOSUB Misfo: IF ign% = 1 THEN GOTO Suit2 k% = INSTR(a$, "LABEL ") IF k% > 0 a$ = MID$(a$, k%+6, LEN(a$)-k%-5) rc: k% = INSTR(a$, ":"): a1$ = "" IF k% > 0 THEN a1$ = MID$(a$, k%+1, LEN(a$)-k%): a$ = LEFT$(a$, k%-1) rd: k% = INSTR(a$, ",") neti% = neti% + 1: b$ = STR$(nl%): b$ = STRING$(5-LEN(b$)," ") + b$ IF k% > 0 eti$(neti%) = TRIM$(LEFT$(a$, k%-1)) + b$ a$ = MID$(a$, k%+1, LEN(a$)-k%): GOTO rd END_IF eti$(neti%) = TRIM$(a$) + b$ IF a1$ <> "" THEN a$ = a1$: GOTO rc END_IF Suit2: END_WHILE FILE_CLOSE 1 ' remise en forme des déclarations de tableaux à double entrée FOR i% = 1 TO nvar% a$ = var$(i%) k% = INSTR(a$, "[") IF k% > 0 a$ = LEFT$(a$, k%-1) + "(" + MID$(a$, k%+1, LEN(a$)-k%) k% = INSTR(a$, "]") IF k% > 0 a$ = LEFT$(a$, k%-1) + ")" + MID$(a$, k%+1, LEN(a$)-k%) k% = INSTR(a$, ".") IF k% > 0 a$ = LEFT$(a$, k%-1) + "," + MID$(a$, k%+1, LEN(a$)-k%) END_IF END_IF b$ = LEFT$(a$, LEN(a$)-5) FOR k% = 1 TO LEN(b$): ' suppression éventuelle des espaces superflus IF MID$(a$, k%, 1)=" " THEN b$=LEFT$(b$, k%-1) + MID$(b$,k%+1,LEN(b$)-k%) NEXT k% var$(i%) = b$ + RIGHT$(a$, 5) END_IF NEXT i% GOSUB Tri: ' tri alpha des résultats HEIGHT 0, SCREEN_Y PRINT f$ + " Total= " + STR$(nvar%) + " variables, " + STR$(neti%) + " étiquettes." FOR i% = 1 TO nvar% PRINT LEFT$(var$(i%), LEN(var$(i%))-5) + " [" + TRIM$(RIGHT$(var$(i%),5)) + "]" NEXT i% PRINT " - ÉTIQUETTES -" FOR i% = 1 TO neti% PRINT LEFT$(eti$(i%), LEN(eti$(i%))-5) + " [" + TRIM$(RIGHT$(eti$(i%),5)) + "]" NEXT i% END
Tri: DLIST 99 FOR i% = 1 TO nvar%: ITEM_ADD 99, var$(i%): NEXT i% SORT 99 FOR i% = 1 TO nvar%: var$(i%) = ITEM_READ$(99, i%): NEXT i% CLEAR 99 FOR i% = 1 TO neti%: ITEM_ADD 99, eti$(i%): NEXT i% SORT 99 FOR i% = 1 TO neti%: eti$(i%) = ITEM_READ$(99, i%): NEXT i% DELETE 99 RETURN
Misfo: ' Mise en forme de a$ avant analyse (élimination des éléments superflus) ign% = 0 a$ = TRIM$(a$): IF a$ = "" THEN ign% = 1: RETURN k% = INSTR(a$, "' "): IF k% = 1 THEN ign% = 1: RETURN IF k% > 0 THEN a$ = RTRIM$(LEFT$(a$, k%-1)) IF RIGHT$(a$, 1) = ":" THEN a$ = LEFT$(a$, LEN(a$) - 1) ' Éliminer le contenu entre quotes (merci Nardo) k% = INSTR(a$, CHR$(34)) IF k% > 0 b$ = MID$(a$, k%+1, LEN(a$)-k%) k1% = INSTR(b$, CHR$(34)) IF k1% > 0 a$ = LEFT$(a$, k%) + MID$(b$, k1%, LEN(b$)-k1%+1) END_IF END_IF RETURN Ce qui manque beaucoup pour ces analyses de textes (je sais, je me répète pour la nième fois), et qui simplifieraient considérablement le code ci-dessus: - une fonction INSTR qui démarrerait la recherche à un endroit donné de la chaîne (1 par défaut), pour enchaîner les recherches. - des fonctions LEFT$, RIGHT$ et MID$ qui ne partiraient pas en erreur si la chaîne résultante est vide, mais rendraient une chaîne vide, justement. - une fonction MID$ avec le dernier paramètre implicite = tout le reste de la chaîne, ce qui éviterait d'avoir à calculer à chaque fois la longueur de ce qui reste.
Dernière édition par JL35 le Mar 26 Oct 2010 - 16:14, édité 3 fois | |
| | | Invité Invité
| Sujet: Re: Nombre d'objets Lun 25 Oct 2010 - 21:41 | |
| @ Nardo - Citation :
- ' je mets le label de la procédure, et les dims de départ
'dims' a été détecté par erreur et je me retrouve avec une variable 'de départ' J'ai eu beaucoup de mal. J'ai eu une micro coupure, et je ne retrouvais pas le programme sur lequel j'ai pris une partie du code. Je l'ai retrouvé et je ne comprend pas, le fichier n'avait pas d'extention. J'ai modifié le chemin de lecture pour lire justement ce programme. Je ne trouve aucune erreur. J'avoue ne pas comprendre. Cela dis, le programme que j'ai mis, est une partie du programme que lui-même j'ai été chopé avant dans un autre programme. Ça craint! n'est-ce pas! Le premier programme qui n'est pas fini, dont le code chopé venait de celui-là, j'ai essayé plein de programme, et modifié les dim, pour avoir à mon sens tous les cas de figure. Maintenant, je ne suis que la toute petite fourmis dans l'univers, le monde étant grand autour de moi, j'ai peut-être loupé un truc. |
| | | JL35
Nombre de messages : 7112 Localisation : 77 Date d'inscription : 29/11/2007
| Sujet: Re: Nombre d'objets Lun 25 Oct 2010 - 22:23 | |
| @Nardo (y'en a que pour lui) je relisais un de tes posts précédents, pour le cas des INCLUDE, en ce qui me concerne je crois que je fabriquerais un fichier temporaire (sur lequel se ferait ensuite le travail d'analyse) regroupant le programme principal et ses Include développés à leurs emplacements respectifs, comme ça on serait ramené au cas précédent sans Include. | |
| | | Invité Invité
| Sujet: Re: Nombre d'objets Lun 25 Oct 2010 - 22:28 | |
| Excuses moi JL35, je ne pense pas qu'à Nardo, mais il me pose des questions, donc j'y répond. Je me suis dis que j'avais commencé un éditeur, dont je voulais avoir la list des DIM et des LABEL. J'ai tout retiré, sauf celà. Du nettoyage! Vous en ferez ce que vous voudrez (poubelle peut-être) - Code:
-
dim glis%,n_picture%,a%,a$,b%,b$ ,f$ f$="C:\TESTE\voir.bas"
label recherche_label,recherche_dim,charger,clic_aucun,clic_label,clic_dim
full_space 0:height 0,screen_y -40 dlist 45 : ' normalement mémoire dlist 46 : ' est la liste où le programme est en création /load /save /modifie... list 47 :left 47,width(0)-215:top 47,55:width 47,160:height 47,height(0)-150:font_size 47,12 list 100 :hide 100:left 100,width(0)-215:width 100,160:top 100,55:font_size 100,12 :height 100,height(0)-150
container_option 97 :left 97,width(0)-215:top 97,0:height 97,50:width 97,170 option 96:parent 96,97:left 96,5 :top 96,10:caption 96,"Aucun" option 94:parent 94,97:left 94,105:top 94,10:caption 94,"Label" option 93:parent 93,97:left 93,105:top 93,30:caption 93,"Dim"
gosub charger on_click 96,clic_aucun on_click 94,clic_label on_click 93,clic_dim end ' ============================================================================== charger: clear 46 file_load 46,f$ glis%=0 :n_picture%=count(46) gosub recherche_label gosub recherche_dim ' ============================================================================== recherche_label: ' recherche des labels for a%=1 to count(46) a$=item_read$(46,a%) if right$( trim$(a$),1)=":" if instr(trim$(a$)," ") =0 then item_add 47,a$ end_if next a% return ' ============================================================================== recherche_dim: ' recherche des DIM for a%=1 to count(46) a$=trim$(item_read$(46,a%)) if upper$(left$(trim$(a$),4))="DIM " a$=trim$(right$(a$,len(a$)-4)) b%=instr(a$,":") if b%>0 then a$=trim$(left$(a$,b%-1)) b$=a$ repeat b%=instr(a$,",") if b%>0 b$=trim$(left$(a$,b%-1)) item_add 100,b$ a$=trim$(right$(a$,len(a$)-b%)) else b$=a$ end_if until b%=0 end_if next a% sort 100 return ' ============================================================================== clic_aucun: hide 47:hide 100 return ' ============================================================================== clic_label: hide 100 show 47 return ' ============================================================================== list_label: ch$= item_index$(47) hide 47 mark_on 96 return ' ============================================================================== clic_dim: hide 47 show 100 return Et maintenant je reprend mon programme. A ce propos, je ne regarde pas vos sources pour l'instant. Donc je ne peux pas donner une opinion |
| | | JL35
Nombre de messages : 7112 Localisation : 77 Date d'inscription : 29/11/2007
| Sujet: Re: Nombre d'objets Lun 25 Oct 2010 - 22:39 | |
| eh cosmos, je plaisantais, évidemment ! | |
| | | Invité Invité
| Sujet: Re: Nombre d'objets Lun 25 Oct 2010 - 22:45 | |
| J'en suis convaincu, tu es plus réservé que moi. Cette fois ci, je repars |
| | | JL35
Nombre de messages : 7112 Localisation : 77 Date d'inscription : 29/11/2007
| Sujet: Re: Nombre d'objets Lun 25 Oct 2010 - 23:47 | |
| J'ai édité mon post un peu plus haut avec un exemple, en triant les listes (variables et étiquettes) par ordre alpha, et en ajoutant après chaque variable ou étiquette le numéro de sa ligne de déclaration. Reste plus qu'à trouver dans le programme tous les endroits où tout ça est appelé. pour ajouter les numéros de lignes correspondants derrière. Une paille ! En attendant | |
| | | Nardo26
Nombre de messages : 2294 Age : 56 Localisation : Valence Date d'inscription : 02/07/2010
| Sujet: Re: Nombre d'objets Mar 26 Oct 2010 - 0:27 | |
| Hello, je suis de retour, alors que vous allez tous faire dodo... Que de réponses !! @JL35: - Au sujet des includes Si on veut vraiment traiter ce sujet correctement : le pb c'est qu'un fichier (on va dire) 'include' peut contenir lui aussi des includes qui peuvent, etc.... aie! ça se corse (pour traiter ce genre de cas, il faudrait presque faire une routine récursive...) On rentre dans quelque chose de complexe avec des risques de plantage suite à des débordement de pile... je pense que pour cet utilitaire, il vaut mieux s'en tenir au fichier principal (que l'on charge). Si on commence à traiter les includes, on a une notion de projet et non plus d'un simple fichier source. - Au sujet de ton prog : c'est presque parfait ! il reste juste à rajouter le fait qu'on doit ignorer les chaines de caractères. Je m'explique si tu lances ton prog et qu'il s'analyse lui-même,tu obtiens une variable en ligne 15 : k% = INSTR(a$, "DIM ") et un label en ligne 59 : k% = INSTR(a$, "LABEL ") C'est vrai que pour retrouver les n° de ligne où sont utilisés les variables cela risque d'être mariole -> je pense procéder ainsi :dans un 1er temps, création d'un dictionnaire de variable (comme ton prog) puis en 2eme traiter ligne par ligne le source et compléter le dico... Le traitement risque de prendre beaucoup de temps...(je me trompe peut être puisque tout sera manipulé à partir d'une dlist) Sinon un cas tout bête mais vraiment tout bête que je n'ai pas encore traiter : EDIT 456: EDIT 789: DLIST Variable%: ' le tout sur la même ligne [Edit] Le cas tout bête est traité ... mise à jour: Etiquette ! (juste les déclarations) [/Edit] | |
| | | JL35
Nombre de messages : 7112 Localisation : 77 Date d'inscription : 29/11/2007
| Sujet: Re: Nombre d'objets Mar 26 Oct 2010 - 15:09 | |
| Bonjour Nardo et les autres. Au sujet des Include, je ne pensais évidemment qu'à un seul niveau d'Include, s'il y en a en cascade ça ne marche évidemment plus (mais on pourrait appliquer le même traitement, récursif), mais j'estime que ça doit être rarissime, sinon inexistant. Concernant les chaînes de caractères entre quotes, elles sont évidemment à éliminer de l'analyse, ça m'avait échappé mais j'y ai pensé au vu d'un de tes posts précédents (PS j'ai édité mon post plus haut pour y ajouter l'élimination des contenus entre quotes avant analyse)Pour la liste d'utilisation des variables, effectivement l'analyse doit être très longue. Pour chaque ligne il faut rechercher successivement toutes les variables du tableau, et surtout savoir les isoler: comment distinguer une variable i dans une ligne source, avec tous les i qu'il peut y avoir un peu partout ? a priori ça me paraît mission quasiment impossible... Ton idée d'analyse de la ligne est peut-être intéressante, mais tout ça me paraît un peu flou... | |
| | | Invité Invité
| Sujet: Re: Nombre d'objets Mar 26 Oct 2010 - 15:55 | |
| Je vais répondre rapidement, je dois partir. Déjà, je hurle contre la recherche sur ce forum, par membre je ne peux descendre au delà du mois de juin!! Si je prend le bavardage, je m'arrète au 31 décembre. Je crois qu'il va falloir prendre la peine d'enregistrer les pages WEB pour retrouver ce qu'on y mets.
Je l'ai déjà fait de retrouver les variables, d'ailleurs toutes les séparations, mot clé, label dim variables, et je ne sais plus.
Cela fait plus de 15 jours que j'étais bloqué sur mon programme, et je pensais que cela venait de moi, mais non (une particularité des fontes ) peu importe. Le mieux est de mettre tous les mots clés dans une chaîne avec un séparateur. Manque de temps. variables: devant space,+*-). Je reprendrai plus tard, mais l'ayant fait vers la fin décembre, je sais que c'est possible. |
| | | JL35
Nombre de messages : 7112 Localisation : 77 Date d'inscription : 29/11/2007
| Sujet: Re: Nombre d'objets Mar 26 Oct 2010 - 16:09 | |
| | |
| | | Contenu sponsorisé
| Sujet: Re: Nombre d'objets | |
| |
| | | | Nombre d'objets | |
|
Sujets similaires | |
|
| Permission de ce forum: | Vous ne pouvez pas répondre aux sujets dans ce forum
| |
| |
| |