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 |
|
|
| Nouvelle fonction: VARIABLE(v$) | |
| | Auteur | Message |
---|
JL35
Nombre de messages : 7112 Localisation : 77 Date d'inscription : 29/11/2007
| Sujet: Nouvelle fonction: VARIABLE(v$) Jeu 2 Déc 2010 - 22:38 | |
| J'étais en train de regarder cette fonction pour chercher des applications, j'avais une idée (dans le cadre des bibliothèques de sous-programmes), mais je pense que ce n'est pas réalisable. Je me disais que pour éviter les double déclarations (gros problème des sous-programmes indépendants), il aurait suffi de faire: v$ = "a%": ' par exemple IF VARIABLE(v$) = 0 THEN DIM ??? mais là je ne sais pas quoi mettre ! Oui, DIM a% dans ce cas. Mais s'il y a une série de variables, par exemple contenue dans une chaîne, séparées par des virgules: "f$,a$,tf,lh%,w%,h%,bpp%,opp%,ll%" et qu'on veut faire ça dans une boucle, en les extrayant une à une, je ne sais pas faire, on peut savoir si la variable est déjà déclarée, mais on ne peut pas paramétrer le DIM pour la déclarer dans le cas contraire. C'est d'ailleurs le même problème avec LABEL(lab$). Dommage J'ai eu l'idée (géniale) d'écrire à l'initialisation, par programme, un fichier Include contenant les déclarations (DIM) à effectuer, en évitant d'en faire en double: - Code:
-
IF VARIABLE("f$")=0 THEN DIM f$ IF VARIABLE("a$")=0 THEN DIM a$ IF VARIABLE("tf")=0 THEN DIM tf IF VARIABLE("lh%")=0 THEN DIM lh% IF VARIABLE("w%")=0 THEN DIM w% IF VARIABLE("h%")=0 THEN DIM h% IF VARIABLE("bpp%")=0 THEN DIM bpp% IF VARIABLE("opp%")=0 THEN DIM opp% IF VARIABLE("ll%")=0 THEN DIM ll% puis de lancer le #Include, mais ça ne marche pas comme ça, l'éditeur Panoramic cherche à charger le fichier Include avant de dérouler le code, alors que le fichier n'est pas encore créé... Il faut que le fichier existe déjà avant le lancement du programme pour pouvoir le mettre en include dans le code, et il est inclus avant le début de l'exécution. | |
| | | Nardo26
Nombre de messages : 2294 Age : 56 Localisation : Valence Date d'inscription : 02/07/2010
| Sujet: Re: Nouvelle fonction: VARIABLE(v$) Ven 3 Déc 2010 - 5:37 | |
| @JL35: Je trouve que variable( ) simplifie quand même l'écriture. Par exemple dans mon post sur "pb excel_write" j'avais écris un truc comme ça : - Code:
-
LABEL Hex2Dec : DIM Hex2Dec$ Hex2Dec$="CAFE": GOSUB Hex2Dec PRINT Hex2Dec% END
Hex2Dec: IF variable("Hex2Dec_i%")<>1 DIM Hex2Dec_i%, Hex2Dec% END_IF Hex2Dec% = 0 : Hex2Dec$ = UPPER$(Hex2Dec$) FOR Hex2Dec_i% = 1 TO LEN(Hex2Dec$) Hex2Dec% = Hex2Dec%*16 + INSTR("0123456789ABCDEF", MID$(Hex2Dec$, Hex2Dec_i%, 1))-1 NEXT Hex2Dec_i% RETURN
Dans ce cas, au début du prog, tu ne déclares que les paramètres d'entrée de ta procédure et tu ne te préoccupe pas de la déclaration des variables "internes" (locales ) de la procédure Hex2Dec... | |
| | | Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: Nouvelle fonction: VARIABLE(v$) Ven 3 Déc 2010 - 9:12 | |
| Tu peux même faire ceci: - Code:
-
LABEL Hex2Dec : DIM Hex2Dec$ if label("Hex2Dec")=0 label Hex2Dec dim Hex2Dec%, Hex2Dec_i% end_if Hex2Dec$="CAFE": GOSUB Hex2Dec PRINT Hex2Dec% END
Hex2Dec: Hex2Dec% = 0 : Hex2Dec$ = UPPER$(Hex2Dec$) FOR Hex2Dec_i% = 1 TO LEN(Hex2Dec$) Hex2Dec% = Hex2Dec%*16 + INSTR("0123456789ABCDEF", MID$(Hex2Dec$, Hex2Dec_i%, 1))-1 NEXT Hex2Dec_i% RETURN
Ce qui permet de coller le code d'appel (lignes 1 à 7) partout où il faut appeler cette routine, en adaptant la ligne 6, et il n'y a plus de problème de définition, ni de variable, ni de label, quelque soit l'ordre dynamique dans lequel on parcourt le programme. Plus besoin de savoir quel appel sera le premier, et rien à déclarer en entête de programme. Idéal pour inclure des modules par #INCLUDE contenant des sous-programmes : | |
| | | JL35
Nombre de messages : 7112 Localisation : 77 Date d'inscription : 29/11/2007
| Sujet: Re: Nouvelle fonction: VARIABLE(v$) Ven 3 Déc 2010 - 14:05 | |
| Je pensais à quelque chose de plus... universel, c'est à dire pouvoir utiliser n'importe quelle variable de manoeuvre (je ne parle pas des variables 'paramètres') dans n'importe quel sous-programme, par exemple des i%, j%, x, y, a$... que j'utilise abondamment, (et non pas des noms de variables particulières à chaque sous-programme), et que ça ne fasse pas conflit dans les déclarations. Une structure du genre (avec ici 4 s/p inclus): - Code:
-
' ... ' ******** ici, autres labels, dims, objets, initialisations ' ... LABEL Spinit, rspinit: GOSUB SpInit: ' à faire en dernier, avant le End END ' ================ Sous-programme d'initialisation ======================= SpInit: ' Initialisation des déclarations des sous-programmes inclus DIM ini%, dec$, kini%, va$, dect$, finc$: finc$ = "Z:\Incl.bas": ' emplacement du fichier à voir... ini% = 0: dect$ = "" LABEL BmpInfos, Jpg2Bmp, DimImage, Posxy GOSUB BmpInfos: dect$ = dect$ + dec$ GOSUB Jpg2Bmp: dect$ = dect$ + "," + dec$ GOSUB DimImage: dect$ = dect$ + "," + dec$ GOSUB Posxy: dect$ = dect$ + "," + dec$ FILE_OPEN_WRITE 1, finc$ rspinit: kini% = INSTR(dect$, ",") IF kini% > 0 va$ = TRIM$(LEFT$(dect$, kini%-1)): dect$ = MID$(dect$, kini%+1, LEN(dect$)) FILE_WRITELN 1, "IF VARIABLE("+CHR$(34)+va$+CHR$(34)+")=0 THEN DIM " +va$ GOTO rspinit END_IF va$ = TRIM$(dect$) FILE_WRITELN 1, "IF VARIABLE("+CHR$(34)+va$+CHR$(34)+")=0 THEN DIM " +va$ FILE_CLOSE 1 ini% = 1 #INCLUDE "Z:\Incl.bas" FILE_DELETE finc$ RETURN ' ============ sous-programmes inclus ===================== BmpInfos: IF ini% = 0 dec$ = "f$,a$,tf,lh%,w%,h%,bpp%,opp%,ll%": ' variables du sous-programme RETURN END_IF ' corps du s/p BmpInfos RETURN
Jpg2Bmp: IF ini% = 0 dec$ = "fi$,fo$": ' variables du sous-programme RETURN END_IF ' corps du s/p Jpg2Bmp RETURN
DimImage: IF ini% = 0 dec$ = "f$,fm$,a$,w%,h%" RETURN END_IF ' corps du s/p DimImage RETURN
Posxy: IF ini% = 0 dec$ = "pos, tf, x%, y%, ll%, opp%, pos, r, g, b": ' variables du sous-programme RETURN END_IF ' corps du s/p Posxy RETURN -> le fichier Include contient les déclarations conditionnelles (If Variable...) de toutes les variables des sous-programmes. Mais ça ne marche pas comme ça, du fait que le fichier Include n'est pas encore créé au moment du lancement. Il faudrait créer préalablement le Include, qu'il figure déjà dans la bibliothèque avec les sous-programmes (un petit programme à lancer à part, une fois que les sous-programmes sont bien définis, ou à chaque modification). Et pareil pour les Labels. | |
| | | Georges
Nombre de messages : 290 Age : 55 Localisation : Martinique Date d'inscription : 29/05/2009
| Sujet: Re: Nouvelle fonction: VARIABLE(v$) Ven 3 Déc 2010 - 14:23 | |
| salut à tous
tu pourrais tester l'existence de ton fichier avant de lancer include. c-a-d lancer include au conditionnel
@+
| |
| | | JL35
Nombre de messages : 7112 Localisation : 77 Date d'inscription : 29/11/2007
| Sujet: Re: Nouvelle fonction: VARIABLE(v$) Ven 3 Déc 2010 - 15:02 | |
| Mais non, je ne peux rien tester du tout, puisque le fichier doit être présent AVANT toute exécution du programme. C'est l'Editeur qui ne veut pas lancer le programme si le fichier n'existe pas.
Mais j'étudie autre chose... | |
| | | Contenu sponsorisé
| Sujet: Re: Nouvelle fonction: VARIABLE(v$) | |
| |
| | | | Nouvelle fonction: VARIABLE(v$) | |
|
Sujets similaires | |
|
| Permission de ce forum: | Vous ne pouvez pas répondre aux sujets dans ce forum
| |
| |
| |