Gambas France BETA


Pas de compte ? Incription

Continuer, malgré une erreur

Ce sujet est résolu.

1
AuteurMessages
Foromus#1 Posté le 2/10/2015 à 19:58:48
Bonjour à tous,

Mon projet a planté lors d'une recopie de fichier : normal, le fichier en question n'existait plus, vu que je l'avais effacé...
Donc, j'envisage d'utiliser "Catch", ce qui évitera la plantage, mais je voudrais alors que le programme continue, après m'avoir affiché un warning. Je suppose que c'est la commande "Continue" qui devrait faire l'affaire, mais aussi être sûr que seul le fichier manquant (cas ici présenté) soit ignoré, et que le programme se poursuive au suivant.
Jusqu'à présent, quand j'ai utilisé "Catch", la routine s'arrête normalement, et le programme continue, si continuation il y a, mais je n'ai jamais encore eu besoin d'une poursuite malgré l'erreur.
Voilà, merci de m'éclairer...
linuxos#2 Posté le 2/10/2015 à 22:58:25
Un peu de sel, de poivre et la crevette sera... Foromus,

Si tu dois tester l'existence ou non d'un fichier qui pourrait planter ton projet, le plus simple serait d'utiliser l'instruction EXIST("nom du fichier").

Catch serait plutôt a employer lors que l'on ne peut pas vraiment prevoir une erreur, c'est un peu une roue de secours, mais dans le cas d'un fichier c'est plus simple de tester sont existence ou pas.

Olivier
Lorsqu'on s'occupe d'informatique, il faut faire comme les canards... Paraître calme en surface et pédaler comme un forcené par en dessous.
Foromus#3 Posté le 3/10/2015 à 08:33:26
linuxos,

Certes, j'y ai bien pensé, et j'utilise, dans d'autres circonstances, cette commande, bien pratique au demeurant.
Mais dans mon cas, je ne trouve pas cette fonction adéquate, simplement parce que je ne suis pas certain, à l'avance, des fichiers à traiter, même si je suis "presque sûr".
Donc, pour moi, et mon besoin dans ce contexte, c'est d'avoir une procédure qui liste des fichiers, et, si ils existent, de les recopier ailleurs (tout en ne touchant pas à l'original, bien entendu). Dans le cas, où le fichier est absent, il doit être bien sûr ignoré, je dois être prévenu, et on doit passer au suivant.
En fait, ma liste de fichiers est préétablie, et c'est à partir de cette liste que travaille la procédure, or, il m'est arrivé de supprimer des fichiers, estimant qu'ils étaient devenus inutiles, mais comme leurs noms étaient toujours présents dans la liste, forcément, ça a planté. La commande "if exist" peut, certes, résoudre le problème, dans ce cas, elle n'est pas pratique, et comme je souhaiterais aussi être prévenu dans le cas d'une absence, ne serait-ce que pour rectifier la liste de base, je préférerais de beaucoup la solution que je cherche, si toutefois elle est possible. Mais je suppose qu'elle l'est, vu qu'en VB (ma culture "basique"...), elle existait...
Bon, je persiste...
Merci pour l'intérêt porté à ma demande !
Gambette#4 Posté le 3/10/2015 à 09:39:41
Salut,
je pense qu'il faudrait utiliser FINALLY
http://gambaswiki.org/wiki/lang/finally
Flachy Joe#5 Posté le 3/10/2015 à 12:24:55
Iguane : Il Gambas Uniquement pour Activer ses NEuronesSalut,
je ne vois pas où est le problème avec exist. Un exemple :
1
2
3
4
5
6
7
8
9
10
11
12
13
FUNCTION copier(file_list AS String[]) AS String[]
DIM file AS STRING
DIM valid_files AS string[]
FOR EACH file IN file_list
IF Exist(file) THEN
valid_files.push(file)
'copier
ELSE
Message("Le fichier " & file & "n'existe plus")
END IF
NEXT
RETURN valid_files
END
;) Flachy Joe ;)
gambix#6 Posté le 3/10/2015 à 16:42:15
Faire simple !Je valide le code de Flachy Joe.
Moins de texte dans une signature c'est agrandir son espace.
Foromus#7 Posté le 6/10/2015 à 10:55:38
Bonjour à tous,

Finalement, ma question était mal posée.
La commande exist est déjà utilisée, ne serait-ce que parce que la commande Kopy n'écrase pas le fichier de destination si il existe, il faut donc l'effacer avant de le recopier. En plus, cela alourdirait assez significativement le programme, déjà que le fait qu'il soit interprété n'en fait pas une formule 1, surtout sur une machine pas très récente.
La solution toute simple qui a été retenue consiste à utiliser catch. En fait, la probabilité d'erreur dans le cas présent, est extrêmement réduite, il suffit juste d'être renseigné si elle a lieu, que l'on soit devant l'écran ou pas. Dans la procédure, si catch est sollicité, je fais en sorte d'afficher un message warning, qui me donne le fichier concerné, m'invite à rectifier l'erreur, et ensuite, ferme le programme.
J'ai modifié en ce sens, et je trouve ce fonctionnement tout à fait correct.
Merci pour les aides et suggestions, cela pourrait servir pour d'autres projets ... si un jour l'inspiration me suggère d'autres créations !
1