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 |
|
|
| Une idée avec CHAIN | |
| | Auteur | Message |
---|
Invité Invité
| Sujet: Une idée avec CHAIN Mer 30 Juin 2010 - 11:17 | |
| Il m'est venu une idée il y a 1/2 heure, et je l'ai exploité rapidement et ça marche. Dans les grand programme, où il y a beaucoup de sous-programme, vu qu'on a un éditeur à onglet, est au départ ouvrir un nouveau dossier pour un programme à décomposition. Je m'entends: le programme est décomposé d'une part avec les "sub" finis, et chaque sub à mettre au point est mis dans un nouvelle onglet. Puis on fait le genre de programme suivant: - Code:
-
'' assemblage dim dir$,f$ , a% , a$ dir$="C:\TRAVAUX" ' il y a un \ à la fin mais je n'arrive pas à l'afficher ici???? f$="assemblage.bas" : ' le fichier d'assemblage file_open_write 1,dir$+f$ : ' création du nouveau fichier qui sera l'assemblage file_close 1 file_open_append 1,dir$+f$ : ' on ouvre en assemblage des différentes parties
f$="prg.bas" : ' ouverture du 1er file_open_read 2,dir$+f$ while file_eof(2) <>1 file_readln 2 , a$ file_writeln 1,a$ end_while file_close 2
f$="fichier.bas" : ' ouverture du second file_open_read 2,dir$+f$ while file_eof(2) <>1 file_readln 2 , a$ file_writeln 1,a$ end_while file_close 2 file_close 1 : ' tout fermé
' on lance l'application du programme recomposé. ' il serait possible de mettre le programme d'assemblage dans un autre dossier, et de faire une boucle ' de lecture et d'ajout de chaque fichier automatiquement, mais je ne lance que l'idée
chain dir$+"assemblage.bas" Il faudrait revoir la partie code avec "poster un nouveau sujet", le caractère \ ne s'affiche pas partout. Dans dir$=... le \ ne veut pas s'afficher à la fin de la chaine, à la prévisualisation, peut-être est-ce différent après "envoyer" |
| | | Invité Invité
| Sujet: Re: Une idée avec CHAIN Mer 30 Juin 2010 - 12:41 | |
| J'ai essayé rapidement, et j'ai posté la méthode, et j'aimerais savoir si chez vous, vous avez la même chose que moi.
Lorsque le programme est exécuté avec chaine, suite à l'assemblage, une fois terminé, vous avez toujours l'éclair rouge, ou l'éditeur bloqué comme c'est le cas chez moi? |
| | | Jean Claude
Nombre de messages : 5950 Age : 70 Localisation : 83 Var Date d'inscription : 07/05/2009
| Sujet: Re: Une idée avec CHAIN Mer 30 Juin 2010 - 14:09 | |
| Salut Ô Grand COSMOS, J'ai essayé, 1) il y a 2 erreurs à corriger: ligne 1 enlevez une apostrophe et ligne 3 il manque les ":" avant le commentaire 2) comme toi, je ne peux pas intégrer \ dans la variable dir$ 3) Une fois les erreurs nommées en (1) corrigées, je lance et là j'ai un message d'erreur [ FILE Does Not Exist (Not Created), Line: 10 ] 4) a aucun moment je n'ai de bloquage de l'éditeur. Je veux dire, par là, que si je clique sur stop, l'éclair rouge (run) est fonctionnel. Pour finir, je ne vois pas pour le moment ou tu veux en venir, mais il ya un truc qui me chiffonne à la ligne 10: - Code:
-
file_open_read 2,dir$+f$ Ce fichier n'est pas créer (par le programme) avec 2 comme numéro et tu en demandes l'ouverture en lecture ?Voila, c'est tout ce que je peux t'apporter à ce stade. A+ | |
| | | Invité Invité
| Sujet: Re: Une idée avec CHAIN Mer 30 Juin 2010 - 17:39 | |
| Je vais reprendre, et mettre un peu plus de temps pour expliquer. J'ai un programme très court que j'ai repris pour montrer (je ne sais pas si c'est le tient. - Code:
-
label fini,reaff
border_hide 0:width 0,220:height 0,30
button 999:width 999,220:height 999,28:caption 999,"Vous devez sortir par le Menu (Cliquez ici)" on_click 999,reaff
form 1:command_target_is 1
main_menu 2 sub_menu 3:parent 3,2:caption 3,"Quitter":on_click 3,fini ' ' ici, le reste des initialisations ' end ' ===ICI POUR L'EXEMPLE, ON VA COUPER ICI== fini: ' ' ici, tous les traitements de clôture ' ' if 1=1 then return terminate return : ' cette instruction ne sera jamais exécutée
reaff: show 1 return
Considérons qu'il est compliqué et très long, mâma si c'est le contraire, et je vais procédé par morceau. Je coupe le programme après le END, et disons que le reste n'est pas encore fait (volontairement j'ai pris un programme très court, vu que c'est juste pour l'exemple, et que je ne veux mettre une tonne de code pour rien). - Code:
-
label fini,reaff
border_hide 0:width 0,220:height 0,30
button 999:width 999,220:height 999,28:caption 999,"Vous devez sortir par le Menu (Cliquez ici)" on_click 999,reaff
form 1:command_target_is 1
main_menu 2 sub_menu 3:parent 3,2:caption 3,"Quitter":on_click 3,fini ' ' ici, le reste des initialisations ' end ' ===ICI POUR L'EXEMPLE, ON VA COUPER ICI== Je vais créer un nouveau dossier disons: "C:\temps" je fais une sauvegarde de cette partie de programme dans ce dossier, disons sous le nom: "début.bas" J'ouvre un nouvel onglet, et je fais la suite qui donne celà: - Code:
-
fini: ' ' ici, tous les traitements de clôture ' ' if 1=1 then return terminate return : ' cette instruction ne sera jamais exécutée
reaff: show 1 return Dans le même dossier, je le sauvegarde sous le nom: "fin.bas" le nom ici du label Maintenant avec la proposition du programme que j'ai mis plus haut, dans un autre onglet: CELUI-CI EST LE PROGRAMME QUI ASSEMBLE LES DEUX POUR N'EN FAIRE QU'UN. PUIS CHAIN pour l'exécuter. - Code:
-
' assemblage dim dir$,f$ , a% , a$ dir$="C:\temp" :' avec le \ à la fin si il n'est pas présent dans le listing f$="assemblage.bas" : ' le fichier d'assemblage file_open_write 1,dir$+f$ : ' création du nouveau fichier qui sera l'assemblage file_close 1 file_open_append 1,dir$+f$ : ' on ouvre en assemblage des différentes parties
f$="début.bas" : ' ouverture du 1er file_open_read 2,dir$+f$ while file_eof(2) <>1 file_readln 2 , a$ file_writeln 1,a$ end_while file_close 2
f$="fini.bas" : ' ouverture du second file_open_read 2,dir$+f$ while file_eof(2) <>1 file_readln 2 , a$ file_writeln 1,a$ end_while file_close 2 file_close 1 : ' tout fermé
' on lance l'application du programme recomposé. ' il serait possible de mettre le programme d'assemblage dans un autre dossier, et de faire une boucle ' de lecture et d'ajout de chaque fichier automatiquement, mais je ne lance que le principe
chain dir$+"assemblage.bas" Au fonctionnement de ce programme, j'ai un nouveau fichier qui est: "assemblage.bas" et chain l'exécute, et l'assemblage donne ceci: Avec ce principe, on peu mettre les DIM et LABEL dans le même onglet, si il y a beaucoup d'objets, on les met dans un autre onglet, et chaque sous programme peut-être fait dans un onglet à part. Au fur et à mesure qu'on ouvre un nouvel onglet, dans le programme d'assemblage, on met à jour le fichier bas à rajouter. Si on veut, on peut faire une boucle du fichier à ajouter avec la liste des fichiers qu'il y a dans le dossier (à l'exclusion du fichier d'assemblage) pour simplifier. Je ne le ferais pas aujourd'hui, il faut rechercher les instructions pour lire les fichiers d'un dossier (je ne les ais plus en tête), et je manque de temps. Si toute fois le procéder intéresse quelqu'un et qu'il veut le finaliser! Je ne sais pas si j'ai été clair. certain antislash ne s'affiche pas
Dernière édition par cosmos70 le Mer 30 Juin 2010 - 18:00, édité 1 fois |
| | | Invité Invité
| Sujet: Re: Une idée avec CHAIN Mer 30 Juin 2010 - 17:45 | |
| Apparemment il y a un problème, il ne prend pas tout le code du fichier. Y aurait-il un bug avec file_readln ??
Je vais refaire ce programme non pas avec cette instruction, mais avec file_load et mettre dans un LIST, et je pense qu'avec file_add , le problème sera résolu. Mais là je ne comprends pas. Les fichiers sont complets et seulement une partie est lue. Je ne sais pas si vous avez déjà constaté ce faite, mois c'est la 1ère fois. |
| | | Invité Invité
| Sujet: Re: Une idée avec CHAIN Mer 30 Juin 2010 - 17:55 | |
| voici le programme avec file_load. - Code:
-
' assemblage dim dir$,f$ , a% , a$
dlist 1
dir$="C:\temp" :' avec le \ à la fin si il n'est pas présent dans le listing
f$="début.bas" : ' ouverture du 1er file_load 1,dir$+f$
f$="fini.bas" : ' ouverture du second file_add 1,dir$+f$
f$="assemblage.bas" : ' le fichier d'assemblage file_save 1,dir$+f$
' on lance l'application du programme recomposé. ' il serait possible de mettre le programme d'assemblage dans un autre dossier, et de faire une boucle ' de lecture et d'ajout de chaque fichier automatiquement, mais je ne lance que le principe
chain dir$+f$ Alors tant qu'il y a des erreurs, je peux relancer le programme, mais dès qu'il fonctionne sans erreur, l'éclair rouge est grisé à la fermeture. |
| | | Jean Claude
Nombre de messages : 5950 Age : 70 Localisation : 83 Var Date d'inscription : 07/05/2009
| Sujet: Re: Une idée avec CHAIN Mer 30 Juin 2010 - 18:39 | |
| Cette fois ci, j'ai pu rajouter \ à la fin de la variable dir$ sans erreur au lancement. Apparament le forum n'accepte pas l'anti/slash suivi des guillemets. Je n'avais pas compris le 1er coup qu'il fallait enregistrer les 2 sources "debut et fini" dans C\temp.
Bref, ton système fonctionne mais tu as raison l'éditeur est bloqué après l'exécution de "assemblage"
Une remarque qui a peut-être son importance: Si tu ouvre l'OPEN_DIALOG de l'éditeur (comme si tu voulais créer un nouveau.bas), et que tu annule, çà débloque l'éditeur. J'espère que c'est une piste pour Jack car çà ressemble à un BUG (mais c'est pas certain)
A+
| |
| | | Invité Invité
| Sujet: Re: Une idée avec CHAIN Mer 30 Juin 2010 - 19:01 | |
| Oui Jean-Claude, ça je le sais que ça le débloque, et je l'ai déjà signalé auparavant dans un autre post. Ce qui est ennuyant est qu'à chaque fois on ouvre un nouvelle onglet. On accumule les onglets inutile, et comme on ne peut pas en supprimer, cela devient gênant.
Mon programme fonctionne, mais maintenant je crois qu'on peut dire qu'il y a un bug avec CHAIN. J'attend la confirmation d'un intervenant supplémentaire pour le signaler. De plus je ne vois pas d'erreur avec file_readln dans la version précédente, et je ne vois pas pourquoi toute la ligne n'est pas prise en compte. Quelqu'un d'autre à t-il essayé, et constate-il une erreur? A mon avis il y a encore un bug, ou alors il faut des précisions. Dans d'autre basic, la virgule est un séparateur, à moins d'utiliser une instruction comme Line input, et je pensais que cette instruction qu'est FILE_READLN était le contre-type de LINE INPUT. Ce qu'il faudrait savoir, c'est quels sont les caractères qui font un saut à la ligne, en dehors de 10 et 13. De plus je crois qu'il n'a pas été jusqu'au bout du fichier. Beaucoup de questions!
Au fait, as-tu compris cette fois la finalité de la méthode? |
| | | Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: Une idée avec CHAIN Mer 30 Juin 2010 - 20:04 | |
| Une petite info pour tous ceux qui ont des difficultés pour intégrer le caractère "\" dans le texte normal d'un post (dans la partie code, cela marche): il faut DOUBLER ce caractère et tout ira bien. Voir mon intervention sur le sujet suivant: https://panoramic.1fr1.net/a-l-aide-f6/remonter-d-un-repertoir-t922.htmJe pense que le caractère "\" sert à introduire des caractères spéciaux et est à ce titre intercepté par les routines de mise en forme. Donc, il faut saisie ceci: "\\" ! | |
| | | Jean Claude
Nombre de messages : 5950 Age : 70 Localisation : 83 Var Date d'inscription : 07/05/2009
| Sujet: Re: Une idée avec CHAIN Mer 30 Juin 2010 - 20:38 | |
| @COSMOS, Oui je pense avoir compris la finalité de ce que tu essai de faire, quoique je n'en voit pas l'intérêt, puisque si on utilise CHAIN à ce pourquoi il est fait, c'est à dire remplacer EXECUTE pendant l'élaboration d'un programme et que quand ce programme est terminé on remplace CHAIN par EXECUTE (Ou alors, je n'ai pas tout compris). Cela n'enlève rien à tes efforts d'exploration d'une idée qui t'es venue. C'est comme cela qu'on avance.... En fait, je pense que ce que tu recherche existe dans QB (et là encore c'est à vérifier, car je parle de mémoire) c'est une commande CHAIN_MERGE qui INCLUS le code source1 et l'ajoute au code source2 et qui l'execute.
@Klaus, Je rends à Jule ce qui est à César, à savoir que le bout de programme utilisé par Cosmos est de toi.
A+ | |
| | | Invité Invité
| Sujet: Re: Une idée avec CHAIN Mer 30 Juin 2010 - 20:43 | |
| D'accord, mais c'est pas normal. Ici on publie des codes, et heureusement les lignes sont peu nombreuses. Mais si on publie un listing de 1000 lignes ou plus, on ne va pas contrôler tout le fichier, d'autant que c'est écrit petit dans "poster une réponse". Le codage publié doit être le reflet au mot près, au caractère près, du programme.
Jean Claude,je viens de voir ton propos en même temps que j'ai envoyé. La finalité n'est pas d'exécuter le programme. C'est seulement pour la création. Lorsqu'il y a beaucoup d'élément à coder, ici on choisi l'éditeur complet pour un seul programme. Si on a beaucoup de variables et de label, on peut avoir un onglet pour cela, et lors de la consultation pour savoir si tel variable existe, il n'y a qu'à cliquer dans cet onglet, sans être obliger de remonter au dessus.
Dans le programme que je fais actuellement avec mes cellules, il y a par exemple une partie avec un fichier indexé, celui-ci me gène ou me perturbe. Il suffit qu'il soit dans un autre onglet pour mettre on point la procédure qui m'intéresse. La partie assemblage fait la concaténation de l'ensemble et l'exécute comme un seul programme. Ensuite je reprend mon onglet sur lequel je travail pour le corriger ou le compléter. Je peux avoir le programme en plusieurs morceaux, et il suffit de changer d'onglet par exemple pour voir si tel autre partie d'un programme est en accord avec ce qu'on écrit, sans avoir à se servir des ascenseurs.
De toute façon, personne est obligé de penser comme moi. |
| | | Jean Claude
Nombre de messages : 5950 Age : 70 Localisation : 83 Var Date d'inscription : 07/05/2009
| Sujet: Re: Une idée avec CHAIN Mer 30 Juin 2010 - 21:12 | |
| - Citation :
- La finalité n'est pas d'exécuter le programme. C'est seulement pour la création
Oui comme un genre d'INCLUDE. | |
| | | Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: Une idée avec CHAIN Mer 30 Juin 2010 - 21:18 | |
| Je comprends ce que tu veux dire, mais tu te heurtes à une règle de mise en forme des pages web, et le forum n'a aucune influence à ce niveau. Cela se passe sur TA machine, je veux dire dans l'explorateur du pauvre Panoramicien qui essaie de lire son écran. Entre les guillemets, il y a un string, et les règles de conception d'un string en affichage de page web comprennent l'utilisation de caractères spéciaux normalement non accessibles dans la langue ou la police utilisée, et que l'on peut spécifier en les préfixant par un backslash suivi de constructions propres à chaque caractère spécial. Il y a des pages entières sur le web, à ce sujet.
Il n'y a que deux moyens de contourner cela: le doublement du backslash ou l'utilisation, dans un source, de chr$(92) de la manière suivante: file$ = "C:"+chr$(92)+"Test"+chr$(92)+"MonRépertoire"+chr$(92)+"essai.txt"
A tout moment, lors de la rédaction d'un post, on peut cliquer sur "Visualiser" pour vérifier l'effet produit; je le fais souvent. | |
| | | Invité Invité
| Sujet: Re: Une idée avec CHAIN Mer 30 Juin 2010 - 21:38 | |
| Ce qui est bizarre est que jusqu'à présent, je ne me souvient pas d'avoir vu quelqu'un du forum se plaindre avec les programmes publiés. C'est la 1ère fois que je constate ceci avec les programmes sur le site. Est-ce que je serais le 1èr à mettre un programme avec des antislash. Si toi tu le fais, ça ne compte pas vu que tu fais la correction, mais les autres intervenants?
Tu ne dis rien sur chain, mais j'oblige personne à avoir son avis, je pense qu'il y a un bogue, mais comme c'est la 1ère fois que j'utilise cette instruction.
A Jean Claude: Oui comme un genre d'include, sauf que j'avais conçu le programme au départ pour qu'il fonctionne en include, mais la partie que j'ai coupé et appelé en include, il me donne une erreur. Surement que je n'ai pas tout compris. Ensuite je pense que lors de la création, on a une meilleur visibilité du programme, avec les différentes découpes, il faut seulement faire une sauvegarde avant de tester |
| | | JL35
Nombre de messages : 7112 Localisation : 77 Date d'inscription : 29/11/2007
| Sujet: Re: Une idée avec CHAIN Mer 30 Juin 2010 - 21:53 | |
| Je me demande si ce n'est pas assez nouveau cette histoire d'antislash. Il a dû y avoir une modif quelque part, parce que depuis quelque temps, effectivement, si j'édite un de mes bouts de code je me retrouve avec des antislash' ajoutés aux existants, ce qui est un peu déroutant.
J'entends bien que l'antislash introduit des codes de commande de présentation pour le forum, mais de toute façon ce qui est compris entre [ code ] et [ / code ] ne devrait pas être analysé mais reproduit tel quel. | |
| | | Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: Une idée avec CHAIN Mer 30 Juin 2010 - 23:22 | |
| Oui, c'est le cas, aussi bien dans "code" que dans "citer" que dans le texte normal, aussi longtemps que cela ne se passe pas à l'intérieur de guillemets. Fais l'essai de rédaction d'un message (sans l'envoyer) en utilisant visualiser pour les différents cas de figure - tu verras exactement ce qui se produit. | |
| | | Invité Invité
| Sujet: Re: Une idée avec CHAIN Jeu 1 Juil 2010 - 0:19 | |
| Je ne jurerais de rien, mais il ne me semblais pas qu'il y avait ce problème auparavant. Peu importe, c'est comme cela maintenant, et ce n'est pas la raison de mon intervention. Vu que CHAIN bloque l'éditeur une fois que l'on ferme le programme, j'ai repris mon programme d'assemblage. J'ai remplacé cette instruction par la copie du list qui assemble les morceaux de programme et celui-ci se trouve dans le presse papier. Il suffit de coller dans un onglet vide, et ça marche. Le programme de cellule avec l'autre à distance fonctionne parfaitement selon ce principe. Il a été découpé en 7 morceaux, et pas de problème pour le réassemblage, et je n'ai plus de blocage - Code:
-
' assemblage dim dir$,f$ , a% , a$ ,v$
dlist 1
dir$="C:\temp" :' avec le \ à la fin si il n'est pas présent dans le listing
f$="début.bas" : ' ouverture du 1er file_load 1,dir$+f$
f$="fini.bas" : ' ouverture du second file_add 1,dir$+f$
' ======================================================== for a%=1 to count(1) v$=v$+item_read$(1,a%) if a%<count(1) then v$=v$+chr$(10) next a% clipboard_string_copy v$
f$="assemblage.bas" : ' le fichier d'assemblage file_save 1,dir$+f$ rem "le programme est maintenant dans le presse papier, il reste à le coller dans un onglet |
| | | Jean Claude
Nombre de messages : 5950 Age : 70 Localisation : 83 Var Date d'inscription : 07/05/2009
| Sujet: Re: Une idée avec CHAIN Jeu 1 Juil 2010 - 7:37 | |
| Bien vu COSMOS, maintenant c'est clean. Bravo....
A+ | |
| | | Contenu sponsorisé
| Sujet: Re: Une idée avec CHAIN | |
| |
| | | | Une idée avec CHAIN | |
|
Sujets similaires | |
|
| Permission de ce forum: | Vous ne pouvez pas répondre aux sujets dans ce forum
| |
| |
| |