2
votes

Qbasic: numéro de fichier illégal dans * numéro de ligne *

J'écris un programme en GW-BASIC. Pour certaines raisons, j'ai l'erreur suivante:

"Numà © ro de fichier illà © gal en 4712"

qui peut être traduit en anglais par,

"numéro de fichier illégal en 4712"

Voici une partie de mon code:

51 Chemin$ = "T:\Basic\Calculs\" + NF$

52 ON ERROR GOTO 60
53 MKDIR Chemin$
54 END

... ( a lot of code not important to solve this problem :) )

4711 CHDIR Chemin$
4712 OPEN "Intdrcrc.doc" FOR APPEND AS #3
4712 PRINT #3,       "*---------------------------------------------------------------------------------------------------------------*"
4713 PRINT #3, USING "* Centre ##### \        \#######.### #######.### Intersect Droite Cercler                                       *";IC,NC$,XC#,YC#
4714 PRINT #3, USING "* Point  ##### \        \#######.### #######.### R=#######.###                                                  *";IP,NP$,XP#,YP#,R#
4715 PRINT #3, USING "* 1er Intersection  M1                                            #####  \        \ #######.###   #######.###   *";I1,N1$,XM1#,YM1#
4716 PRINT #3, USING "* 2e  Intersection  M2                                            #####  \        \ #######.###   #######.###   *";I2,N2$,XM2#,YM2#
4717 PRINT #3,       "*---------------------------------------------------------------------------------------------------------------*"
4718 CLOSE #3
4719 CHDIR "T:\Basic"

J'ai eu le même problème dans les lignes précédentes, j'ai donc changé le # après "APPEND ", mais ici, à la ligne 4712 , changer le # ne résout pas le problème.

J'espère être assez clair, p >

merci beaucoup pour vos suggestions!

:)


3 commentaires

Oui, le message d'erreur dit clairement ce dont il a besoin. Qu'est-ce que Intdrcrc.doc ? Avez-vous ce fichier du tout? Est-ce dans le même dossier où vous exécutez votre programme?


Si le numéro de fichier (numero de fichier) est illégal, essayez de changer # 3 en # 99 . Peut-être que quelque chose d'autre utilise le fichier numéro 3? Vous avez également la ligne 4712 écrite deux fois; GW-BASIC peut ne pas permettre cela.


Salut Chrono, changer # 3 en # 99 ne résout pas le problème, j'obtiens toujours l'erreur "mauvais numéro de fichier". Concernant la double ligne 4712, c'était une erreur lors du copier / coller. Lorsque j'utilise CTRL + F pour trouver s'il y a "# 3" utilisé ailleurs dans le programme, le bloc-notes dit qu'il n'est utilisé que là.


4 Réponses :


0
votes

Il semble que le fichier Intdrcrc.doc n'existe pas (bien que je ne puisse pas en être sûr sans regarder le reste de votre code).

Ce que vous pouvez essayer est,

  • remplacez OPEN "Intdrcrc.doc" FOR APPEND AS # 3 par OPEN "Intdrcrc.doc" FOR OUTPUT AS 3 et essayez si cela donne une erreur. C'est juste pour tester bien sûr. Vous devriez revenir à APPEND plus tard. Nous voulons voir si l'erreur a disparu avec OUTPUT . Si tel est le cas, cela signifie probablement que le fichier n'existe pas, comme vous vous y attendiez.

Deuxièmement, vous devez mettre en œuvre une gestion des erreurs après la commande OPEN .

Ce que vous pouvez faire est quelque chose comme ceci,

 4710 ...
 4711 SHARED errorflag
 4712 OPEN "Intdrcrc.doc" FOR APPEND AS 1
 4713 IF errorflag <> 0 THEN
 4714   errorflag = 0
 4715   CLOSE
 4716   PRINT "File not found - press return to continue."
 4717   INPUT "", a$
 4718   EXIT SUB
 4719 END IF
4720 PRINT #3,       "*------------------------------------------*"
4721 ...

Pour que nous sachions, quelque chose de plus si une erreur se produit.


7 commentaires

Salut, le programme se trouve dans T: \ Basic. Lors de l'exécution du programme, il me demande de donner un numéro (numéro de dossier). Ensuite, le programme crée un nouveau dossier situé dans "T: \ Basic \ Calculs. Par exemple: T: \ Basic \ Calculs \ 12050. Ensuite, le programme enregistre différents fichiers .doc (dans ce cas, il est nommé" Intdrcr.doc ") dans le dossier créé. Qbasic crée automatiquement le nouveau fichier s'il n'existe pas. Dans ce cas, le fichier .doc n'existe pas encore, il devrait donc être créé, mais cela me donne une erreur.


Il ne comprend vraiment pas quel est le problème, car quelques lignes auparavant, j'ai utilisé la même syntaxe pour créer un autre fichier .doc et cela a bien fonctionné .. Je vais essayer ce que vous avez dit et vous tenir informé :)


Donc, j'ai utilisé le même code, attendez-vous au lieu d'utiliser "# 3 # je viens d'écrire" 3 ", je n'ai plus d'erreurs. Un fichier est créé .. cependant, et là encore je ne peux pas l'expliquer, le fichier créé est "crclcrd.doc" qui devrait être créé mais à la ligne 7182 ... cela n'a aucun sens .. Le programme fait 717 lignes, je pourrais vous l'envoyer dans un message privé si cela peut vous aider à comprendre ..


Avez-vous inclus après la ligne 4712, ce morceau de code que j'ai mis dans ma réponse? Le problème est que nous ne savons toujours pas ce qui se passe après la ligne 4712. Si vous ajoutez ce morceau de code, au moins nous pourrions être sûrs de ce qui se passe ou non. Le programme peut continuer après l'erreur et créer d'autres fichiers, ce qui ne résout pas le problème. Veuillez tester une fois avec ce morceau de code inclus dans votre programme.


sans la ligne "SHARED erroflag", j'ai le résultat sur l'autre message


avez-vous gwbasic ou qbasic? "Résultat: dans la fenêtre cmd de gwbasic, il est écrit:" Fichier non trouvé - appuyez sur retour pour continuer "" , car dans ce cas, votre question est également mal étiquetée.


oh .. mon mauvais .. j'utilise gwbasic.exe pour exécuter les fichiers .bas. J'ai écrit "qbasic" parce que je pensais que c'était le nom de la langue que j'utilise dans les fichiers .bas qui sont exécutés via le programme gwbasic.exe



0
votes

J'ai donc écrit ceci:

4702 CHDIR Chemin$
4703 OPEN "Intdrcrc.doc" FOR APPEND AS 3
4704 IF errorflag <> 0 THEN
4705 errorflag = 0
4706 CLOSE
4707 PRINT "File not found - press return to continue"
4708 INPUT "", a$
4709 EXIT SUB
4710 END IF

4712 PRINT 3,       "*---------------------------------------------------------------------------------------------------------------*"
4713 PRINT 3, USING "* Centre ##### \        \#######.### #######.### Intersect Droite Cercler                                       *";IC,NC$,XC#,YC#
4714 PRINT 3, USING "* Point  ##### \        \#######.### #######.### R=#######.###                                                  *";IP,NP$,XP#,YP#,R#
4715 PRINT 3, USING "* 1er Intersection  M1                                            #####  \        \ #######.###   #######.###   *";I1,N1$,XM1#,YM1#
4716 PRINT 3, USING "* 2e  Intersection  M2                                            #####  \        \ #######.###   #######.###   *";I2,N2$,XM2#,YM2#
4717 PRINT 3,       "*---------------------------------------------------------------------------------------------------------------*"
4718 CLOSE 3
4719 CHDIR "T:\Basic"

Résultat: dans la fenêtre cmd de gwbasic il est écrit: "Fichier non trouvé - appuyez sur retour pour continuer"

Et puis le fichier "intdrcrc.doc" est créé. Mais il est vide, comme si "PRINT 3" ne fonctionnait pas


2 commentaires

Lorsque le fichier .doc existe et que je lance à nouveau le programme, il écrit toujours "Fichier non trouvé - appuyez sur Retour pour continuer". De plus, je viens de remarquer qu'après avoir appuyé sur "retour" sur le clavier, j'ai une erreur de syntaxe à la ligne 4709


Spécifier EXIT SUB dans un programme ne fait rien si ce n'est pas dans un sous-programme.



0
votes

Pourquoi ne pas essayer:

4702 CHDIR Chemin$
4703 OPEN "Intdrcrc.doc" FOR OUTPUT AS #3
4712 PRINT #3, "*---------------------------------------------------------------------------------------------------------------*"
4713 PRINT #3, USING "* Centre ##### \        \#######.### #######.### Intersect Droite Cercler                                       *"; IC, NC$, XC#, YC#
4714 PRINT #3, USING "* Point  ##### \        \#######.### #######.### R=#######.###                                                  *"; IP, NP$, XP#, YP#, R#
4715 PRINT #3, USING "* 1er Intersection  M1                                            #####  \        \ #######.###   #######.###   *"; I1, N1$, XM1#, YM1#
4716 PRINT #3, USING "* 2e  Intersection  M2                                            #####  \        \ #######.###   #######.###   *"; I2, N2$, XM2#, YM2#
4717 PRINT #3, "*---------------------------------------------------------------------------------------------------------------*"
4718 CLOSE #3


0 commentaires

0
votes

Cette deuxième ligne numérotée 4712 remplace-t-elle la première? Si tel est le cas, le programme essaiera d'imprimer dans le fichier numéro 3 qui n'a pas été ouvert.

4712 OPEN "Intdrcrc.doc" FOR APPEND AS #3
4712 PRINT #3,       "*---------------------------------------------------------------------------------------------------------------*"


0 commentaires