FORUM DE DISCUSSION SUR LE LANGAGE PANORAMIC
Vous souhaitez réagir à ce message ? Créez un compte en quelques clics ou connectez-vous pour continuer.
FORUM DE DISCUSSION SUR LE LANGAGE PANORAMIC

Développement d'applications avec le langage Panoramic
 
AccueilAccueil  RechercherRechercher  Dernières imagesDernières images  S'enregistrerS'enregistrer  MembresMembres  Connexion  
Derniers sujets
» Logiciel de planétarium.
@Ouf_ca_passe (RESTORE) Emptypar Pedro Aujourd'hui à 10:37

» Un autre pense-bête...
@Ouf_ca_passe (RESTORE) Emptypar Froggy One Jeu 21 Nov 2024 - 15:54

» Récupération du contenu d'une page html.
@Ouf_ca_passe (RESTORE) Emptypar Pedro Sam 16 Nov 2024 - 14:04

» Décompilation
@Ouf_ca_passe (RESTORE) Emptypar JL35 Mar 12 Nov 2024 - 19:57

» Un album photos comme du temps des grands-mères
@Ouf_ca_passe (RESTORE) Emptypar jjn4 Mar 12 Nov 2024 - 17:23

» traitement d'une feuille excel
@Ouf_ca_passe (RESTORE) Emptypar jjn4 Jeu 7 Nov 2024 - 3:52

» Aide-mémoire mensuel
@Ouf_ca_passe (RESTORE) Emptypar jjn4 Lun 4 Nov 2024 - 18:56

» Des incomprèhension avec Timer
@Ouf_ca_passe (RESTORE) Emptypar Klaus Mer 30 Oct 2024 - 18:26

» KGF_dll - nouvelles versions
@Ouf_ca_passe (RESTORE) Emptypar Klaus Mar 29 Oct 2024 - 17:58

» instructions panoramic
@Ouf_ca_passe (RESTORE) Emptypar maelilou Lun 28 Oct 2024 - 19:51

» Figures fractales
@Ouf_ca_passe (RESTORE) Emptypar Marc Ven 25 Oct 2024 - 12:18

» Panoramic et Scanette
@Ouf_ca_passe (RESTORE) Emptypar Yannick Mer 25 Sep 2024 - 22:16

» Editeur d étiquette avec QR évolutif
@Ouf_ca_passe (RESTORE) Emptypar JL35 Lun 23 Sep 2024 - 22:40

» BUG QR Code DelphiZXingQRCode
@Ouf_ca_passe (RESTORE) Emptypar Yannick Dim 22 Sep 2024 - 11:40

» fichier.exe
@Ouf_ca_passe (RESTORE) Emptypar leclode Ven 20 Sep 2024 - 19:02

Navigation
 Portail
 Index
 Membres
 Profil
 FAQ
 Rechercher
Rechercher
 
 

Résultats par :
 
Rechercher Recherche avancée
Novembre 2024
LunMarMerJeuVenSamDim
    123
45678910
11121314151617
18192021222324
252627282930 
CalendrierCalendrier
Le deal à ne pas rater :
Code promo Nike : -25% dès 50€ d’achats sur tout le site Nike
Voir le deal

 

 @Ouf_ca_passe (RESTORE)

Aller en bas 
3 participants
AuteurMessage
JL35




Nombre de messages : 7112
Localisation : 77
Date d'inscription : 29/11/2007

@Ouf_ca_passe (RESTORE) Empty
MessageSujet: @Ouf_ca_passe (RESTORE)   @Ouf_ca_passe (RESTORE) EmptyMar 26 Avr 2016 - 14:23

Concernant ton petit exemple de programme concernant les Read Datas, il comporte quelques erreurs:

1) DIM a$(30,2) alors que plus loin tu fais Read a$(i%,2) avec i% de 17 à 32, donc ça dépasse 30 -> erreur

2) DIM a%(30) et plus loin tu fais Read a%(i%) avec i% de 33 à 41 -> ça dépasse, erreur
dans les deux cas tu essayes d'écrire en dehors des cases définies des tableaux.

3) Dans la ligne Data "Export",... tu as ,Quit",... il manque un quote '"' avant le Quit

Plus généralement, l'intérêt d'une SUB est en principe de pouvoir être appelée plusieurs fois depuis le programme principal.
Dans ton cas ça ne peut marcher qu'une seule fois:

1) Tu définis les variables utilisées dans la Sub par des DIM, tu passes une fois, ok, mais la fois suivante ça va te dire: variable déjà définie !
Il faut utiliser des DIM_LOCAL (variables locales qui n'interfèrent pas avec les variables du programme principal).

2) Les DATAs ayant déjà été lus au premier passage, le pointeur de lecture se trouve à la fin, donc au deuxième passage le READ ne trouvera plus rien à lire (ou alors les datas d'un autre sous-programme !).

D'où l'intérêt du RESTORE, qui remet le pointeur au début de tous les DATAs du programme.

Comme on est dans une SUB et qu'on n'est pas censé savoir s'il y a ou non d'autres DATAs dans le programme, il faut mettre un DATA repère au début des DATAs de la sub, puis commencer par faire un RESTORE pour réinitialise le pointeur, puis faire des lectures successives jusqu'à retrouver le repère, et là faire les READ successifs nécessaires pour garnir tes tableaux.

Quelque chose comme:
Code:
DATA "Repère"
DATA "Fichiers","Listes","Affichage",... etc...
' et pour la lecture:
RESTORE
READ b$
WHILE b$<>"Repère": READ b$: END_WHILE
' et là on attaque:
For i%=1 to 16
    Read a$(i%,1) etc...

J'aurais écrit ta sub comme ceci:
Code:
' ==========================
' READ,DATA,RESTORE,FOR,NEXT
' ==========================
error_french
height 0,1000
width 0,200
variables()
end
' ====================
sub variables()
Print "variables:"
  Dim_local a$(32,2), a%(41), i%, b$
  Data  "Début"
  Data  "Fichiers","Listes","Affichage","Opérations","Compte","A Propos...","Aide","Ouvrir","Fermer","-"
  Data  "Exporter","-","Imprimer","-","Quitter","Imputations"
  Data  "Files","Lists","Display on","Operations","Account","About","Help","Open","Close","-"
  Data  "Export","-","Print","-","Quit","Imputations"
  Data 50,100,150,480,80,100,100,40,40
  RESTORE: READ b$: WHILE b$<>"Début": READ b$: END_WHILE
    For i%=1 to 16
    Read a$(i%,1)
    print a$(i%,1)
  next i%
  Print " = PARTIE 2 ="
    For i%=17 to 32
    Read a$(i%,2)
    print a$(i%,2)
  next i%
  Print " = PARTIE 3 ="
  For i%=33 to 41
    Read a%(i%)
    print a%(i%)
  next i%
end_sub
Revenir en haut Aller en bas
Ouf_ca_passe




Nombre de messages : 285
Age : 76
Localisation : Villeneuve d'Ascq (59-Dpt du NORD) France
Date d'inscription : 21/12/2015

@Ouf_ca_passe (RESTORE) Empty
MessageSujet: Bravo et merci   @Ouf_ca_passe (RESTORE) EmptyMar 26 Avr 2016 - 17:43

1) Excuse-moi d'avoir écorché ton pseudo JL35. Je ne le ferai plus.

2) Les 3 erreurs que tu me signales sont impardonnables de ma part

3) Tu as bien réalisé ce que je cherchais à faire mais je trouve quand même qu'avec un "RESTORE étiquette" ça aurait été plus simple.

4) Le data B$ de "Debut", je veux bien; puis le pointeur se retrouve sur Data(2) (i.e. "Fichiers") et TANT QUE ce n'est pas "Debut", il peut lire les autres datas avec les boucles FOR-NEXT si bien que je ne comprends pas ce que viennent faire Read b$ : End_while là où tu les as placés et pas en fin de lecture comme je m'y serais attendu.

5) Je réédite mon code car j'ai changé les dim des tableaux et ça fonctionne quand même. Bien !
Par contre, quand je veux lire mes 9 données INTEGER en partant de l'indice 1, il plante parce qu'il ne veut en lire que 8 ?!?!
MAIS si ma boucle démarre de 0 au lieu de 1, là il veut bien lire les 9.

Code:

' ==========================
' READ,DATA,RESTORE,FOR,NEXT
' ==========================
error_french
height 0,1000
width 0,200
variables()
end
' ====================
sub variables()
Print "variables:"
  Dim_local a$(40,2), a%(40), i%, b$
  Data  "Début"
  Data  "Fichiers","Listes","Affichage","Opérations","Compte","A Propos...","Aide","Ouvrir","Fermer","-"
  Data  "Exporter","-","Imprimer","-","Quitter","Imputations"
  Data  "Files","Lists","Display on","Operations","Account","About","Help","Open","Close","-"
  Data  "Export","-","Print","-","Quit","Imputations"
  Data 50,100,150,480,80,100,100,40,40
  RESTORE: READ b$: WHILE b$<>"Début" : READ b$: END_WHILE
    For i%=1 to 16
    Read a$(i%,1)
    print a$(i%,1)
  next i%
  Print " = PARTIE 2 ="
    For i%=1 to 16
    Read a$(i%,2)
    print a$(i%,2)
  next i%
  Print " = PARTIE 3 ="
  For i%=0 to 8
    Read a%(i%)
    print a%(i%)
  next i%
end_sub



En fait, je voulais montrer qq chose a Ygeronimi et, au lieu de simplifier, ça complique, surtout si ce n'est pas sa façon de coder.

Bonne soirée à tou(te)s
Je pars à la pharmacie chercher du paracétamol.

Revenir en haut Aller en bas
Yannick




Nombre de messages : 8635
Age : 53
Localisation : Bretagne
Date d'inscription : 15/02/2010

@Ouf_ca_passe (RESTORE) Empty
MessageSujet: re   @Ouf_ca_passe (RESTORE) EmptyMar 26 Avr 2016 - 18:04

Je me sers aussi des "data" de temps en temps mais pas souvent.
Le plus souvent ceux ci me servent pour créer un fichier encapsulé dans mon code
et prédéfini, du style, une image.
Cela me sert aussi pour des appli multi-langue.

Mais là, au départ, c' était une appli pour moi perso qui est devenu exemple.
Laughing
Revenir en haut Aller en bas
JL35




Nombre de messages : 7112
Localisation : 77
Date d'inscription : 29/11/2007

@Ouf_ca_passe (RESTORE) Empty
MessageSujet: Re: @Ouf_ca_passe (RESTORE)   @Ouf_ca_passe (RESTORE) EmptyMar 26 Avr 2016 - 18:24

@Ouf_ca_passe
Pour l'écorchage, ne t'inquiètes pas, c'était un clin d'oeil, je ne suis tout de même pas susceptible à ce point-là !

3) Le Restore Étiquette serait évidemment bien pratique, mais bon, il n'existe pas, alors j'ai cherché un palliatif.

4) Si tu mets ton repère 'Début' en fin de lecture des Datas, comment vas-tu savoir où va commencer ta lecture initiale ?
On est dans une Sub, et on n'est pas censé savoir ce que contient le programme principal, en particulier peut-être d'autres séries de datas avant ou après la sub.
Si tu n'as pas de repère, Panoramic va lire le 1er data du programme, quel qu'il soit.
Ou une autre partie du programme a déjà lu une partie des datas et le pointeur de lecture Read va se trouver n'importe où.
Donc le principe c'est à chaque appel de la sub de faire un Restore (qui remet le pointeur de lecture en tête de tous les datas du programme), de lire successivement tous les datas du programme jusqu'à trouver le repère de début (c'est le While... End), et à partir de là on sait qu'on est sur les bons datas.

5) J'ai repris ton code tel quel, pour moi il lit bien les 9 données integer, que ce soit avec 0 to 8 ou 1 to 9 ?

PS par contre j'ai un truc bizarre, le programme s'arrête bien sur le end, mais quand je ferme la fenêtre avec la croix rouge, j'ai systématiquement 'Panoramic.exe a cessé de fonctionner', suivi d'un 'Runtime error 216 at 00403F86' ???
Est-ce que c'est dû à ma version de l'éditeur ? ou autre ?

Je reviens sur le point 4) qui semble ne pas te paraître très clair, un petit exemple:
Code:
' Petit programme d'exemple
DIM js$(7), i%
DATA "Lundi","Mardi","Mercredi","Jeudi","Vendredi","Samedi","Dimanche"
DATA "1","2","3","4","5": ' datas quelconques, pour un autre usage dans le programme
HEIGHT 0,1000: WIDTH 0,200
FOR i% = 1 TO 7: READ js$(i%): NEXT i%: ' jours de la semaine
' ...
Variables()
' ...
END
' ==============================
SUB variables()
Print " = VARIABLES: ="
  Dim_local a$(40,2), a%(40), i%, b$
  Data  "Début"
  Data  "Fichiers","Listes","Affichage","Opérations","Compte","A Propos...","Aide","Ouvrir","Fermer","-"
  Data  "Exporter","-","Imprimer","-","Quitter","Imputations"
  Data  "Files","Lists","Display on","Operations","Account","About","Help","Open","Close","-"
  Data  "Export","-","Print","-","Quit","Imputations"
  Data 50,100,150,480,80,100,100,40,40
  RESTORE: READ b$: WHILE b$<>"Début" : READ b$: END_WHILE
    For i%=1 to 16
    Read a$(i%,1)
    print a$(i%,1)
  next i%
  Print " = PARTIE 2 ="
    For i%=1 to 16
    Read a$(i%,2)
    print a$(i%,2)
  next i%
  Print " = PARTIE 3 ="
  For i%=0 to 8
    Read a%(i%)
    print a%(i%)
  next i%
END_SUB
Tu vois bien que si tu ne mets pas un repère au début des datas qui t'intéressent parmi les autres, ta sub Variables va commencer à lire les datas 1,2,3...
Et même si tous les Read de datas du programme sont dans l'ordre des datas, sans cet artifice ta sub ne serait pas réentrante, c'est à dire que la prochaine fois qu'on y ferait appel elle lirait les mauvais datas, ceux du début.

D'une manière générale, si les datas sont lus dans le programme principale, ça ne pose pas de problème, mais s'ils sont dans un sous-programme, ou lus dans un sous-programme (c'est à dire susceptibles d'être lus plusieurs fois), là il faut en tenir compte.

Une remarque personnelle: un truc qui ne me paraît très judicieux, même si ça marche, je le reconnais, c'est d'avoir deux tableaux de variables du même nom, a$() et a%(), ça prête à confusion.
Revenir en haut Aller en bas
Contenu sponsorisé





@Ouf_ca_passe (RESTORE) Empty
MessageSujet: Re: @Ouf_ca_passe (RESTORE)   @Ouf_ca_passe (RESTORE) Empty

Revenir en haut Aller en bas
 
@Ouf_ca_passe (RESTORE)
Revenir en haut 
Page 1 sur 1
 Sujets similaires
-
» GestCompte
» restore_label
» COMPILATEUR V 0.9 beta 10 du 29 aout 2017
» Ersatz de 'RESTORE Etiquette'
» Problème avec RESTORE

Permission de ce forum:Vous ne pouvez pas répondre aux sujets dans ce forum
FORUM DE DISCUSSION SUR LE LANGAGE PANORAMIC :: PANORAMIC :: Présentation et bavardage-
Sauter vers: