Le langage SMS est exclu sur les forums ProgBoards, tout message ne respectant pas la charte sera déplacé, modifié, ou supprimé par nos modérateurs.

Forum Langages » BASIC » boucle for et fichier .dat

piaf33
ProgBoarder
Citer Windows XP Msie 6 - Posté le 20/08/2007 à 18:16
bonjour
je suis nouveau et je bute sur un problème de programmation en qbasic.

d'un coté j'ai une boucle " for c = 1 to (valeur) "

d'un autre coté j'ai un fichier "D7.DAT " qui contient 7 valeurs, ou un d'autres fichiers qui contiennent X valeurs.

je voudrais sans que ce fichier apparaisse à l'écran , affecter dans l'ordre des données du fichier " .DAT " les valeurs du fichier dans ma boucle for.

je pense que cela est simple, mais je n'ai trouvé aucune info dans les tutoriaux du net.

merci à celui ou ceux qui ont une réponse .

alain
Francesco
Modérateur
RemonterCiter Windows XP Firefox 2 - Posté le 21/08/2007 à 12:02
Bonjour,

cela est relativement simple. Un simple coup d'oeil dans l'aide de QBasic te fournira l'exemple que tu recheches. Plus précisemment, regarde le mot clé "INPUT #" et l'exemple qui lui est associé...
Gates gave you the windows.
GNU gave us the whole house.(Alexandrin)
piaf33
ProgBoarder
RemonterCiter Windows XP Msie 6 - Posté le 21/08/2007 à 22:25
bonjour
merci pour le renseignement, maintenant je sais accéder aux valeurs d'un fichier ".dat " .
mon problème n'est pas résolu pour autant.
dans l'exemple que tu cite (celui de qbasic et les notes de classe) , je voudrais mettre chaque note dans ma boucle for :

exemple, les notes sont 8 12 9 18 15

je voudrais faire for c = 1 to note
print " c ";c
next c

et que pour chaque boucle note = 8, puis note = 12 , etc jusqu'à 15

sachant qu'il y à dans cette exemple 5 valeurs et que je peux en avoir 360.

j'ai essayer le prog suivant en utilisant l'exemple que tu cite.

DEFINT A-Z
CLS
OPEN "D8.DAT" FOR INPUT AS#1
DO WHILE NOT EOF (1)
INPUT #1 , note
FOR c = 1 TO note
PRINT " note : "; note : rem c'est juste pour voir
NEXT c
LOOP


le résultat est que la boucle s'arrête à la première note. je pense que le prog est pas bon, j'ai essayer plein de sens ? et rien.

une autre question . j'ai un repertoire qui contient des fichiers de "D1.DAT à D360.DAT .

comment si en entré de programme je fais
input "indice " ; i

comment je peux affecter cette valeur à D?.DAT contenu dans la ligne d'ouvertue de fichier.
je pense que j'abuse, mais celà fait du bien quelque part.

merci encore
alain

Francesco
Modérateur
RemonterCiter Windows XP Firefox 2 - Posté le 22/08/2007 à 08:56
Pour la deuxième question, a partir de ton indice i, il faut créé une chaine de caractère représentant le nom du fichier.


nomFichier$ = "D" + dec$(i) +".DAT"



Pour le premier problème, je ne vois pas dans l'immédiat, et je ne peux pas tester actuellement. Normalement cela devrait marcher. Je regarderais dès que j'ai le temps, mais ce n'est pas dis que je puisse ce soir, ni demain...
Gates gave you the windows.
GNU gave us the whole house.(Alexandrin)
Freem
Modérateur
RemonterCiter Windows XP Msie 6 - Posté le 22/08/2007 à 22:12
Il me semble que le mot clé INPUT# permet de lire une ligne entière... Je pense donc que ton programme lit toute la ligne au premier coups et n'à donc plus rien à lire.
Essayes d'écrire tes valeurs sur des lignes différentes dans ton fichier .DAT?

PS: au lieu d'utiliser REM pour écrire un commentaire, tu peut utiliser ' qui ne nécessite pas de changer de ligne de code, et qui permet donc de se passer du ":" (clein d'oeil)
Tu me dis, j'oublie. Tu m'enseignes, je me souviens. Tu m'impliques, j'apprends. - Benjamin Franklin
piaf33
ProgBoarder
RemonterCiter Windows XP Msie 6 - Posté le 23/08/2007 à 08:58
bonjour

les données dans mon fichier " .dat " sont toutes sur des lignes différentes.

là je suis complétement bloqué dans l'utilisation de mon programme de commande de moteurs pas à pas.

merci
alain
Francesco
Modérateur
RemonterCiter Windows XP Firefox 2 - Posté le 23/08/2007 à 12:54
Il me semble que pour lire une ligne entière d'un coup, il faut utiliser LINE INPUT et non INPUT. Enfin bon, c'est un vieux souvenir, peut-etre erroné...
Gates gave you the windows.
GNU gave us the whole house.(Alexandrin)
Freem
Modérateur
RemonterCiter Windows XP Msie 6 - Posté le 24/08/2007 à 17:23
Euh... Francesco, tu as tout a fait raison en fait... concernant QB, on dirait bien que j'ai énormément perdu...

Bon, si tu es bloqué à ce point, je vais te dire...
Personnellement, je n'ai utilisé que les fichiers binaires en QB, parce que je les trouve simples.
Si je me souvient bien (ce qui est loins d'être sûr), il est possible en ouvrant un fichier comme suit

OPEN fichier FOR INPUT AS #1

de le lire avec l'instruction GET réservée aux fichiers. (il en existe également une qui gère les sprites) si tu y passes une variable STRING et que tu convertis ensuite la chaîne obtenue avec (je crois) STR$.
Sinon, tu peux aussi écrire directement tes valeurs en binaire et les lire en utilisant une variable de tipe INTEGER.
Tu me dis, j'oublie. Tu m'enseignes, je me souviens. Tu m'impliques, j'apprends. - Benjamin Franklin
piaf33
ProgBoarder
RemonterCiter Windows XP Msie 6 - Posté le 25/08/2007 à 20:07
bonjour

alors là , je suis complètement largé.
je ne vous suis plus.
merci quand même.
alain
Francesco
Modérateur
RemonterCiter Linux Firefox 2 - Posté le 25/08/2007 à 22:08
J'ai testé ton programme, en le modifiant légèrement


DEFINT A-Z
CLS
OPEN "D8.DAT" FOR INPUT AS#1
DO WHILE NOT EOF (1)
INPUT #1 , note
PRINT " note : "; note : rem c'est juste pour voir
LOOP



car j'avoue que la présence de la boucle FOR ne faisait qu'afficher la note 8 huit fois, la note 15 quinze fois, etc...

Quoiqu'il en soit, j'ai bien toutes les notes qui sont listées, et j'ai essayé avec 3 fichiers de données différents :
- un où les notes sont séparées par des espaces
- un où les notes sont séparées par des tabulations
- un où les notes sont toutes sur une ligne distinctes

J'avoue ne pas trop voir où ce situe le problème que tu rencontre, puisque chez moi, ça marche...

Edité par Francesco ( 25/08/2007 22:09:12 )
Gates gave you the windows.
GNU gave us the whole house.(Alexandrin)
Freem
Modérateur
RemonterCiter Windows XP Firefox 2 - Posté le 19/02/2008 à 11:39
Bon, je classe résolu puisque pas de réponse...
Et comme tu dis que ça marche :/
Tu me dis, j'oublie. Tu m'enseignes, je me souviens. Tu m'impliques, j'apprends. - Benjamin Franklin

Poster une réponse

STOP aux fautes volontaires !
Message
Formatage
Note: pour partager du code source, merci d'utiliser le wall !
Smileys (sourire) (yekyek) (clein d'oeil) (désapprouve) (triste) (cool) (langue) (confus) (gêné) (neutre) (eek) (surpris) (diable) (flèche) (exclamation) (question) (diable) (idée) (méchant)
Pseudonyme
Recopiez le code
v6 © Computaid SPRL 2005-2008 - Tous droits réservés - Hébergé par eTigris - Page générée en 0,063 s - Crédits - Stats
1 connecté